質問: Googleで調べ、php.iniの確認や同じことをしようとしているサイトのサンプルコードを使ってみたのですが、未だエラーとなるのでココで質問させて下さい。 ■やりたいこと phpのfile_get_contentsで自社の別サービスのWEBページのhtmlの中から特定のタグだけを取り出す処理を作ろうとしております。 ■実行環境 ・XAMPP上にApacheを載せてlocalhostで動かしています ・phpのバージョンは5.6.15です ■ソースコード ``` ``` なぜ警告となって結果が何も表示されないのか、ご存知の方ご教示下さい。 不足情報ございましたらご指摘下さい。 よろしくお願いいたします。 ■追記 失礼しました。Warningメッセージ書き忘れておりました。 出力されているメッセージは以下の1行です。 Warning: file_get_contents(http://hoge.co.jp/hoge.html): in C:xxx\webdata\test.php on line xx
回答: エラーメッセージに具体的内容が表示されないのは珍しいですね.PHPのバージョンが極端に古い...かと思いきや5.6系でそんなことも無さそうです.とりあえずlibcurlを使用する関数に切り替えてみるのがいい選択肢だと思います.基本的にこちらのほうがパフォーマンスもいいし,**エラー原因もはっきりわかるし**,**PHPのWarningなどは発生させないのでエラーを抑制しなくていい**というメリットもあります. ``` 'http://example.com/', // URLを指定 (必須) CURLOPT_RETURNTRANSFER => true, // 標準出力する代わりに文字列を返すようにする (必須) CURLOPT_ENCODING => 'gzip', // 通信を圧縮して効率化 (任意だが基本的につけるべき) // CURLOPT_USERAGENT => 'Mozilla/5.0', // User-Agentの明示 (無いと拒否される場合は必須) // CURLOPT_FAILONERROR => true, // 400以上のステータスコードをエラーとして扱う (任意) // CURLOPT_FOLLOWLOCATION => true, // Locationヘッダを追跡する (任意) ]); $html = curl_exec($ch); if ($html === false) { // エラーだった場合は内容を出力 printf("cURLエラー: %s\n\n", curl_error($ch)); } else { // 取得成功した場合はHTTPステータスコードとコンテンツを表示 printf("HTTPステータスコード: %d\n\n", curl_getinfo($ch, CURLINFO_HTTP_CODE)); // UTF-8に変換する (autoはphp.iniに依存するので極力使うべきでない) echo mb_convert_encoding($html, 'UTF-8', 'ASCII,JIS,UTF-8,CP51932,SJIS-win'); } ```