PHP $ _FILE Temp Location open_basedir Конфликт PHP-FPM / Nginx

У меня есть скрипт для загрузки файлов на мой сайт. Это прекрасно работает, но теперь я хочу извлечь метаданные из видеофайлов, используя библиотека ffmpeg / ffprobe. Мой код:

if (!empty($_FILES)) {
$requestAr = requestCheck(['title', 'description']);
$assetName = randomString(11);
$assetSalt = randomString(3);

$bucket = "videos";
$fileTmpPath = $_FILES['qqfile']['tmp_name'];
$filenameOrig = $_FILES['qqfile']['name'];
$fileExtension = pathinfo($filenameOrig, PATHINFO_EXTENSION);
$assetFilename = $assetName . "_$assetSalt.$fileExtension";

$trustedExtensions = ['webm', 'mp4', 'ogg'];
if(array_search($fileExtension, $trustedExtensions) !== false) {
$ffprobe = FFMpeg\FFProbe::create([
'ffprobe.binaries' => '/usr/bin/ffprobe'
]);
$fileInfo = $ffprobe
->format($fileTmpPath) // extracts file informations
->get('duration');             // returns the duration property
print_r($fileInfo);
}
}

Я получаю эту ошибку:

file_exists(): open_basedir restriction in effect. File(/usr/bin/ffprobe) is not within the allowed path(s): <lists all the directories in the open_basedir variable>

Я передал библиотеке ffmpeg абсолютный путь к ffprobe, чтобы он знал, где он находится. Я искал вокруг, и некоторые люди говорили, что это потому, что lib не может получить доступ к каталогу tmp с загруженным файлом. В любом случае я пытался отключить open_basedir или, по крайней мере, добавьте нужные мне пути, чтобы заставить это работать.

Я пробовал настройку open_basedir никому в моем php.ini но это не сработало. Когда я смотрю phpinfo(), он по-прежнему перечисляет кучу путей для этого параметра. Я пытался понять где open_basedir существует на сервере. Действительно, это php.ini файлы, и мне не нужно изменять ничего, кроме того, о котором сообщалось в phpinfo(),

0

Решение

Я починил это. По некоторым причинам, grep не возвращал все файлы с basedir строка. Мне пришлось отредактировать файл php-fpm для конкретного сайта: /etc/php/7.0/fpm/pool.d/web8.conf и добавьте пути:

/usr/bin/ffmpeg:/usr/bin/ffprobe

к php_admin_value[open_basedir] директивы. затем systemctl reload php7.0-fpm.service и сделано.

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]