設定を機能させるために 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
それが役立つことを願っています。