这很疯狂,希望有人可以解释。
$dir = getcwd();
$a = "/var/www/vhosts/mysite/httpdocs/sub1";
$b = "/var/www/vhosts/mysite/httpdocs/sub2";
if( ($dir == $a) || ($dir == $b) ){
$dirlist = glob("../images2/spinner/*.jpg");
}else{
$dirlist = glob("images2/spinner/*.jpg");
}
工作正常,但
$dir = getcwd();
if( ($dir == "/var/www/vhosts/mysite/httpdocs/sub1") || ($dir == "/var/www/vhosts/mysite/httpdocs/sub2") ){
$dirlist = glob("../images2/spinner/*.jpg");
}else{
$dirlist = glob("images2/spinner/*.jpg");
}
没有。 (通过不起作用我的意思是它返回false,我也试过===)
任何?
答案 0 :(得分:5)
您似乎遇到了if true then this else everything else bug
。你错误地认为$dir
只能是$a
或$b
,而Luc M所说的并非总是如此。
我们昨天刚在程序员交流中谈到这个问题。
https://softwareengineering.stackexchange.com/questions/206816/clarification-of-avoid-if-else-advice
这是处理逻辑的另一种方法。
$base = dirname(__FILE__);
$path = '/images2/spinner';
if(file_exists($base.$path))
{
$path = $base.$path;
}
else if(file_exists($base.'/../'.$path))
{
$path = $base.'/../'.$path;
}
else
{
throw new Exception('Images not found.');
}
$dirlist = glob($path.'/*.jpg');
我不会将主机路径硬编码到您的逻辑中。这将导致更多的错误。尽可能尝试使用当前源文件的相对路径,如果不能。将您的硬编码路径作为常量放在config.php
文件中并包含该文件。这将把这些值存储在一个地方。
答案 1 :(得分:3)
验证getcwd()
成功时返回当前工作目录,失败时返回FALSE。
在某些Unix变种上,如果任何一个变量,getcwd()将返回FALSE 父目录甚至没有可读或搜索模式集 如果当前目录。有关更多信息,请参阅chmod() 模式和权限。