【问题标题】:PHP file_exists() anomalyPHP file_exists() 异常
【发布时间】:2011-10-04 07:31:52
【问题描述】:

我遇到了这个奇怪的问题:$myImg 变量已从一些本地 html 中提取并指向我要检查的文件。使用字符串变量 file_exists 会给出 false,但如果手动插入 content 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)

怎么会这样? 提前感谢您的任何帮助

【问题讨论】:

  • Offtopic:对于检查文件,我建议使用is_file(),因为file_exists() 同时检查文件和目录。

标签: php file-exists


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    【讨论】:

      【解决方案3】:
      riad@riad-desktop:~$ php -r 'print(strlen("content/images/1107_16.jpg"));'
      26
      

      所以,您的字符串是错误的(可能最后包含一个错误字符 (\0 ?)

      【讨论】:

        【解决方案4】:

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

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

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

        【讨论】:

          【解决方案5】:
          string(45) "content/images/1107_16.jpg" 
          

          应该少一些字符长时间尝试:

          trim($myImg)
          

          删除空格

          【讨论】:

            【解决方案6】:

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

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

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

            【讨论】:

              【解决方案7】:

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

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

              好像是不同字符集的问题。

              【讨论】:

                猜你喜欢
                • 2013-02-07
                • 1970-01-01
                • 2016-04-29
                • 2016-01-23
                • 2013-08-21
                • 2010-10-22
                • 2012-09-02
                • 2017-05-14
                • 2017-03-11
                相关资源
                最近更新 更多