有没有人遇到这种奇怪的事情?
我正在检查我的一个单元测试中是否存在多个目录。 is_dir
报告为真(1),尽管在调用时文件夹不存在。代码看起来像这样(带有一些无关的中间变量以简化调试):
foreach($userfolders as $uf) {
$uf = sprintf($uf, $user_id);
$uf = ltrim($uf,'/');
$path = trim($base . '/' . $uf);
$res = is_dir($path); //returns false except last time returns 1
$this->assertFalse($res, $path);
}
使用PHP Version 5.2.4-2ubuntu5.3运行Ubuntu Linux 8.04的机器
我检查过的事情:
- Paths are full paths
- The same thing happens on two separate machines (both running Ubuntu)
- I have stepped through line by line in a debugger
- Paths genuinely don't exist at the point where is_dir is called
- While the code is paused on this line, I can actually drop to a shell and run
交互式PHP解释器并获得正确的结果 - 这些路径都在256个字符下都很好 - 由于文件夹不存在,我无法想象权限问题!父文件夹不能导致权限问题,因为循环中的其他文件夹被正确报告为丢失。
关于PHP文档的评论指出了is_dir
的奇怪问题,但没有指出这个问题。
我不会将此作为“请帮助我修复”发布,但希望有人遇到同样的事情可以在这里搜索,并希望希望来自其他看过这个的人的答案!< / p>
答案 0 :(得分:3)
我不认为这会导致你的问题,但$ path确实有尾随斜线,对吗?
答案 1 :(得分:1)
为了它的价值,is_readable
可以用作解决方法。
答案 2 :(得分:0)
$path = trim($base . '/' . $uf);
这可能会导致它。我假设$ base是你正在搜索的某种根文件夹,所以如果$ uf就像'','。'或'../'那样可以返回true。我们必须看看你在foreach中使用了什么值才能进一步了解。
[编辑]
在使用PHP 5.2的OpenBSD 4.3上进行更多查看以上代码可以正常工作。