Код: Выделить всё
$ cat /etc/redhat-release
ALT Linux Sisyphus (20081222)
$ rpm -qa|grep apache
apache2-icons-2.2.21-alt1
apache2-datadirs-2.2.21-alt1
apache2-mod_rpaf-0.6-alt4
apache2-2.2.21-alt1
apache2-cgi-bin-2.2.21-alt1
apache2-common-2.2.21-alt1
apache2-html-2.2.21-alt1
apache2-mod_php5-5.3.8.20110823-alt1.M60P.1
apache2-mod_disk_cache-2.2.21-alt1
apache2-cgi-bin-printenv-2.2.21-alt1
apache2-cgi-bin-test-cgi-2.2.21-alt1
apache2-httpd-prefork-2.2.21-alt1
apache2-base-2.2.21-alt1
apache2-htcacheclean-2.2.21-alt1
$ rpm -qa|grep php
php5-exif-5.3.8.20110823-alt0.M60P.1
php5-libs-5.3.8.20110823-alt1.M60P.1
php5-curl-5.3.8.20110823-alt0.M60P.1
php5-mbstring-5.3.8.20110823-alt0.M60P.1
php5-zip-5.3.8.20110823-alt0.M60P.1
php5-mcrypt-5.3.8.20110823-alt0.M60P.1
php-base-2.7-alt3
php5-suhosin-0.9.32.1-alt7.M60P.1
php5-gd2-5.3.8.20110823-alt0.M60P.1
apache2-mod_php5-5.3.8.20110823-alt1.M60P.1
php5-fileinfo-5.3.8.20110823-alt0.M60P.1
php5-ffmpeg-5.3.8.20110823-alt0.M60P.1
php5-pgsql-5.3.8.20110823-alt0.M60P.1.1
php5-bz2-5.3.8.20110823-alt0.M60P.1
php5-5.3.8.20110823-alt1.M60P.1В какой-то момент случилось что-то(что и в какой момент - установить уже невозможно), из-за чего пхпшная функция finfo_open без второго аргумента не распознает типы файлов - у нее все octet-stream.
Например, вот такой код:
Код: Выделить всё
<?php
$filename="/opt/1/test.mkv";
$finfo = finfo_open(FILEINFO_MIME_TYPE,'/usr/share/file/magic');
echo finfo_file($finfo,$filename).PHP_EOL;
finfo_close($finfo);
$finfo = finfo_open(FILEINFO_MIME_TYPE);
echo finfo_file($finfo,$filename);
?>возвращает:
Код: Выделить всё
video/x-matroska
application/octet-streamТ.к. в действующем сайте код определения типа файлов находится во фреймворке, вариант с патчем кода откладывается на самое безвыходное положение.
Я нарыл документацию на функцию:
http://php.net/manual/ru/function.finfo-open.php
magic_file
Имя файла магической базы данных, обычно что-то наподобие этого: /path/to/magic.mime. Если не указан полный путь, будет использована переменная окружения MAGIC. Если эта переменная не указана, будет использован путь по умолчанию /usr/share/misc/magic. При необходимости добавляется суффикс .mime и/или .mgc.
Передача NULL или пустой строки эквивалентно значению по умолчанию.
Т.е. задание переменной окружения должна помочь.
И вправду, в консольке помогает:
Код: Выделить всё
$ export MAGIC=/usr/share/file/magic
$ php mimetest.php
video/x-matroska
video/x-matroskaЯ подключил модуль mod_env в апач, добавил в определение vhost следующую строку:
Код: Выделить всё
SetEnv MAGIC /usr/share/file/magicПерезапустил апач, но в итоге ситуация не поменялась.
при этом
Код: Выделить всё
$mag = getenv('MAGIC');
echo $magвозвращает /usr/share/file/magic
То есть переменная нормально передается php, однако функция не отрабатывает как надо.
В связи с вышеописанным вопрос: Где я ошибся с определением переменной?
Также, есть еще и альтернативный способ: узнать, куда php смотрит на предмет magic database и сделать симлинк туда. Но как узнать, куда он смотрит? в документации сказано, что смотрит он в /usr/share/misc/magic, но симлинк туда не помог.
Может, есть еще какие-нибудь способы заставить работать функцию без второго аргумента?