PHP file_exists()异常

时间:2011-07-13 08:42:41

标签: php file-exists

我遇到了这个奇怪的问题:$ myImg变量已经从一些本地html中提取并指向我想要检查的文件。使用字符串变量file_exists给出false,但如果手动插入内容os变量,则它给出true。

var_dump($myImg);

输出:string(26) "content/images/1107_16.jpg"

var_dump(file_exists($myImg));

输出:bool(false)

var_dump(file_exists("content/images/1107_16.jpg"));

输出:bool(true)

怎么会发生? 感谢您提前提供任何帮助

7 个答案:

答案 0 :(得分:6)

content/images/1107_16.jpg的长度不是45,所以显然还有其他字符。尝试修剪变量。

答案 1 :(得分:1)

riad@riad-desktop:~$ php -r 'print(strlen("content/images/1107_16.jpg"));'
26

所以,你的字符串很糟糕(最后可能包含一个坏字符(\ 0?))

答案 2 :(得分:1)

我建议你使用bin2hex()比较结果:

var_dump(bin2hex($myImg));
var_dump(bin2hex("content/images/1107_16.jpg"));

似乎这是不同字符集的问题。

答案 3 :(得分:0)

你的$ myImg中可能还有一些看不见的角色?像换行符这样的东西?

答案 4 :(得分:0)

您的字符串中似乎有一些不可打印的字符或不同的字符编码:

var_dump ("content/images/1107_16.jpg");
string(26) "content/images/1107_16.jpg"

请注意,这正确地报告了26个字节 - 这与ASCII(或UTF-8)是正确的。上面报告的45个字节就像某种多字节编码一样。

答案 5 :(得分:0)

string(45) "content/images/1107_16.jpg" 

应该少玩chars尝试:

trim($myImg)

删除spacechars

答案 6 :(得分:0)

尝试在将字符串传递给file_exists方法之前转换字符串

$myImg = mb_convert_encoding($myImg, "UTF-8");

此外,您始终可以修剪附加到脏字符串的其他不需要的字符。