Ir para conteúdo

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

DAMPA

web crawler com php não obtém todo o conteúdo da página

Recommended Posts

Olá a todos, estou desenvolvendo um crawler, mas estou tendo dificuldades em obter os dados da página.

Deixa eu explicar de forma detalhada

O crawler enxerga o html que a página gera, e tudo bem, a idéia é essa mesmo.

 

Estou buscando o "H1" da página e o crawler não encontra.

Quando acesso o site pelo navegador e clico em "ver código fonte" verifico que realmente o "H1" não existe, mas quando peço para "inspecionar elemento" pelo navegador o "H1" está lá, justamente na página que estou fazendo a pesquisa com o crawler.

Alguém me dá uma luz de como posso obter esses dados?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Provavelmente o H1 está vindo após a renderização da página... talvez via AJAX.

 

Com uma simples consulta no Google, encontrei isso:

http://stackoverflow.com/questions/28186645/php-get-page-content-after-all-dynamic-content-has-been-loaded

 

Veja se a resposta te ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Só complementado. Não apenas AJAX, interações realizadas por javascript, são interpretadas pelo browser. O PHP não interpretará ou executará conteúdo dinâmico.

Compartilhar este post


Link para o post
Compartilhar em outros sites
17 horas atrás, Gabriel Heming disse:

Só complementado. Não apenas AJAX, interações realizadas por javascript, são interpretadas pelo browser. O PHP não interpretará ou executará conteúdo dinâmico.

 

Então não conseguirei obter os dados através do PHP? Nem com phpwebdriver?

Compartilhar este post


Link para o post
Compartilhar em outros sites
12 minutos atrás, Maykel-ctba disse:

Chegou a tentar com o WebDriver, Dampa?

 

Estou apanhando aqui, pois essa será uma aplicação online, até baixei o webdriver do facebook no github, mas não tenho idéia de como funciona.

 

Estou buscando no google como utilizar, mas o conteúdo é pouco

Compartilhar este post


Link para o post
Compartilhar em outros sites

Compartilhar este post


Link para o post
Compartilhar em outros sites

@Rodrigo Vieira E da Silva Acho que você não leu o tópico. O conteúdo é gerenciado dinamicamente, após o carregamento do browser, portanto estas soluções comuns não se aplicam.

 

@DAMPA Na boa? Eu desistiria de pegar o conteúdo de outro site.

Compartilhar este post


Link para o post
Compartilhar em outros sites
Em 28/03/2017 at 16:50, Maykel-ctba disse:

@Rodrigo Vieira E da Silva Acho que você não leu o tópico. O conteúdo é gerenciado dinamicamente, após o carregamento do browser, portanto estas soluções comuns não se aplicam.

 

@DAMPA Na boa? Eu desistiria de pegar o conteúdo de outro site.

 

O cliente quer obter esses dados, então terei que ralar para encontrar uma solução

 

Obrigado pelo feedback

Compartilhar este post


Link para o post
Compartilhar em outros sites

Contatar o site que disponibiliza esses dados, perguntando se rola fazer uma API ou algo do gênero?

 

Ou então chamar diretamente a chamada que ocorre em Ajax.

 

Ex:

index.php (ocorre uma chamada para a pagina 'header.php' e outra de 'dados.php'... ambas via ajax)

 

@ Dica:

Monitora a aba Network filtra pro XHR e você vai ver todas as chamadas que ocorrem de Ajax ;)

 

 

Compartilhar este post


