PHP file_exists () аномалия - PullRequest
       27

PHP file_exists () аномалия

2 голосов
/ 13 июля 2011

Я столкнулся с этой странной проблемой: переменная $ 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 ]

6 голосов
/ 13 июля 2011

Длина content/images/1107_16.jpg не равна 45, поэтому, очевидно, есть и другие символы.Попробуйте обрезать переменную.

1 голос
/ 13 июля 2011

Предлагаю сравнить результаты, используя bin2hex():

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

Кажется, это проблема разных кодировок.

1 голос
/ 13 июля 2011
riad@riad-desktop:~$ php -r 'print(strlen("content/images/1107_16.jpg"));'
26

Итак, ваша строка плохая (может состоять из плохих символов (\ 0?) В конце)

0 голосов
/ 13 июля 2011

Попробуйте преобразовать строку перед передачей в метод file_exists

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

Кроме того, вы всегда можете обрезать другие нежелательные символы, прикрепленные к грязной строке.

0 голосов
/ 13 июля 2011
string(45) "content/images/1107_16.jpg" 

должно быть меньше символов долго пытаться:

trim($myImg)

для удаления пробелов

0 голосов
/ 13 июля 2011

Похоже, в вашей строке есть некоторые непечатаемые символы или другая кодировка символов:

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

Обратите внимание, что это правильно сообщает о 26 байтах - что было бы правильно с ASCII (или UTF-8),45 байтов, о которых сообщалось выше, будут выглядеть как некое многобайтовое кодирование.

0 голосов
/ 13 июля 2011

возможно какой-то невидимый персонаж в вашем $ myImg? что-то вроде разрыва строки?

...