1

这很疯狂,希望有人能解释一下。

$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");
}

没有。(不起作用我的意思是它返回错误,我也试过 === )

任何人?

4

2 回答 2

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作为常量放在文件中并包含该文件。这会将这些值存储在一个地方。

于 2013-08-02T13:45:16.157 回答
3

验证返回的值getcwd()

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

获取cwd

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

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

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

于 2013-08-02T12:53:03.437 回答