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文件