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

PHP将字符串与存储在变量中的字符串进行比较,php,string,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/*.jp

这太疯狂了,希望有人能解释

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


有人吗?

验证
getcwd()返回的值。

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

在某些Unix变体上,如果 父目录甚至没有设置可读或搜索模式 如果当前目录没有。有关详细信息,请参见chmod() 模式和权限


验证
getcwd()返回的值

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

在某些Unix变体上,如果 父目录甚至没有设置可读或搜索模式 如果当前目录没有。有关详细信息,请参见chmod() 模式和权限


看起来您遇到了
错误,如果为true,则这是其他所有错误
。您错误地假设
$dir
只能是
$a
$b
,正如Luc M所述,情况并非总是如此

我们昨天刚刚在程序员交换上讨论过这个问题

下面是处理逻辑的另一种方法

 $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
文件中,并包含该文件。该文件将把这些值存储在一个位置。

看起来您遇到了
如果为true,则这是其他所有错误
。您错误地假设
$dir
只能是
$a
$b
,正如Luc M所述,情况并非总是如此

我们昨天刚刚在程序员交换上讨论过这个问题

下面是处理逻辑的另一种方法

 $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
文件中,并包含该文件。这样会将这些值存储在一个位置。

这应该是不可能的。我怀疑这是你正在执行的文字代码。所以它很难被认为是一个问题,这意味着很难诊断这里到底发生了什么。更不用说,一定有更好的方法来解决您在这里试图解决的任何问题。@deceze是的,我现在改进了代码以摆脱这个示例,问题不是有更好的方法,是吗?问题的可能原因是:您的cwd与两个位置都不匹配,您的cwd在两次测试运行中不同,您运行的是
glob
的其中一个系统。更好的方法:为
glob
构建一个绝对路径,而不是依赖于当前的工作目录。从
dirname(\uuuu文件\uuuuu)开始是好的。请缩小问题的范围。这是
if
条件还是
glob
<代码>变量转储($a==“/var/www/vhosts/mysite/httpdocs/sub1”);var_dump($dir==“/var/www/vhosts/mysite/httpdocs/sub1”);变量转储($dir==$a)这应该是不可能的。我怀疑这是你正在执行的文字代码。所以它很难被认为是一个问题,这意味着很难诊断这里到底发生了什么。更不用说,一定有更好的方法来解决您在这里试图解决的任何问题。@deceze是的,我现在改进了代码以摆脱这个示例,问题不是有更好的方法,是吗?问题的可能原因是:您的cwd与两个位置都不匹配,您的cwd在两次测试运行中不同,您运行的是
glob
的其中一个系统。更好的方法:为
glob
构建一个绝对路径,而不是依赖于当前的工作目录。从
dirname(\uuuu文件\uuuuu)开始是好的。请缩小问题的范围。这是
if
条件还是
glob
<代码>变量转储($a==“/var/www/vhosts/mysite/httpdocs/sub1”);var_dump($dir==“/var/www/vhosts/mysite/httpdocs/sub1”);变量转储($dir==$a)但始终返回当前工作目录。如果getcwd=this/dir,并且我有一个变量a也=this/dir,那么为什么这样做,但将它与this/dir的字符串进行比较却不行?你看到疯狂了吗?字符串和变量是相同的。在一个循环中,我将dir与字符串进行比较,在另一个循环中,我将dir与变量进行比较。它们要么是真的,要么是假的,没有中间立场,但它们不是。一个返回true,另一个不返回true。如果这是因为getcwd不正确……那么这两种方法都不适用。也可以说doesfalse==true。但是总是返回当前工作目录。如果getcwd=this/dir,并且我有一个变量a也=this/dir,那么为什么这样做,但将它与this/dir的字符串进行比较却不行?你看到疯狂了吗?字符串和变量是相同的。在一个循环中,我将dir与字符串进行比较,在另一个循环中,我将dir与变量进行比较。它们要么是真的,要么是假的,没有中间立场,但它们不是。一个返回true,另一个不返回true。如果这是因为getcwd不正确……那么这两种方法都不适用。也可以说does false==true.-1使用相对路径并不比硬编码主机路径好,因为相对路径依赖于set include path,而set include path甚至不一定包含当前工作目录。更好的方法是使用
\uuuuu DIR\uuuu
常量,或者如果您有较旧的php版本,
dirname(\uu文件