Link para o post
Compartilhar em outros sites

  • Conteúdo Similar

    • Por Hacker_Buiu
      Coloquei os códigos fontes no GitLab por ser Open Source,sigo essa filosofia Open Source,por isso não coloquei no GitHub.
       
       
      Visualizador de imagem Delphi

      Coloque um OpenPictureDialog no Form e digite o código abaixo no botão:Não se esqueça de adicionar um TImage para ver a imagem.

      Código:
       
      if OpenPictureDialog1.Execute then Image1.Picture.LoadFromFile(OpenPictureDialog1.Filename); Editor de Texto
       
      Novo Memo1.Clear; Memo1.SetFocus; ----------------------------------------- Abrir if openDialog1.Execute then begin memo1.Lines.LoadFromFile(OpenDialog1.Filename); memo1.setfocus; end; ----------------------------------------- Botão Salvar if save.execute then begin memo1.Lines.SaveToFile(save.Filename); end; ----------------------------------------- Copiar Memo1.CopytoClipBoard; ----------------------------------------- Colar Memo1.PasteFromClipboard; ; ----------------------------------------- Recortar Memo1.CutToClipBoard ----------------------------------------- Fonte FontDialog1.Font:=Memo1.Font; if FontDialog1.Execute then begin Memo1.Font:= FontDialog1.Font; Memo1.SetFocus; end; Gerador de Senha
       
      var i:integer; const str='1234567890ABCDEFGHIJKLMNOPQRSTUVWXYZ@!#$%&*'; max=14; begin Edit1.Text:=''; for i:=1 to max do begin Edit1.Text:=Edit1.Text+str[random(length(str))+1]; end; Cronômetro
       
      unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, StdCtrls, Buttons, ExtCtrls; type { TForm1 } TForm1 = class(TForm) Cronometrar: TBitBtn; Parar: TBitBtn; Edit1: TEdit; Timer1: TTimer; procedure CronometrarClick(Sender: TObject); procedure PararClick(Sender: TObject); procedure Timer1Timer(Sender: TObject); private public end; var Form1: TForm1; HoraInicial:TDateTime; implementation {$R *.lfm} { TForm1 } procedure TForm1.CronometrarClick(Sender: TObject); begin HoraInicial := Now; Timer1.Enabled := True; end; procedure TForm1.PararClick(Sender: TObject); begin HoraInicial := Now; Timer1.Enabled := False; end; procedure TForm1.Timer1Timer(Sender: TObject); begin Edit1.Text := FormatDateTime('hh:mm:ss',Now-HoraInicial); end; end. Criptografador (conceito de criptografia)
       
      unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, FileUtil, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Button1: TButton; Button2: TButton; edtcriptografado: TEdit; edttexto: TEdit; edtdescriptografado: TEdit; edtkey: TEdit; Label1: TLabel; Label2: TLabel; Label3: TLabel; Label4: TLabel; procedure Button1Click(Sender: TObject); procedure Button2Click(Sender: TObject); procedure FormCreate(Sender: TObject); private function criptografar(const key, texto:String):String; function descriptografar(const key, texto:String):String; public end; var Form1: TForm1; implementation {$R *.lfm} { TForm1 } procedure TForm1.Button1Click(Sender: TObject); begin edtcriptografado.Text:=criptografar(edtkey.Text,edttexto.Text); end; procedure TForm1.Button2Click(Sender: TObject); begin edtdescriptografado.Text:=descriptografar(edtkey.Text, edtcriptografado.Text); end; function TForm1.criptografar(const key, texto: String): String; var I: Integer; C: Byte; begin Result := ''; for I := 1 to Length(texto) do begin if Length(Key) > 0 then C := Byte(Key[1 + ((I - 1) mod Length(Key))]) xor Byte(texto[I]) else C := Byte(texto[I]); Result := Result + AnsiLowerCase(IntToHex(C, 2)); end; end; function TForm1.descriptografar(const key, texto: String): String; var I: Integer; C: Char; begin Result := ''; for I := 0 to Length(texto) div 2 - 1 do begin C := Chr(StrToIntDef('$' + Copy(texto, (I * 2) + 1, 2), Ord(' '))); if Length(Key) > 0 then C := Chr(Byte(Key[1 + (I mod Length(Key))]) xor Byte(C)); Result := Result + C; end; end; end. Calculadora Empresarial
       
      procedure TForm1.CalcularCicloDoProcessoClick(Sender: TObject); var n1,n2,resultado:real; //declaração de variáveis do tipo real(aceita numero inteiro e com vírgula) begin n1:=StrToFloat(TempoTrabalhadoEmHoras.Text);// converte n1(numero1) para numero flutuante n2:=StrToFloat(NumeroDeProdutosBons.Text);//converte n2(numero2)para numero flutuante resultado:=n1/n2; //Dividi a variável n1(numero1) e n2(numero2 ResultadoDoCicloDoProcesso.Text:=FloatToStr(resultado);//mostra o resultado convertendo numero flutuante(Float) para texto(String) procedure TForm1.CalcularTaxaDeProducaoClick(Sender: TObject); var n1,n2,resultado:real; begin n1:=StrToFloat(TempoTrabalhado.Text); n2:=StrToFloat(NumeroDeProdutosBons.Text); resultado:=n2/n1; ResultadoTaxaDeProducao.Text:=FloatToStr(resultado); procedure TForm1.CalcularTaxaDeProducaoPorRecursoClick(Sender: TObject); var n1,n2,resultado:real; begin n1:=StrToFloat(TaxaDeProducao.Text); n2:=StrToFloat(NumeroDeFuncionarios.Text); resultado:=n1/n2; ResultadoTaxaDeProducaoPorRecurso.Text:=FloatToStr(resultado); procedure TForm1.CalcularGiroDeEstoqueClick(Sender: TObject); var n1,n2,n3,resultado:real; begin n1:=StrToFloat(NumeroDeProdutosBons.Text); n2:=StrToFloat(TotalDeMateriais.Text); n3:=StrToFloat(TotalDeProdutos.Text); resultado:=n1*12/n2/n3; ResultadoDoGiroDoEstoque.Text:=FloatToStr(resultado); procedure TForm1.CalcularFaltaDeQualidadeClick(Sender: TObject); var n1,n2,resultado:real; begin n1:=StrToFloat(NumeroDeProdutosComDefeitos.Text); n2:=StrToFloat(TotalProduzido.Text); resultado:=n1/n2; ResultadoDaFaltaDeQualidade.Text:=FloatToStr(resultado); procedure TForm1.SairClick(Sender: TObject); begin Form1.Close; procedure TForm1.CalcularCPVClick(Sender: TObject); var n1,n2,resultado:real; begin n1:=StrToFloat(NumeroDeProdutosBons.Text); n2:=StrToFloat(ValorUnitario.Text); resultado:=n1*n2; ResultadoCPV.Text:=FloatToStr(resultado); procedure TForm1.CalcularCustoDaFaltaDeQualidadeClick(Sender: TObject); var n1,n2,resultado:real; begin n1:=StrToFloat(NumeroDeProdutosComDefeitos.Text); n2:=StrToFloat(ValorUnitario.Text); resultado:=n1*n2; ResultadoDoCustoDaFaltaDeQualidade.Text:=FloatToStr(resultado); Botão Apagar: TempoTrabalhado.Text:=''; TempoTrabalhadoEmHoras.Text:=''; NumeroDeProdutosBons.Text:=''; resultadoDoCicloDoProcesso.Text:=''; TaxaDeProducao.Text:=''; ResultadoTaxaDeProducao.Text:=''; NumeroDeFuncionarios.Text:=''; ResultadoTaxaDeProducaoPorRecurso.Text:=''; TotalDeMateriais.Text:=''; TotalDeProdutos.Text:=''; ResultadoDoGiroDoEstoque.Text:=''; NumeroDeProdutosComDefeitos.Text:=''; TotalProduzido.Text:=''; ResultadoDaFaltaDeQualidade.Text:=''; ResultadoCPV.Text:=''; ResultadoDoCustoDaFaltaDeQualidade.Text:=''; Form1. close; //Fecha o Form procedure TForm2.CalcularCustoDeCarregarEstoqueClick(Sender: TObject); var n1,n2,n3,resultado:real; begin n1:=StrToFloat(EstoqueDeProducaoEmProcesso.Text); n2:=StrToFloat(ValorUnitario.Text); n3:=StrToFloat(TaxaDeJuros.Text); resultado:=n1*n2*n3; ResultadoDoCustoDeCarregarEstoque.Text:=FloatToStr(resultado); end; procedure TForm2.CalcularCustoFixoClick(Sender: TObject); var n1,n2,resultado:real; begin n1:=StrToFloat(SalarioDoColaborador.Text); n2:=StrToFloat(DespesasGerais.Text); resultado:=n1+n2; ResultadoDoCustoFixo.Text:=FloatToStr(resultado); end; procedure TForm2.CalcularCustoTotalClick(Sender: TObject); var n1,n2,n3,n4,resultado:real; begin n1:=StrToFloat(CPV.Text); n2:=StrToFloat(CustoDaQualidade.Text); n3:=StrToFloat(CustoDoEstoque.Text); n4:=StrToFloat(CustoFixo.Text); resultado:=n1+n2+n3+n4; CustoTotal.Text:=FloatToStr(resultado); end; procedure TForm2.CalcularCustoUnitarioClick(Sender: TObject); var n1,n2,resultado:real; begin n1:=StrToFloat(CustoTotal.Text); n2:=StrToFloat(NumeroDeProdutosBons.Text); resultado:=n1/n2; ResultadoDoCustoUnitario.Text:=FloatToStr(resultado); end; procedure TForm2.SairClick(Sender: TObject); begin Form2.Close;// Fecha o Form2 end; procedure TForm2.ApagarClick(Sender: TObject); begin EstoqueDeProducaoEmProcesso.Text:=''; ValorUnitario.Text:=''; TaxaDeJuros.Text:=''; ResultadoDoCustoDeCarregarEstoque.Text:=''; SalarioDoColaborador.Text:=''; DespesasGerais.Text:=''; ResultadoDoCustoFixo.Text:=''; CPV.Text:=''; CustoDaQualidade.Text:=''; CustodoEstoque.Text:=''; CustoFixo.Text:=''; CustoTotal.Text:=''; NumeroDeProdutosBons.Text:=''; ResultadoDoCustoUnitario.Text:=''; end; Calculadora de décimo terceiro salário
       
      unit Unit1; {$mode objfpc}{$H+} interface uses Classes, SysUtils, LResources, Forms, Controls, Graphics, Dialogs, StdCtrls; type { TForm1 } TForm1 = class(TForm) Calcular: TButton; Apagar: TButton; Edit1: TEdit; Edit2: TEdit; Edit3: TEdit; Sair: TButton; procedure ApagarClick(Sender: TObject); procedure CalcularClick(Sender: TObject); procedure SairClick(Sender: TObject); private { private declarations } public { public declarations } end; var Form1: TForm1; implementation { TForm1 } procedure TForm1.CalcularClick(Sender: TObject); var n1,n2,resultado:real;//n1(numero1),n2(numero2),resultado(resultado do calculo) begin n1:=StrToFloat(Edit1.text); n2:=StrToFloat(Edit2.text); resultado:=n1*n2/12; Edit3.text:=FloatToStr(resultado); end; procedure TForm1.SairClick(Sender: TObject); begin Form1.Close; end; procedure TForm1.ApagarClick(Sender: TObject); begin Edit1.text:=''; Edit2.text:=''; Edit3.Text:=''; end; initialization {$I unit1.lrs} end. Calculadora completa com porcentagem
      unit UnitCalculadora; {$mode objfpc}{$H+} interface uses Classes, SysUtils, Forms, Controls, Graphics, Dialogs, ExtCtrls, StdCtrls, Menus; type { TForm1 } TForm1 = class(TForm) BtnDivisao: TButton; BtnMultiplicacao: TButton; BtnSete: TButton; BtnOito: TButton; BtnNove: TButton; BtnC: TButton; BtnQuatro: TButton; BtnCinco: TButton; BtnSeis: TButton; BtnDois: TButton; BtnTres: TButton; BtnSubtracao: TButton; BtnAdicao: TButton; BtnUm: TButton; BtnPonto: TButton; BtnIgual: TButton; BtnPorcentagem: TButton; BtnZero: TButton; Edit1: TEdit; Label1: TLabel; MainMenu1: TMainMenu; MenuItem1: TMenuItem; MenuItem2: TMenuItem; Panel1: TPanel; procedure BtnAdicaoClick(Sender: TObject); procedure BtnCClick(Sender: TObject); procedure BtnCincoClick(Sender: TObject); procedure BtnDivisaoClick(Sender: TObject); procedure BtnDoisClick(Sender: TObject); procedure BtnIgualClick(Sender: TObject); procedure BtnMultiplicacaoClick(Sender: TObject); procedure BtnNoveClick(Sender: TObject); procedure BtnOitoClick(Sender: TObject); procedure BtnPorcentagemClick(Sender: TObject); procedure BtnQuatroClick(Sender: TObject); procedure BtnSeisClick(Sender: TObject); procedure BtnSeteClick(Sender: TObject); procedure BtnSubtracaoClick(Sender: TObject); procedure BtnTresClick(Sender: TObject); procedure BtnUmClick(Sender: TObject); procedure BtnPontoClick(Sender: TObject); procedure BtnZeroClick(Sender: TObject); private public end; var Form1: TForm1; valor1, valor2, porcentagem:real; tipoconta:string; implementation {$R *.lfm} { TForm1 } procedure TForm1.BtnAdicaoClick(Sender: TObject); begin tipoconta:='Adição'; valor1:=strtofloat(Edit1.text); Edit1.Text:=''; Label1.Caption:='+'; end; procedure TForm1.BtnCClick(Sender: TObject); begin Edit1.text:=''; valor1:=0; valor2:=0; tipoconta:=''; Label1.Caption:=''; end; procedure TForm1.BtnCincoClick(Sender: TObject); begin Edit1.text:=Edit1.text+'5'; end; procedure TForm1.BtnDivisaoClick(Sender: TObject); begin tipoconta:='Divisão'; valor1:=strtofloat(Edit1.text); Edit1.Text:=''; Label1.Caption:='/'; end; procedure TForm1.BtnDoisClick(Sender: TObject); begin Edit1.text:=Edit1.text+'2'; end; procedure TForm1.BtnIgualClick(Sender: TObject); begin if tipoconta = 'Adição' then begin valor2:=StrToFloat(edit1.text); edit1.text:=FloatToStr(valor1+valor2); end; if tipoconta = 'Subtração' then begin valor2:=StrToFloat(edit1.text); edit1.text:=FloatToStr(valor1-valor2); end; if tipoconta = 'Divisão' then begin valor2:=StrToFloat(edit1.text); edit1.text:=FloatToStr(valor1/valor2); end; if tipoconta= 'Multiplicação' then begin valor2:=StrToFloat(Edit1.Text); Edit1.Text:=FloatToStr(Valor1 * Valor2); end; end; procedure TForm1.BtnMultiplicacaoClick(Sender: TObject); begin tipoconta:='Multiplicação'; valor1:=strtofloat(Edit1.text); Edit1.Text:=''; Label1.Caption:='X'; end; procedure TForm1.BtnNoveClick(Sender: TObject); begin Edit1.text:=Edit1.text+'9'; end; procedure TForm1.BtnOitoClick(Sender: TObject); begin Edit1.text:=Edit1.text+'8'; end; procedure TForm1.BtnPorcentagemClick(Sender: TObject); var resultado:real; begin if tipoconta ='Multiplicação' then begin valor2:=strtofloat(edit1.text); resultado:=valor1*valor2/100; Edit1.text:=FloatToStr(resultado); Label1.Caption:='%'; end; if tipoconta = 'Adição' then begin porcentagem:=strtofloat(edit1.text); porcentagem:=porcentagem/100; porcentagem:=porcentagem*valor1; edit1.text:=floattostr(valor1+porcentagem); end; if tipoconta = 'Subtração' then begin porcentagem:=strtofloat(edit1.text); porcentagem:=porcentagem/100; porcentagem:=porcentagem*valor1; edit1.text:=floattostr(valor1-porcentagem); end; if tipoconta = 'Divisão' then begin porcentagem:=strtofloat(edit1.text); porcentagem:=porcentagem/100; porcentagem:=porcentagem*valor1; edit1.text:=floattostr(valor1/porcentagem); end; end; procedure TForm1.BtnQuatroClick(Sender: TObject); begin Edit1.text:=Edit1.text+'4'; end; procedure TForm1.BtnSeisClick(Sender: TObject); begin Edit1.text:=Edit1.text+'6'; end; procedure TForm1.BtnSeteClick(Sender: TObject); begin Edit1.text:=Edit1.text+'7'; end; procedure TForm1.BtnSubtracaoClick(Sender: TObject); begin tipoconta:='Subtração'; valor1:=strtofloat(Edit1.text); Edit1.Text:=''; Label1.Caption:='-'; end; procedure TForm1.BtnTresClick(Sender: TObject); begin Edit1.text:=Edit1.text+'3'; end; procedure TForm1.BtnUmClick(Sender: TObject); begin Edit1.text:=Edit1.text+'1'; end; procedure TForm1.BtnPontoClick(Sender: TObject); begin Edit1.text:=Edit1.text+'.'; end; procedure TForm1.BtnZeroClick(Sender: TObject); begin Edit1.text:=Edit1.text+'0'; end; end.  
       
    • Por programananet
      Quero vender códigos fontes de sites para empresas ou outras pessoas com um site fazendo a mediação !
      Existe um site onde podemos vender código fonte , se sim qual e como vendemos ?
    • Por Machado_Dan
      Boa noite pessoal.
      Sou iniciante em PHP e estou tentando desenvolver um crawler em PHP para um projeto.
      Já consegui pegar as informações que preciso, porém o site que estou 'crawleando' só exibe 20 resultados por página. Dependendo de qual cidade é inserida no campo de busca, podemos ter X páginas para serem exibidas da 1ª a última.
      As páginas seguem o mesmo padrão com a númeração no final.
      Mas não estou tendo nenhuma ideia que funcione de como automatizar isso no crawler para que ele possa ler todas as páginas disponíveis.
      Alguem consegue me ajudar?

      Segue crawler:
       
      <?php   require "vendor/autoload.php";   use GuzzleHttp\Client; use Sunra\PhpSimple\HtmlDomParser;   $client = new Client([  'headers' => [   'User-Agent' => 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/78.0.3904.108 Safari/537.36'  ] ]);   $URL = 'https://www.guiamais.com.br/encontre?searchbox=true&what=&where=S%C3%A3o+Paulo%2C+SP&page=1';   $html = $client->request("GET",$URL)->getBody(); $dom = HtmlDomParser::str_get_html($html);   foreach ($dom->find('meta[itemprop=url]') as $Key => $link){     $urlEmpresa = $link->content;     $html = $client->request("GET",$urlEmpresa)->getBody();   $domEmpresa = HtmlDomParser::str_get_html($html);     $basicsInfo = $domEmpresa->find('div.basicsInfo',0);   $extendedInfo = $domEmpresa->find('div.extendedInfo',0);     $titulo = html_entity_decode($basicsInfo->find('h1',0)->plaintext);   $categoria = html_entity_decode(trim($basicsInfo->find('p.category',0)->plaintext));     $endereco = preg_replace('/\s+/',' ',html_entity_decode(trim($extendedInfo->find('.advAddress',0)->plaintext)));     $telefones = [];   foreach($extendedInfo->find('li.detail') as $li){     $telefones[] = trim($li->plaintext);   }     echo $titulo.PHP_EOL.$categoria.PHP_EOL.$endereco.PHP_EOL;     echo'<pre>';   print_r($telefones);   echo'</pre>';     echo PHP_EOL.PHP_EOL.PHP_EOL;   }   ?>  
      Agradeço muito a ajuda.
       
      Abraços.
    • Por Tardelli
      Olá pessoal, sou novo aqui. Estou com uma dúvida e gostaria de saber se vocês poderiam me ajudar. Tenho um blog de noticias no blogger há 10 anos. Antes meu blog aparecia com muita facilidade nos resultados no google, hoje em dia, quase não aparece. Tenho 26 mil postagens, já que é um blog de noticias. As postagens estão todas indexadas. Recentemente tive que trocar o template para um mais novo e moderno. Alguém me disse que os códigos do meu blog poderiam está com problemas. Será que vocês poderiam dá uma olhada no código fonte para perceberem alguma coisa de errada com o mesmo? Sou leigo e entendo o básico de HTML.
      meu site é o: www.catingueiraonline.com
    • Por Alvaro Pacífico Serpa
      Olá pessoal, eu estava copiando um trecho de um código fonte usando o file_gets_contents
      $log=file_get_contents($url); $trechoInicial = "VideoUrl('"; $trechoFinal = "')"; $posicao1 = strpos($log, $trechoInicial); $posicao2 = strpos( $log, $trechoFinal, $posicao1 ); $trechoCopiado = substr( $log, $posicao1 + strlen( $trechoInicial ), $posicao2 - $posicao1 - strlen( $trechoInicial ) ); echo $trechoCopiado; Estava funcionando perfeitamente e do nada parou de funcionar, tem alguma outra forma de fazer isto que estou fazendo?
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.