php unlink.返回no错误信息并且不删除我的文件

2hh7jdfx  于 2023-02-28  发布在  PHP
关注(0)|答案(8)|浏览(189)

我只是尝试使用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 *,并且没有打开其他文件处理程序。

zengzsys

zengzsys1#

您使用的代码非常繁琐,只需调用unlink即可:

unlink( $log_file );

但是让我们来看看哪里出了问题。文件存在,因为你进入了循环,在那里打印语句完成。unlink调用可能返回false,因为输出是“11”而不是“111”。
所以我的直觉告诉我,这一定是文件权限的问题。你确定这个网络用户有权限删除这个文件吗?你能告诉我们文件夹的权限吗,比如在命令行上运行ls -la并粘贴输出吗?

2mbi3lxu

2mbi3lxu2#

unlink返回truefalse。如果试图打印falseprint $deleted;),则将打印一个空字符串。
试试这个:

print $deleted ? "The file was deleted" : "The file was not deleted";
t8e9dugd

t8e9dugd3#

我认为您需要检查**$log_path**是否为文件。用途:

if( is_file( $log_path ) AND is_readable( $log_path ) )

此外,在脚本开始添加下一行以显示所有错误和警告:

ini_set( 'error_reporting', E_ALL );
u1ehiz5o

u1ehiz5o4#

不是说你的文件必须是0777,而是你的目录必须可以被访问,你的目录的mod是什么?
下一个:print $deleted;显然打印错误,显示为空。echo $deleted ? 1 : 0;

uqjltbpv

uqjltbpv5#

我真的不知道问题,但你应该检查,如果文件是可写的,而不是如果它是可读的:

<?php
$log_file = "/tmp/test.log";
$log_path = realpath($log_file);
echo "Testing: ". $log_path."\n";
if (is_writable($log_path)) {
    echo "exists?  ";
    echo (file_exists($log_path))?"yes\n":"no\n";
    $deleted = unlink($log_path);
    echo "deleted? ";
    echo ($deleted)?"yes\n":"no\n";
    echo "exists?  ";
    echo (file_exists($log_path))?"yes\n":"no\n";
} else {
    echo "file unwritable\n";
}

这段代码对我来说很好用(是的,它也很混乱;))。

vom3gejh

vom3gejh6#

file_exists缓存操作的结果,则应在第二次调用之前调用clearstatcache()

kjthegm6

kjthegm67#

对我来说这是承诺问题解决它

chown    -R www-data:www-data      /var/www/
  chmod    -R g+rwx                  /var/www/
  chmod    -R 0755                  /var/www/

确保php在www.conf中的用户www-data下运行例如我使用的是PHP 7.2 nano /etc/php/7.2/fpm/pool.d/www.conf更改这些值:-

listen.owner = www-data
listen.group = www-data
cngwdvgl

cngwdvgl8#

在我的例子中,unlink函数每次都返回false。首先,感谢Viktor:
此外,在脚本开头添加下一行以显示所有错误和警告:ini_set('错误报告',E_ALL);
它帮助我看到了警告:
unlink():http不允许在PHP中取消链接。
我终于找到了解决方案,这里描述了https://a1websitepro.com/warning-unlink-http-not-allow-unlinking-php/
这种情况是,i用户http路径的文件,但unlink功能需要绝对路径的文件从您的服务器。

相关问题