PHP将字符串与存储在变量中的字符串进

时间:2013-08-02 11:49:56

标签: php string

这很疯狂,希望有人可以解释。

$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,我也试过===)

任何?

2 个答案:

答案 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()

返回的值

来自http://www.php.net/

GETCWD

  

成功时返回当前工作目录,失败时返回FALSE。

     

在某些Unix变种上,如果任何一个变量,getcwd()将返回FALSE   父目录甚至没有可读或搜索模式集   如果当前目录。有关更多信息,请参阅chmod()   模式和权限。

http://www.php.net/manual/en/function.getcwd.php