PHP file_exists () возвращает false для некоторых файлов - PullRequest
8 голосов
/ 08 января 2011

У меня странная проблема с функцией file_exists() PHP на сервере Linux.

При использовании file_exists, чтобы проверить, находится ли изображение на сервере перед его редактированием, иногда происходит сбой без видимой причины. Пути к файлам являются абсолютными, и я проверил их через ssh, они на 100% по указанному пути.

Изображения с ошибкой file_exists () будут по-прежнему отображаться в браузере. Код не имеет значения, базовый var_dump(file_exists('/home/user/path/image.jpg')); вернет false.

Права доступа к файлам одинаковы для всех изображений и родительских каталогов. Безопасный режим выключен. Там нет ошибок PHP. Сейчас я в тупике и не знаю, что искать.

Вот как изображения на сервере:

/home/user/public_html/images/location/1.jpg -- will work
/home/user/public_html/images/location2/1.jpg -- won't work
/home/user/public_html/images/location2/2.jpg -- will work

У меня есть root-доступ к серверу, поэтому, если у кого-нибудь появятся идеи, я с удовольствием их опробую.

Заранее спасибо за совет, дайте мне знать, если вам нужна дополнительная информация.

EDIT: Чтобы ответить на вопросы в комментариях ниже.

  • Да, изображения есть, они точно не кешируются.
  • Безопасный режим отключен (я уже упоминал об этом в своем посте).
  • Пути - это не символические ссылки, а прямые ссылки на расположение файлов на сервере.
  • Феникс, это соответствует. Рабочие файлы всегда будут работать и наоборот. Имена 1.jpg, 1.thumb.jpg и т. Д., Так что это не проблема со странными символами или пробелами.
[root@server ~]# ls -l /home/user/public_html/images/Hawkhurst/
total 92
-rwxr-xr-x  1 user user 24501 Aug 11  2009 1.jpg
-rwxr-xr-x  1 user user  1672 Aug 11  2009 1.thumb.jpg
-rwxr-xr-x  1 user user 14983 Aug 11  2009 2.jpg
-rwxr-xr-x  1 user user  1370 Aug 11  2009 2.thumb.jpg
-rwxr-xr-x  1 user user 17238 Aug 11  2009 3.jpg
-rwxr-xr-x  1 user user  1453 Aug 11  2009 3.thumb.jpg
-rwxr-xr-x  1 user user 14168 Aug 11  2009 4.jpg
-rwxr-xr-x  1 user user  1464 Aug 11  2009 4.thumb.jpg 
[root@server ~]#

Я пробовал с разрешениями 777 и 755, которые не имеют значения. Например, в этой папке 1 и 2 могут работать, в то время как 3 и 4 не работают ...

Я провел быстрый тест, чтобы увидеть, как работает apache / php, и они работают как никто, но это не объясняет, почему некоторые образы работают, а некоторые - с одинаковыми разрешениями.

РЕДАКТИРОВАТЬ 2: Проблема решена. Не могу поверить, насколько это было глупо, у некоторых имен файлов, которые были вызваны из базы данных, были пробелы в конце ... Кто бы ни делал оригинальный скрипт, он не выполнял никакой очистки перед сохранением.

Ответы [ 4 ]

4 голосов
/ 08 января 2011

Попробуйте запустить ls -l /home/user/public_html/images/location/ и добавьте вывод к своему вопросу.

Скорее всего, это проблема с правами доступа.PHP, вероятно, не имеет доступа для чтения к файлу.

1 голос
/ 22 сентября 2014

Возможно, в имени файла есть символ пробела.Это важно.

1 голос
/ 25 марта 2013

После многих поисков в Интернете я сам нашел решение.Надеюсь, что это будет полезно для других людей: убедитесь, что пользователь и группа, настроенные в вашем apache httpd.conf, такие же, как группа и пользователь apache.

0 голосов
/ 07 сентября 2016

У меня также были проблемы с получением правильного результата. Оказывается, для меня это была проблема с правами доступа к папке. Вы должны убедиться, что папки имеют разрешение eXecute для пользователя Apache. Чтобы это исправить, я просто сделал это на моем linux-box: chmod g + x csv_files

С уважением Иван

...