Ir para conteúdo

POWERED BY:

Arquivado

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

Leuuuuu

Problema com cURL

Recommended Posts

Vou tentar ser o mais claro possível.

Possuo uma função em php utilizando cURL que busca imagens de 3 captchas diferentes.

No meu servidor local para testes (xampp) consigo receber as 3 imagens sem problemas, tudo funciona.

No servidor remoto, eu recebo duas das imagens, a terceira não tem como, já tentei de tudo.

 

Esta é a função:

	function recebe_imagem($url, $arquivo, $cookiej="") {
		$ch = curl_init ($url);
		curl_setopt($ch, CURLOPT_HEADER, 0);
		curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);
		curl_setopt($ch, CURLOPT_COOKIEJAR, $cookiej);
		curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
		curl_setopt($ch, CURLOPT_BINARYTRANSFER,1);
		$data=curl_exec($ch);
		curl_close ($ch);
		$fp = fopen($arquivo,'w');
		fwrite($fp, $data);
		fclose($fp);
		return $arquivo;
	}

 

Se alguém puder me ajudar ficarei muito agradecido.

 

Obrigado!

Compartilhar este post


Link para o post
Compartilhar em outros sites

configure e verifique o log de erros do php para identificar a causa

 

para adiantar, olhando o script, há um parâmetro que possui restrições

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true);

se o ambiente estiver com php em safe mode, esse recurso estará desativado.

 

obs: lembrando que é apenas dica. não a solução definitiva para o caso específico

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ajudaria, também colocar um:

 

 or die( curl_error() );

Na frente do curl_exec().

Compartilhar este post


Link para o post
Compartilhar em outros sites

Ajudaria, também colocar um:

 

 or die( curl_error() );

Na frente do curl_exec().

 

Obrigado pelas ajudas, mas o problema perciste... lembrando que o código não da um erro, ele funciona para 2 dos 3 links, apenas no terceiro ele não retorna a imagem que teria que retornar, e o mesmo código na maquina local funciona que é uma beleza.

 

Com o código

 or die( curl_error() );

na frente do curl_exec() da esse erro: Warning: Wrong parameter count for curl_error() in /home/infoauto/public_html/sp/curlf.php on line 9

 

Obrigado a todos e continuo buscando uma solução.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Falha minha.

 

curl_error() exige um parâmetro, que é a variável que você usou no curl_init().

Compartilhar este post


Link para o post
Compartilhar em outros sites

Falha minha.

 

curl_error() exige um parâmetro, que é a variável que você usou no curl_init().

 

$data=curl_exec($ch) or die(curl_error($ch));

 

Agora sim, estranhamente este é o problema: couldn't connect to host

Alguém saberia o motivo disto?

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boooom, o que será que pode ser...? :assobiando:

 

O endereço que você passou existe? Isto é, existe online? Você consegue copiar o URL e acessar manualmente pelo navegador?

 

Se não, está respondido.

 

Se sim, então vá eliminando, um a um, os curl_setopt()'s que você definiu, comentando-os a cada teste.

 

Quando funcionar, vai saber quem é a opção culpada. Se ainda não, veremos.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Boooom, o que será que pode ser...? :assobiando:

 

O endereço que você passou existe? Isto é, existe online? Você consegue copiar o URL e acessar manualmente pelo navegador?

 

Se não, está respondido.

 

Se sim, então vá eliminando, um a um, os curl_setopt()'s que você definiu, comentando-os a cada teste.

 

Quando funcionar, vai saber quem é a opção culpada. Se ainda não, veremos.

 

O endereço é este: http://www3.fazenda.sp.gov.br/ipvanet/imagemDinamica.dContent

Ele existe sim, inclusive quando rodo no servidor local (xampp) ele funciona direitinho, só não funciona no servidor remoto.

Já tentei tirar os curl_setopt()'s sem sucesso, inclusive já inverti os valores (true to false <=> false to true).

