我遇到了这个奇怪的问题:$ 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)
怎么会发生? 感谢您提前提供任何帮助
答案 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");
此外,您始终可以修剪附加到脏字符串的其他不需要的字符。