気軽に読めるPHP入門書・PHPスクリプトが動かないときの原因と対策などを紹介します。

  1. PHP関数
  2. 44 view

file_get_contents関数でWarningエラーになるとき

原因1:存在しないURLを参照したとき

Twitterと連携するPHPスクリプトでfile_get_contents関数を使うことも少なくありませんが、この関数では、指定したURLが存在しない場合はWarning(警告)が表示されます。次の例では、検索したユーザーが存在しないのでWarning(警告)が表示されます。

<?php
$url = "https://api.twitter.com/1/users/show.json?screen_name=nisi9981";
$json = file_get_contents($url);
echo $json;
?>

○実行結果

Warning: file_get_contents(https://api.twitter.com/1/users/show.json?screen_name=nisi9981) [function.file-get-contents]: failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found…略…

Warningを非表示にするだけであれば、file_get_contentsの前に「@」を付加するだけですが、ユーザーの存在の有無に応じて処理を分岐したい場合、次のようなif文で対処することができます。

<?php
$url = "https://api.twitter.com/1/users/show.json?screen_name=nisi9981";

if ($json = @file_get_contents($url)) {
    echo $json;
} else {
    echo "このユーザーは存在しません。";
}
?>

○実行結果

このユーザーは存在しません。

原因2:日本語ファイル名(パス)の文字コードによる処理の失敗

Windowsではファイル名(パス)がSJIS(Shift_JIS)で扱われることがあります。UTF-8で動作させるPHPスクリプトの中に「サンプル.txt」のような日本語を含むファイル名を記述すると、文字コードの問題で処理が失敗することがあります。

<?php
$file_name = "サンプル.txt";
$a = file_get_contents($file_name);
echo $a;
?>

○実行結果

Warning: file_get_contents(サンプル.txt) [function.file-get-contents]: failed to open stream: No such file or directory in C:\…略…\test.php on line 3

この場合、ファイル名の文字コードをShift_JISに変換するとうまく処理できるはずです。

<?php
$file_name = "サンプル.txt";
$file_name = mb_convert_encoding($file_name, "SJIS", "UTF-8");
$a = file_get_contents($file_name);
echo $a;
?>

よくあるPHPのエラーやミスは、こちらの本で紹介しています。参考にしてください。


PHP「直す力」養成ドリル

PHP関数の最近記事

  1. mb_send_mail関数でReturn-Pathを設定する方法

  2. is_numeric関数とis_int関数の違い

  3. PHPのdate関数の使用例

  4. isset関数とempty関数と「!」の違い

  5. 文字列を分割して配列を作成するexplode関数

関連記事

PAGE TOP