file_exists с символьными файлами? - PullRequest
3 голосов
/ 23 февраля 2011

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

Я успешно создал символическую ссылку из:

/ var / www / vhosts/myhost.com.au/httpdocs/fileserver/videostream/

to:

/ usr / local / MediaServer / content /

и PHP с радостью обработает мое необработанное видеоследуя этой символической ссылке на настоящий файл над корнем.

Однако, если я попытаюсь

file_exists('/var/www/vhosts/myhost.com.au/httpdocs/fileserver/videostream/myfile.mp4') 

, я столкнусь со всевозможными ошибками "open_basedir реально действующее ограничение".

Это можно обойти?или мне нужно просто предположить, что если мои записи в базе данных верны и сказать, что файл был обработан, то это действительно так.

Будет ли попытка fopen работать лучше или все еще существуют ограничения basedir?

Мы на выделенном хосте с правами root, поэтому мы можем делать все, что нужно.

Спасибо.


Обнаружен обходной путь, но он не решает вопрос: -)

На самом деле я могу использовать CURL для извлечения заголовков реального файла, и это позволяет мне узнать, существует он или нет.Плюс еще один метод - проверить наличие пользовательских URL-адресов серверов потоковой передачи для этого файла с помощью CURL.Проблема решена, но не совсем так, как я хотел.

Ответы [ 2 ]

0 голосов
/ 22 ноября 2017

Вы должны посмотреть на is_link вместо file_exists

0 голосов
/ 23 февраля 2011

Если вы просто хотите проверить, существует ли ссылка (а не существует ли цель ссылки, к которой у вас все равно нет доступа из-за ограничений basedir), вы можете использовать функцию readlink вместо file_exists.Если он возвращает строку, тогда ссылка существует, если она возвращает false, то ссылка, скорее всего, не существует.

if (@readlink($filename) !== false)
{
    echo "Yay!";
}

Теоретически ограничения basedir здесь не должны срабатывать, но я этого не делаюзнаю точно.

...