原因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のエラーやミスは、こちらの本で紹介しています。参考にしてください。