php is_dir对于不存在的文件夹返回true
时间:2020-03-05 18:50:17 来源:igfitidea点击:
有人遇到过这种奇怪吗?
我正在检查其中一个单元测试中是否存在许多目录。尽管该文件夹在调用时不存在,但is_dir报告为true(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版本5.2.4-2ubuntu5.3的Ubuntu Linux 8.04的计算机
我检查过的事情:
- Paths are full paths - 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的奇怪问题,但不是这个特殊的问题。
我并不是将其发布为"请帮助我解决",但希望遇到相同问题的人可以在这里搜索,并希望其他看到此问题的人给出答案!
解决方案
回答
对于它的价值,可以使用is_reading来解决。
回答
我认为这不会引起问题,但是$ path确实有斜杠,对吗?
回答
$path = trim($base . '/' . $uf);
那可能是造成它的原因。我假设$ base是我们正在搜索的某种根文件夹,因此,如果$ uf是类似于'',``。''或者'../'的东西,则可能返回true。我们必须查看我们在foreach中使用的值才能进一步了解任何内容。
[编辑]
多做一些上面的代码可以在带有PHP 5.2的OpenBSD 4.3上正常工作。