É um mistério algo funcionar tão bem em um servidor e não funcionar nem a pau em outro :(

Compartilhar este post


Link para o post
Compartilhar em outros sites

o erro persiste..

você deve configurar adequadamente os logs do php para ver alguma possível mensagem de erro

 

o que pode acontecer é o dns (primário/secundario) do server não conseguirem resolver o host por algum motivo..

no entanto, o problema pode ser qualquer outra coisa.. por isso, configure e observe os logs..

 

obs: logs do php é diferente do log do webserver (apache, iis, nginx, etc..)

Compartilhar este post


Link para o post
Compartilhar em outros sites

o erro persiste..

você deve configurar adequadamente os logs do php para ver alguma possível mensagem de erro

 

o que pode acontecer é o dns (primário/secundario) do server não conseguirem resolver o host por algum motivo..

no entanto, o problema pode ser qualquer outra coisa.. por isso, configure e observe os logs..

 

obs: logs do php é diferente do log do webserver (apache, iis, nginx, etc..)

 

hinom, criei um log desta forma:

		function error($numero,$texto){
		$ddf = fopen('error.log','a');
		fwrite($ddf,"[".date("r")."] Erro $numero:$texto\r\n");
		fclose($ddf);
	}

	set_error_handler('error');

 

Porém não obtive erro algum.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hinom obrigado pela atenção.

 

Quando eu configuro o .htaccess do modo que você demonstra, eu não consigo acessar o php, dá um erro 500 (Internal Server Error).

(Configuerei o caminho do error.log certinho)

Compartilhar este post


Link para o post
Compartilhar em outros sites

mostre como está o seu .htaccess

 

quanto ao "500 (Internal Server Error)." provém do apache.. verifique no log do apache o que foi gravado

 

 

depois disso, quando executar o curl, utilize exceptions do php "try catch"..

no manual tem diversos exemplos dos usuários

 

http://php.net/curl

 

obs: o ponto em questão é configurar o ambiente para gravar os erros, para eu você possa identifcar e corrigir os problemas.

é importante configurar os logs de erros pois servirá também para outras situações.

Compartilhar este post


Link para o post
Compartilhar em outros sites

hinom, não utilizei aina o "try catch" pq nem mechi no php ainda, estou brigando para gerar os erros.

 

Qunato ao .htaccess está identico ao que você citou no outro post, exceto pelo caminho do error.log.

 

O log do apache, resumindo me diz isso:

[Wed Oct 19 12:22:10 2011] [error] [client 187.6.167.59] File does not exist: /home/infoauto/public_html/500.shtml

[Wed Oct 19 12:22:10 2011] [alert] [client 187.6.167.59] /home/infoauto/public_html/sp/.htaccess: Invalid command 'php_value', perhaps misspelled or defined by a module not included in the server configuration

 

Obrigado pela ajuda.

Compartilhar este post


Link para o post
Compartilhar em outros sites

possivelmente o seu host não permite ou possui algum configuração específica, certifique-se com o seu provedor de hospedagem.

mas, tente trocar php_value para php_admin_flag ou php_admin_value ou php_flag

 

ou ainda, verifique com o provedor como ou se é possível ver os logs do php da sua conta.

Compartilhar este post


Link para o post
Compartilhar em outros sites

Verifiquei com o servidor, eles me responderam o seguinte:

"Nosso servidor não aceita modificações de parâmetros do PHP via .htaccess. Você deve fazer isso através de um arquivo php.ini.

Basta criar o arquivo, inserir as modificações e enviá-lo para a mesma pasta onde estão os arquivos PHP que precisam destes novos ajustes."

 

As 'modificações' são as mesmas do .htaccess?

 

Obrigado.

Compartilhar este post


Link para o post
Compartilhar em outros sites

O QUÊ? Que raio de servidor é esse que vai ler tudo quanto é PHP.INI de tudo quanto é usuário?

 

Imagina, eu preciso da X e você não. Mas você precisa da Y e eu não. Você envia seu PHP.INI habilitando uma e eu habilitando outra e nenhum dos dois consegue o quer.

 

Por acaso o seu servidor não é dedicado não? Porque se for compartilhado é no mínimo estranho essa resposta.

Compartilhar este post


Link para o post
Compartilhar em outros sites
ue funciona local e não funciona remoto

bom.. nada de mais.. isso se deve ao fato de que no ambiente local (ambiente de desenvolvimento) possui uma configuração diferente do ambiente de produção (remoto, servidor online...)

por isso, todo software antes de começar a ser desenvolvido deve ter planejamento onde inclui os requisitos do mesmo..

 

 

quanto a restrição do host de hospedagem, não tem nada de mais também.

a resposta deles também nã vi nada de mais.. cada empresa tem suas políticas para uso de seus serviços. você concorda com a aceitação das políticas de uso dos serviços no momento em que concordou com o contrato e fez o pagamento.

 

basta seguir as instruções que enviaram. ao invés de tentar configurar o php em tempo de execução via .htaccess, faça em arquivos .ini

 

na mesma pasta onde está executando o script crie um arquivo php.ini com os mesmos parâmetros contidos no .htaccess, vide post #11

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

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