5

cURLヒットからの情報をログファイルに記録しようとしていますが、記録できません。Windowsをwampで実行し、マシン内のすべてのユーザーに完全な制御を与えました。cURLを呼び出すログとphpファイルは次のとおりです。このテストの同じディレクトリ。私は以下のコードを使用しました:

$session = curl_init();
$logfh = fopen("my_log.log", 'a+');
if ($logfh) {
  print "Opened the log file without errors";
}
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
// Optional settings for debugging
curl_setopt($session, CURLOPT_VERBOSE, true);
curl_setopt($session, CURLOPT_FILE, $logfh); // logs curl messages
// curl_setopt($session, CURLOPT_STDERR, $logfh); // logs curl messages
curl_exec($session);
curl_close($session);

ログファイルはエラーなしで開き、cURLは成功を返しますが、ファイルには何も記録されCURLOPT_FILEませCURLOPT_STDERRん。これをデバッグするための提案をいただければ幸いです。

4

3 に答える 3

5

注:カールしようとしているURLが別のURLにリダイレクトされる場合、ファイルへの出力の書き込みは失敗します。

次の行も必ず追加してください-

curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE);

fclose()また、補足として、ファイルが完全であることを確認するために、でファイルを閉じるようにしてください。

于 2012-06-22T18:50:36.077 に答える
4

を追加fclose()し、上記のコメントにリストされているさまざまな「小さな修正」を行ったが、それでも機能しない場合は、競合するオプションが表示されていると思われます。

  • CURLOPT_RETURNTRANSFER呼び出しの戻り値として応答を返すようにcurlに指示しcurl_exec()ます。

  • CURLOPT_FILEそしてCURLOPT_STDERRcurlに、指定されたファイルハンドルに応答(またはエラー出力)を書き込むように指示します。

これらは相互に排他的であるように思われます。どちらか一方を使用することをお勧めしますが、両方を使用することはできません。

CURLOPT_RETURNTRANSFER次のように、を使用します。

$session = curl_init();
$logfh = fopen("my_log.log", 'a+');
if ($logfh !== false) {
  print "Opened the log file without errors";
}
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_RETURNTRANSFER, true);
curl_setopt($session, CURLOPT_VERBOSE, true);
$result = curl_exec($session);
curl_close($session);
fwrite($logfh, $result);
fclose($logfh);

またはCURLOPT_FILE、次のように使用します。

$session = curl_init();
$logfh = fopen("my_log.log", 'a+');
if ($logfh !== false) {
  print "Opened the log file without errors";
}
curl_setopt($session, CURLOPT_HEADER, false);
curl_setopt($session, CURLOPT_FILE, $logfh);
curl_setopt($session, CURLOPT_VERBOSE, true);
curl_exec($session);
curl_close($session);
fclose($logfh);
于 2012-06-22T20:39:23.693 に答える
0

CURLINFO_HEADER_OUT=trueを使用しているときにも問題が発生する可能性があります。CURLINFO_VERBOSEこのオプションを使用して、VERBOSE情報を抑制するものがあると思います...

curl_setopt($ch, CURLINFO_HEADER_OUT, false);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, fopen('log.log', 'a+'));

言うまでもなく、次を使用できます。

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_VERBOSE, true);
curl_setopt($ch, CURLOPT_STDERR, fopen('log.log', 'a+'));

出力をファイルに記録し、それでもを返すことができるようにしたい場合curl_exec

于 2013-08-12T16:30:07.010 に答える