2011-09-16 17 views
1

外部サーバーから画像をダウンロードする際にcURLを使用しようとしています。このコードは、私の地元のWindows XAMPPのインストールで動作します:cURLが異なるサーバーで異なる動作をする

$ch = curl_init("http://some.server.com/some-image.jpg"); 
$fp = fopen("testimage.jpg", 'wb'); 
curl_setopt($ch, CURLOPT_FILE, $fp); 
curl_setopt($ch, CURLOPT_HEADER, 0); 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, true); 
curl_exec($ch); 
curl_close($ch); 
fclose($fp); 

をしかし、私はそれとまったく同じコードを取り、私の本番サーバー上でそれを実行すると、イメージが正常にダウンロードされません。 testimage.jpgは作成されますが、ファイルサイズは0です。 curl_errnoを呼び出すと0が返されます。cURLの動作に影響を与えるシステム設定はありますか?

私が使用しているURLは、リダイレクトが発生する原因となります。ブラウザにURLを入力すると、画像が表示されるときに別のURLがアドレスバーに表示されます。しかし、私はCURLOPT_FOLLOWLOCATIONがリダイレクトに従うために必要なすべてであるという印象を受けていました。特に、これをローカルで行う必要があるためです。何か不足していますか?

答えて

1

まずあなたが明示的に以下を追加することにより、表示エラーとはerror_reportingをenvokeことを確認してください。

ini_set('display_errors', 'on'); 
error_reporting(E_ALL); 

また、要求が成功して送ることができることを確実にするために、ファイアウォールの設定を確認してください。

+0

これを設定すると、「警告:curl_setopt():safe_modeが有効になっているかopen_basedirが設定されているとCURLOPT_FOLLOWLOCATIONをアクティブにできません」という警告が表示されました。それはかなり自明で、私はここからそれを取ることができるはずです。ありがとう! –

1

カールの設定がありますが、私はこのような状況では、これは非常に有用見つけた

curl_setopt($ch, CURLOPT_VERBOSE, true); 

、冗長と呼ばれます。 curlが行うすべてのHTTPコードが表示されます。これを設定して、どんなエラーが発生したのかをお知らせください。

幸運。

関連する問題