У меня есть скрипт для загрузки файлов на мой сайт. Это прекрасно работает, но теперь я хочу извлечь метаданные из видеофайлов, используя библиотека 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()
,
Я починил это. По некоторым причинам, 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
и сделано.
Других решений пока нет …