1

PHPでcurlを使って何かをしようとしています。

デバッグに役立つ CURLOPT_VERBOSE の使用について読みました。しかし、それは出力を与えません。私はphpinfo()をチェックし、cURLの下に立っています:

debug => no

ここが問題だと思います。これをはいに設定するにはどうすればよいですか? php.ini を調べたところ、見つかりました。

グーグルでも運が悪い。ここでも運が悪い:php-curlの機能を有効にする方法

誰かが私を助けてくれることを願っています!

4

1 に答える 1

0

設定を機能させるために cURL のデバッグ ビルドは必要ありませんCURLOPT_VERBOSEが、デフォルトではCURLOPT_VERBOSE情報が出力さSTDERRれ、コンソールにのみ表示されます。そのため、ブラウザーから PHP を実行している場合、詳細な出力はどこにも送信されません。

オプションCURLOPT_STDERRをファイルハンドルに設定すると、詳細出力がそこに書き込まれます。

これを行うことができるはずです:

$stdout = fopen('php://output', 'w+');

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com');
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_STDERR, $stdout);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$data = curl_exec($ch);

ブラウザに詳細な出力が表示されないため、現時点で PHP バグ (FastCGI 経由で PHP 5.4.5 を実行) に遭遇しているかどうかはわかりませんが、コマンド ラインから実行すると表示されます。ブラウザにその出力fwrite表示される場合でも、cURL からは何も表示されないため、ハンドルが有効であることがわかります。$stdout

同じ問題が発生した場合は、次の回避策があります。

$tempout = fopen('php://temp', 'w+');

$ch = curl_init(); 
curl_setopt($ch, CURLOPT_URL, 'http://www.example.com');
curl_setopt($ch, CURLOPT_VERBOSE, 1);
curl_setopt($ch, CURLOPT_STDERR, $tempout);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);

$data = curl_exec($ch);

rewind($tempout);
$debug = stream_get_contents($tempout);

echo $debug; // the data from CURLOPT_VERBOSE

それが役立つことを願っています。

于 2012-08-17T21:44:12.537 に答える