原因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「直す力」養成ドリル

スポンサーリンク

こちらもどうぞ

こちらも参考にしてください

関連記事

MySQL

phpMyAdmin

PHPサンプルコード

PHP全般

WordPress

エラーメッセージ

PHPの基礎が身に付いたかチェック!

PHP「直す力」養成ドリル
スポンサーリンク