Php is_dir表示dir不存在,但它存在
我不确定这里出了什么问题。由于某种原因,_dir函数对我来说不能正常工作Php is_dir表示dir不存在,但它存在,php,filesystems,Php,Filesystems,我不确定这里出了什么问题。由于某种原因,_dir函数对我来说不能正常工作 class A { private $path public function setPath($path) { if(!is_dir(!$path)){ throw new Exception('Invalid path'); } } } $obj = new A; $obj->setPath('/usr/htdocs/site/'); 在这行代码之后,抛出异常
class A
{
private $path
public function setPath($path)
{
if(!is_dir(!$path)){
throw new Exception('Invalid path');
}
}
}
$obj = new A;
$obj->setPath('/usr/htdocs/site/');
在这行代码之后,抛出异常无效路径。我检查了,并且/usr/htdocs/site/path存在。可能是什么问题?删除
代码>路径变量之前
试着这样做:
if(!is_dir($path)){
throw new Exception('Invalid path');
}
!$路径意味着如果有任何东西在里面$路径,它将是错误的。就是这样!is_dir(false)
我认为您的代码将是if(!is_dir(!$path)){…而不是if(!is_dir(!$path)){
小更新:
正如@NiettheDarkAbsol所说,is_dir将字符串(目录名)作为参数,因此false[来自!$path($path应该是“/usr/htdocs/site/”,在本例中,所以!$path应该是bool false)]将转换为字符串“”(空)
在大多数常用的文件系统中,“”是无效的目录名。因此,is_目录将找不到使用该无效名称的任何目录。因此,它将返回false,从而触发异常引发以报告路径无效
感谢@NiettheDarkAbsol告诉我剩下的事情。!$path
-Wut?删除该!
。删除$path前面的“!”。在private$path
的末尾放一个分号,否则它将抛出解析错误:语法错误,意外的“public”(T\u public),在…
中应为“,”或“;”,并删除前面所述的!
。不要停在那里。什么是!is_dir(false)
做的?它将false
转换为字符串,因为它需要所述字符串。所以它正在做!is_dir(“”)
…如果你有一个不知何故没有名字的目录会发生什么?@NiettheDarkAbsol抱歉,我的经验很低。我不知道当目录名为空时会发生什么。我认为这与文件系统有关,比如文件系统如何在文件表中定位/查找文件。好消息是,文件和文件夹名可以永远不要空着。除非你在某种异国情调的定制操作系统上,出于某种原因允许它。