php fwrite()期望参数1是资源,给定整数

时间:2015-11-13 02:42:08

标签: php

我有这样的代码:

$filename = "history-login ".date("d M Y").".txt";
$docroot = "public/file/".$filename;
$txt  = "username : ".$admin_session->username."\n";
$txt .= "time : ".date("d M Y , h:i:s")."\n";

if (file_exists($docroot)){
        $myfile = file_put_contents($docroot, $txt.PHP_EOL , FILE_APPEND)  or die("Unable to write!");
}else{
    $myfile = fopen($docroot, "w") or die("Unable to open file!");                      
}

fwrite($myfile, $txt);
fclose($myfile);

我收到了一条警告,警告如下:

  

警告:fwrite()期望参数1为资源,给定整数

     

警告:fclose()期望参数1为资源,给定整数

你能帮我弄清楚如何解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

您的代码跳转到$ docroot存在的情况,因此$ myfile不是文件资源对象。 我想你只需要在file_put_contents之后返回

if (file_exists($docroot)){
        $myfile = file_put_contents($docroot, $txt.PHP_EOL , FILE_APPEND)  or die("Unable to write!");
return;
}else{
    $myfile = fopen($docroot, "w") or die("Unable to open file!");                      
}

答案 1 :(得分:0)

问题在于,当文件存在时,正在执行$myfile = file_put_contents()片段,但正如文档所述 - http://php.net/manual/en/function.file-put-contents.php - file_put_contents()返回int,而不是资源,这是预期的fwrite()fclose()。所以只需将这两个函数放入else分支,就像这个:

if (file_exists($docroot)){
        $myfile = file_put_contents($docroot, $txt.PHP_EOL , FILE_APPEND)  or die("Unable to write!");
}else{
    $myfile = fopen($docroot, "w") or die("Unable to open file!");                      
    fwrite($myfile, $txt);
    fclose($myfile);
}