2009-04-14 88 views
24

我知道,我知道,这听起来soo容易。但我似乎无法在互联网上找到正确的答案。检查一个目录是否存在于PHP

我发现的解决方案之一是使用is_dir

if(is_dir($dir)) 
    echo 'directory exists'; 
else 
    echo 'drectory not exist'; 

但这是错误 - 所有这个函数的作用是检查$dir是否是一个目录,它不检查目录是否存在,还是不行。换句话说,如果我把:

$rootDir = "C:\\Documents and Settings\\test\\My Documents\\Image Directory\\Me Dog\\"; 

,则函数会返回一个真实的,即使你可以找到你的Web服务器上没有这样的目录。

任何想法?

+0

这是PHP 5.2报告的bug,虽然我再也找不到链接错误报告。 – 2009-04-14 07:55:00

回答

53

应该正常工作。从is_dir()文件:如果文件存在和 是一个目录,FALSE 否则

返回TRUE。

好了,反正如果不试试这个:

if(file_exists($dir) && is_dir($dir)) 

BTW。这些函数的结果被缓存在stat缓存中。使用clearstatcache()清理该缓存。

+5

对于clearstatcache信息+1,总是知道 – 2012-08-09 08:04:38

2

在is_dir()同意路径(可能)是目录之后,您可能会想要使用opendir()

如果opendir()返回的资源是有效的,那么你知道你有一个目录,并且已经有了一个读取它的句柄。

只要返回有效的句柄,一定要调用closedir(),无论哪种方式。

编辑:

此答案假定您将以任何方式打开目录。如果你只需要确保路径是有效的,file_exists()便宜得多。

0

你可以试试这个:

if(is_dir($dir) && is_writeable($dir)) 
{ 
    // ... 
} 
+6

不是解决问题的办法,因为不可写目录也是目录。 – stefs 2009-04-14 07:53:03

相关问题