2

我遇到了这个奇怪的问题:$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)

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

4

7 回答 7

6

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

于 2011-07-13T08:45:33.120 回答
1
riad@riad-desktop:~$ php -r 'print(strlen("content/images/1107_16.jpg"));'
26

因此,您的字符串不好(可能最后包含坏字符(\0 ?)

于 2011-07-13T08:46:11.727 回答
1

我建议您使用以下方法比较结果bin2hex()

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

看来这是不同字符集的问题。

于 2011-07-13T08:53:51.847 回答
0

也许你的 $myImg 中有一些不可见的字符?像换行符之类的东西?

于 2011-07-13T08:45:42.863 回答
0

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

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

请注意,这正确地报告了 26 个字节——这对于 ASCII(或 UTF-8)来说是正确的。上面报告的 45 个字节看起来像是某种多字节编码。

于 2011-07-13T08:47:16.937 回答
0
string(45) "content/images/1107_16.jpg" 

应该少一些字符长试试:

trim($myImg)

删除空格字符

于 2011-07-13T08:48:22.333 回答
0

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

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

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

于 2011-07-13T08:52:12.583 回答