2013-07-12 19 views
5

file_get_contentsフォームをPHPで使用しようとしましたが、動作しません。空ファイルのあるファイル_get_contentsが機能していませんPHP

あり、私のコードは次のとおりです。

$filename = "/opt/gemel/test.txt"; 


if($filecontent = file_get_contents($filename)){ 

    $nom = fgets(STDIN); 

    file_put_contents($filename, $nom, FILE_APPEND); 
} 
else 
    echo "fail"; 

そして、私のファイルのtest.txtは空です。 (0オクテット)。彼は存在しますが、彼は空です。

私はそこに何かを書くとき、私のコードは完璧に動作しますが、彼は私のコードのエコーを空の場合は

を「失敗した」なぜ、なぜ彼は、ファイルTEXT.TXTを開くことができませんか?

答えて

13

関数file_get_contentsは、ファイル内の文字列を返します。ファイルにデータが含まれていない場合、file_get_contentsは空文字列を返します。もしあなたがvar_dump('' == false);にしようとするなら、trueを得るでしょう。したがって、ファイルを読み取ることはできますが、ファイルの内容はfalseと評価されます。

あなたはこのラインを使用する場合は、あなたのコードは動作するはずです:

if($filecontent = file_get_contents($filename) !== false){ 

編集。 Comparison operatorsのドキュメントへのリンク。

+0

あなたは** file_get_contents **はfalseのような空の文字列を返します。この行** file_get_contents($ filename)!== false **は、file_get_contentsがfalseを返すので、falseであるはずです。ではなぜそれがうまくいっていて、「失敗する」のではないのですか? – mpgn

+1

これは変数のタイプと関係があります。 file_get_contentsはファイルをオープンできない場合は 'false'(真偽値)を返し、空のファイルを開く場合は' '''(文字列)を返します。 3文字比較( '!==')は、変数の型が同じかどうかをチェックします。詳細については、私の答えのドキュメントへのリンクを確認してください。 –

+0

私は「タイプ」と「等しい」との間のニュアンスを把握していませんでした。あなたの説明をありがとう。 – mpgn