質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

ただいまの
回答率

90.48%

  • PHP

    20834questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Brackets

    62questions

    Bracketsは、オープンソースで開発されているHTML/CSS/JavaScriptのコードエディターです。

phpのfile_get_contentsでwarningとなる

受付中

回答 5

投稿 編集

  • 評価
  • クリップ 1
  • VIEW 2,929

lyca_k

score 3

Googleで調べ、php.iniの確認や同じことをしようとしているサイトのサンプルコードを使ってみたのですが、未だエラーとなるのでココで質問させて下さい。

■やりたいこと
phpのfile_get_contentsで自社の別サービスのWEBページのhtmlの中から特定のタグだけを取り出す処理を作ろうとしております。

■実行環境
・XAMPP上にApacheを載せてlocalhostで動かしています
・phpのバージョンは5.6.15です

■ソースコード

<?php
  $url='http://hoge.co.jp/hoge.html';
  $html=file_get_contents($url);
  $html=mb_convert_encoding($html,'utf8','auto');
  echo $html;
?>

なぜ警告となって結果が何も表示されないのか、ご存知の方ご教示下さい。

不足情報ございましたらご指摘下さい。
よろしくお願いいたします。

■追記
失礼しました。Warningメッセージ書き忘れておりました。
出力されているメッセージは以下の1行です。

Warning: file_get_contents(http://hoge.co.jp/hoge.html): in C:xxx\webdata\test.php on line xx

  • 気になる質問をクリップする

    クリップした質問は、後からいつでもマイページで確認できます。

    またクリップした質問に回答があった際、通知やメールを受け取ることができます。

    クリップを取り消します

  • 良い質問の評価を上げる

    以下のような質問は評価を上げましょう

    • 質問内容が明確
    • 自分も答えを知りたい
    • 質問者以外のユーザにも役立つ

    評価が高い質問は、TOPページの「注目」タブのフィードに表示されやすくなります。

    質問の評価を上げたことを取り消します

  • 評価を下げられる数の上限に達しました

    評価を下げることができません

    • 1日5回まで評価を下げられます
    • 1日に1ユーザに対して2回まで評価を下げられます

    質問の評価を下げる

    teratailでは下記のような質問を「具体的に困っていることがない質問」、「サイトポリシーに違反する質問」と定義し、推奨していません。

    • プログラミングに関係のない質問
    • やってほしいことだけを記載した丸投げの質問
    • 問題・課題が含まれていない質問
    • 意図的に内容が抹消された質問
    • 広告と受け取られるような投稿

    評価が下がると、TOPページの「アクティブ」「注目」タブのフィードに表示されにくくなります。

    質問の評価を下げたことを取り消します

    この機能は開放されていません

    評価を下げる条件を満たしてません

    評価を下げる理由を選択してください

    詳細な説明はこちら

    上記に当てはまらず、質問内容が明確になっていない質問には「情報の追加・修正依頼」機能からコメントをしてください。

    質問の評価を下げる機能の利用条件

    この機能を利用するためには、以下の事項を行う必要があります。

質問への追記・修正、ベストアンサー選択の依頼

  • amaranthine

    2016/03/23 15:50

    なんというエラー(警告?)なのでしょうか。

    キャンセル

  • rkojima

    2016/03/23 15:53

    warningは何が出ているのでしょうか? エラーログの内容も併せてあれば問題解決しやすくなります。 よろしくお願いします。

    キャンセル

回答 5

+2

エラーメッセージに具体的内容が表示されないのは珍しいですね.PHPのバージョンが極端に古い…かと思いきや5.6系でそんなことも無さそうです.とりあえずlibcurlを使用する関数に切り替えてみるのがいい選択肢だと思います.基本的にこちらのほうがパフォーマンスもいいし,エラー原因もはっきりわかるしPHPのWarningなどは発生させないのでエラーを抑制しなくていいというメリットもあります.

<?php

header('Content-Type: text/plain; charset=UTF-8');
echo "HTMLをUTF-8テキストとして出力します\n\n";

$ch = curl_init();
curl_setopt_array($ch, [
    CURLOPT_URL => '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');
}

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

警告内容がありませんね。。。原因はいくつか考えられます。下記ページなどご参照下さい。

また、php.iniにて、allow_url_fopen = Onにしたかどうか、した後再起動したかどうかもご確認ください。

追記
解決しないとのことで、思いつくモノをいくつか。

投稿

編集

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

  • 2016/03/23 16:10

    回答ありがとうございます。
    同じページを元に原因切り分けを進めていましたがどれもクリアしていました。
    ・httpアクセスで該当ページを参照した際に問題なく表示され
    ・日本語のファイルパスは存在していません
    また、allow_url_fopenを再度確認しOnになっていることを確認後、apacheの再起動を試みましたが、状況は変わらずでした。

    キャンセル

  • 2016/03/23 16:22

    追記しましたが、はっきりとはしないですね。。。

    キャンセル

0

以下を確認してみてください。

  • test.phpがutf-8でファイル名が日本語ではないか?
        - エンコードしましょう
  • ファイル自体がその場所に存在するか?
        - 存在しないと警告出ます

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

まずは、アクセスすべきリソースがきちんと存在しているか確認しましょう。あと、PHPを実行するサーバから外部へHTTPアクセスを飛ばせる状態なのかも、要確認です。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

0

とりあえず、問題の切り分けのため以下を順番に検証してみてください。

  1. ローカル(自分自身)のWebサーバ上のテストページは取得できるか。
  2. (1.)がセーフの場合→http://google.com は取得できるか
  3. 実際に取得するページがステータスコードをちゃんと2XXを返すか。 
      file_get_contentsは4xx, 5xxのステータスコードだとWarnningを発生させるようです。→ https://havelog.ayumusato.com/develop/php/e188-php_file_get_contents_tips.html

外部へのアクセスが出来ずに、(2.)で失敗しそうな気がします。

投稿

  • 回答の評価を上げる

    以下のような回答は評価を上げましょう

    • 正しい回答
    • わかりやすい回答
    • ためになる回答

    評価が高い回答ほどページの上位に表示されます。

  • 回答の評価を下げる

    下記のような回答は推奨されていません。

    • 間違っている回答
    • 質問の回答になっていない投稿
    • スパムや攻撃的な表現を用いた投稿

    評価を下げる際はその理由を明確に伝え、適切な回答に修正してもらいましょう。

15分調べてもわからないことは、teratailで質問しよう!

  • ただいまの回答率 90.48%
  • 質問をまとめることで、思考を整理して素早く解決
  • テンプレート機能で、簡単に質問をまとめられる

関連した質問

同じタグがついた質問を見る

  • PHP

    20834questions

    PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

  • Brackets

    62questions

    Bracketsは、オープンソースで開発されているHTML/CSS/JavaScriptのコードエディターです。