php is_file总是返回false


php is_file always return false

php is_file总是返回false

[apache@h185 default]$ ls -l /home/www/default/p.php
-rwxr-xr-x. 1 zhouhh zhouhh 50837 Aug 28 19:02 /home/www/default/p.php
[apache@h185 default]$ ls -l /usr/bin/rrdtool
-rwxr-xr-x. 1 root root 24688 Aug 21  2010 /usr/bin/rrdtool
[apache@h185 default]$ ls -l /root/my.cnf
ls: cannot access /root/my.cnf: Permission denied
[apache@h185 default]$ ls -l /usr/bin/ld
-rwxr-xr-x. 1 root root 594968 Jun 22 22:06 /usr/bin/ld
[apache@h185 default]$ ls -l /usr/bin/php
-rwxr-xr-x. 1 root root 3224944 Jul  4 00:57 /usr/bin/php
[apache@h185 default]$ vi test.php
[apache@h185 default]$ cat test.php
<?php
#if(is_file('/home/www/default/p.php'))
#if(is_file('/usr/bin/rrdtool'))
#if(is_file('/root/my.cnf'))
#if(is_file('/usr/bin/ld'))
#if(file_exists('/usr/bin/ld'))
if(is_file('/usr/bin/php'))
{
print 'ok';
}
else
{
print 'no ok';
}
?>
[apache@h185 default]$

除了第一行返回true,其他行总是返回false。但是这个文件都存在。/root/my.cnf无法访问,其他文件可以执行和读取。

如何解决这个问题?

注意,如果父目录没有为运行php文件的用户设置+x(运行权限),is_file()将返回false

这是有道理的,但readdir()等其他函数似乎没有这个限制。最终的结果是,您可以循环浏览目录的文件,但is_file()总是会失败。

引用自此处

请注意,www数据或web服务器用户必须拥有访问目录的权限,而文件是,请以web服务器用户的身份登录(在linux中为su www数据),并检查您是否可以通过用于访问文件的所有路径进行访问。

您也可以使用!is_dir不存在运行权限问题。

if(!is_dir($filename)) {
  //remove a file
  unlink($filename);
} else {
  //remove a directory
}

is_file()返回文件是否为常规文件

如果文件权限的第一列是-,则该文件是常规文件。

所以使用CCD_ 6函数。如果存在文件/目录,则返回。

我也遇到了同样的问题。问题是文件路径不正确。

始终确保例如is_file($dir.$file)指向正确的位置。

输出您最近的位置:var_dump($dir.$file);

如果设置了正确的文件路径(必须为true),则输出:var_dump(is_file($dir.$file));

一般情况下,请根据前面的答案检查文件权限。

在Docker构建环境中,由于主机:容器目录映射而复制的文件可能没有正确复制。如果文件的权限显示为-??????????,请使用docker cp手动复制文件。

我知道这是旧的,但在我的情况下,我从一个文件中获取文件名,并将其拆分或换行。添加trim()以删除文件名末尾的隐藏字符解决了我的问题。显然,添加到文件名中的隐藏符号不会自动解析出来。