当变量位于文件名中时,PHP文件_exists返回false

当变量位于文件名中时,PHP文件_exists返回false,php,filenames,file-exists,Php,Filenames,File Exists,我想检查我的服务器上是否存在jpeg文件。但是,当我检查它时,返回值为false clearstatcache(); // the $img variable is dynamically got from $split[1] which is something like image.jpeg" /> $img = str_replace('"','',$split[1]); // remove double quotes $img = str_replace('/>','',$

我想检查我的服务器上是否存在jpeg文件。但是,当我检查它时,返回值为false

clearstatcache();

// the $img variable is dynamically got from $split[1] which is something like image.jpeg" />
$img = str_replace('"','',$split[1]); // remove double quotes
$img = str_replace('/>','',$img); // remove img end tag
$img = str_replace(' ','',$img); // remove spaces

$filename = "uploads/image.jpeg"; // original file name
$fn = "uploads/".$img; // file name with dynamic variable in it
if(file_exists($fn)){
       echo "yes";
}else{
       echo "no";
}

// Check if the two strings are the same and they are
if($fn == $filename){
       echo "same";
}
原始的静态文件名返回yes,而动态文件名返回no。我已选中,服务器上的安全模式已关闭,并且两个变量$fn和$filename完全相同。如果我只是简单地使$img等于image.jpeg而没有任何str_替换,它也会返回true并回显yes。
总的来说,我不知道$img变量有什么问题,如果变量相同,为什么它会返回两个不同的结果?

如果调试逻辑中存在严重缺陷,请尝试以下方法:

echo '<hr/>';

clearstatcache();

// the $img variable is dynamically got from $split[1] which is something like image.jpeg" />
$img = str_replace('"','',$split[1]); // remove double quotes
$img = str_replace('/>','',$img); // remove img end tag
$img = str_replace(' ','',$img); // remove spaces

$filename = "uploads/image.jpeg"; // original file name
$fn = "uploads/".$img; // file name with dynamic variable in it
if(file_exists($fn)){
    echo '$fn: yes';
    echo '<br/>';
}else{
    echo '$fn: no';
    echo '<br/>';
}

if(file_exists($filename)){
    echo '$filename: yes';
    echo '<br/>';
}else{
    echo '$filename: no';
    echo '<br/>';
}

// Check if the two strings are the same and they are
if($fn == $filename){
    echo "same";
    echo '<br/>';
}
else
{
    echo 'different';
    echo '<br/>';
}

echo '<pre>';
var_dump( $split[1], $filename, $fn )
echo '</pre>';

echo '<hr/>';

var_dump$filename,$fn请…另外,/uploads/。。。指硬盘根目录中上载的目录。对吗?不知怎的,我怀疑它是真的。var_dump给了我string97 permUploads/_jrP_Nq_X3hHsXdQ0_vHG1Yr5Z_touryx_XzsyczWnJ9HC8Hick_UN9BISgxszzNvmV_uOq.jpeg string93 permUploads/_jrP_Nq_X3HhdQ0_VHG1SxYR5Z_touryx_XzsyczczWnJ9HC8Hick_un9; JsgxszznVmV_uOq.jpeg。两个相同但长度不同的字符串。怎么样?@MarkFrankli 93!=97这是您的问题如果$fn==$filename,这就没有意义了{应该失败了。我假设您实际上混淆了这里的一些输出,与之前一样。$fn:no$filename:no.string93 permUploads/_jrP_Nq_xhSxDq0_vHG1Yr5Z_touryx_xzSxSyczWnJ9HC8Hick_un9bisgXszNVMV_uq.jpeg string97 permUploads/_jrP_Nq_xhSxHxSxDq0_vg1Yr5z_xHcXchXxXxCxXxCxCxCxNxCxWnJ9; nJu9;.jpeg.jpeg不能用trim或str_replace删除空格。@MarkFrankli您的web浏览器正在隐藏字符,您需要查看源代码;Chrome中的ctrl+u。@MarkFrankli Try var_dump$split[1];然后看看是否一切都是你所期望的。是的,实际上我有一个隐藏的标签在里面。@MarkFrankli,这解释了额外的4个字符。如果我的回答帮助了你,请随意接受它。