5

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 はアクセスできず、他のファイルは実行および読み取り可能です。

この問題を解決するには?

4

6 に答える 6

10

親ディレクトリに php ファイルを実行しているユーザーの (実行権限) が設定されていない場合は、falseis_file()を返すことに注意してください。+x

これは理にかなっていますが、 などの他の機能readdir()にはこの制限がないようです。最終結果として、ディレクトリのファイルをループできますが、is_file()常に失敗します。

ここから引用

于 2012-08-29T08:40:57.730 に答える
1

実行中のアクセス許可の問題に悩まされない !is_dir を使用することもできます。

if(!is_dir($filename)) {
  //remove a file
  unlink($filename);
} else {
  //remove a directory
}
于 2018-03-20T11:58:21.213 に答える
0

is_file()ファイルが通常のファイルである場合に返します。

ファイル権限の最初の列が - の場合に ls -l を実行すると、そのファイルは通常のファイルになります。

関数を使用しfile_exists()ます。ファイル/ディレクトリが存在するかどうかを返します。

于 2012-08-29T08:43:33.767 に答える