我只是尝试使用PHP的unlink删除一个文件。我在这里找到了一个答案,告诉我最好的方法来做到这一点,我实现了它。这是我正在使用的代码。
$log_path = realpath($log_file);
if (is_readable($log_path)){
print file_exists($log_path);
$deleted = unlink($log_path);
print "Deleted:".$deleted;
print "Exists:".file_exists($log_path);
}
这只是打印1Deleted:exists:1
。我还尝试在unlink下添加print_r(error_get_last());
,但这也没有返回任何内容。目录中的所有文件都是chmod 777 *
,并且没有打开其他文件处理程序。
8条答案
按热度按时间zengzsys1#
您使用的代码非常繁琐,只需调用unlink即可:
但是让我们来看看哪里出了问题。文件存在,因为你进入了循环,在那里打印语句完成。
unlink
调用可能返回false,因为输出是“11”而不是“111”。所以我的直觉告诉我,这一定是文件权限的问题。你确定这个网络用户有权限删除这个文件吗?你能告诉我们文件夹的权限吗,比如在命令行上运行
ls -la
并粘贴输出吗?2mbi3lxu2#
unlink返回
true
或false
。如果试图打印false
(print $deleted;
),则将打印一个空字符串。试试这个:
t8e9dugd3#
我认为您需要检查**$log_path**是否为文件。用途:
此外,在脚本开始添加下一行以显示所有错误和警告:
u1ehiz5o4#
不是说你的文件必须是0777,而是你的目录必须可以被访问,你的目录的mod是什么?
下一个:
print $deleted;
显然打印错误,显示为空。echo $deleted ? 1 : 0;
uqjltbpv5#
我真的不知道问题,但你应该检查,如果文件是可写的,而不是如果它是可读的:
这段代码对我来说很好用(是的,它也很混乱;))。
vom3gejh6#
file_exists
缓存操作的结果,则应在第二次调用之前调用clearstatcache()kjthegm67#
对我来说这是承诺问题解决它
确保php在
www.conf
中的用户www-data
下运行例如我使用的是PHP 7.2nano /etc/php/7.2/fpm/pool.d/www.conf
更改这些值:-cngwdvgl8#
在我的例子中,unlink函数每次都返回false。首先,感谢Viktor:
此外,在脚本开头添加下一行以显示所有错误和警告:ini_set('错误报告',E_ALL);
它帮助我看到了警告:
unlink():http不允许在PHP中取消链接。
我终于找到了解决方案,这里描述了https://a1websitepro.com/warning-unlink-http-not-allow-unlinking-php/。
这种情况是,i用户http路径的文件,但unlink功能需要绝对路径的文件从您的服务器。