Php fclose警告:fclose():提供的参数不是有效的流资源

Php fclose警告:fclose():提供的参数不是有效的流资源,php,fopen,fwrite,fclose,Php,Fopen,Fwrite,Fclose,我在我的网页上得到了警告 警告: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');

我在我的网页上得到了警告

警告: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...';
第29行

fclose($fp1);

唯一能立即想到的可能是
fopen
由于某种原因失败,将
$fp
设置为
FALSE

例如,如果不允许您创建或覆盖
data.txt
文件(权限等),可能会发生这种情况

从PHP的
fopen
fclose
文档中(稍作解释):

fopen()调用成功时返回文件指针资源,错误时返回FALSE

fclose()的文件指针必须有效,并且必须指向由fopen()或fsockopen()成功打开的文件

(我的斜体)。在尝试使用文件句柄之前,您确实应该检查
fopen
中的返回值,以确保它工作正常


根据更新的代码,您应该检查其中一个请求变量(go1或go2)是否已实际设置。如果两者都不是,则不会打开该文件,但仍将尝试关闭它


而且,尽管您说它写入了文件,但您可能希望在开始运行之前删除它来确认这一点。您可能只是看到了上一个文件。

您的问题在于“if-else”语句(文件未打开)。。。检查代码

当if()条件返回false时,没有打开$fp文件,因此没有要关闭的内容。PHP不明白您要关闭的文件是什么,因为没有打开任何文件。

您检查了文件是否正确打开了吗?@Burhan是的,文件正在打开并写入sameIs脚本中还有其他内容吗?如果有,试着用这些线来模拟相同的东西。此外,请确保“data.txt”实际上是写入的,而不仅仅是以前实验中的一些旧文件:)@Vatev我已经更新了代码,请注意,但是文件正在打开并写入相同的内容。您仍然应该检查
fopen
(顺便说一下,
fwrite
)中的返回代码,以防万一。权限是失败的原因之一,可能还有其他原因。否则,请确认您发布的代码与您所拥有的代码完全一致(包括没有干预的内容)。我询问的原因是,您的代码基本上是按照的标准示例,因此它不可能按原样工作。@user1561466:有一个代码路径,您不打开文件,但试图关闭它-请参阅更新。我已检查了编写的文件,并确认文件正在打开,并且希望代码已写入其中
fclose($fp1);