2

ページに警告が表示されます

警告: fclose(): 指定された引数は有効なストリーム リソースではありません

次のコードを使用する

$fp = fopen('data.txt', 'w');
$write = '2';
fwrite($fp, $write);
fclose($fp);  

コードを更新する

if(isset($_REQUEST['go1']))
{
    $fp = fopen('data.txt', 'w');
    $write = '1';
    $fp1 = fopen('file.php', 'w');
    $write1 = '<br><img src="/1/online.png" style="position:absolute; z-index:-2;" />';
}
if(isset($_REQUEST['go2']))
{

    $fp = fopen('data.txt', 'w');
    $write = '2';
    $fp1 = fopen('file.php', 'w');
    $write1 = '<br><img src="/1/offline.png" style="position:absolute; z-index:-2;" />';
}

fwrite($fp, $write);
fclose($fp);
fwrite($fp1, $write1);
fclose($fp1);

$fp = fopen('data.txt', 'r');
$contents = fread($fp, filesize('data.txt'));
fclose($fp);
if($contents == '1')
    include('file.php');
else if($contents == '2')
    include('file.php');
else
    echo 'Something else...';

27行目と29行目でエラーが発生する 27行目

fclose($fp);    

line29

fclose($fp1);
4

3 に答える 3

1

if() 条件が false を返す場合、開かれている $fp ファイルがないため、閉じるものはありません。PHP は、何も開かれていないため、閉じようとしているファイルを認識できません。

于 2016-07-03T18:13:28.677 に答える
1

問題は「if-else」ステートメントにあります(ファイルが開かれていません)...コードを確認してください

于 2012-08-04T12:47:21.030 に答える
0

すぐに思いつく唯一の可能性は、 がfopen何らかの理由で失敗し、$fpsetのままになっていることFALSEです。

これは、たとえば、data.txtファイルの作成または上書きが許可されていない場合 (アクセス許可など) に発生する可能性があります。

PHPのfopenおよびfcloseドキュメントから (少し言い換えてあります):

fopen() 呼び出しは、成功するとファイル ポインター リソースを返し、エラーの場合は FALSE を返します。

fclose() のファイル ポインターは有効である必要があり、fopen() または fsockopen() によって正常に開かれたファイルを指している必要があります。

(私の斜体)。fopenファイル ハンドルを使用する前に、からの戻り値をチェックして、それが機能することを確認する必要があります。


更新したコードに基づいて、これらのリクエスト変数 (go1 または go2) のいずれかが実際に設定されていることを確認する必要があります。どちらでもない場合、ファイルは開かれませんが、それでも閉じようとします。

そして、ファイルに書き込んだと言いましたが、実行を開始する前に削除して確認することをお勧めします。前のファイルが表示されているだけかもしれません。

于 2012-08-04T12:10:46.980 に答える