我有这样的代码:
$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为资源,给定整数
你能帮我弄清楚如何解决这个问题吗?
答案 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);
}