URL: https://www.opennet.ru/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID8
Нить номер: 5703
[ Назад ]

Исходное сообщение
"как изменить LD_LIBRARY_PATH в php?"

Отправлено charliez , 19-Апр-08 00:33 
Иммется виртуальный хостинг (зенон) на котором можно компилировать свои модули для пхп и подключать их в собственный php.ini

был собран модуль ffmpeg.so, нюанс такой, что все требуемые им библиотеки при сборке положены так же в хоумдир (в $HOME/local/lib), и из-под shell все работает только при установленной переменной окружения LD_LIBRARY_PATH=/bhome/part3/03/saroot/local/lib

%ldd ffmpeg.so
ffmpeg.so:
        libavformat.so.52 => /bhome/part3/03/saroot/local/lib/libavformat.so.52 (0x2816e000)
        libavcodec.so.51 => /bhome/part3/03/saroot/local/lib/libavcodec.so.51 (0x281ff000)
        libgcc_s.so.1 => /usr/local/lib/libgcc_s.so.1 (0x2866f000)
        libavutil.so.49 => /bhome/part3/03/saroot/local/lib/libavutil.so.49 (0x28677000)
        libz.so.3 => /lib/libz.so.3 (0x28683000)
        libm.so.4 => /lib/libm.so.4 (0x28694000)
        libmp3lame.so.0 => /bhome/part3/03/saroot/local/lib/libmp3lame.so.0 (0x286aa000)
        libvorbisenc.so.2 => /bhome/part3/03/saroot/local/lib/libvorbisenc.so.2 (0x28733000)
        libvorbis.so.3 => /bhome/part3/03/saroot/local/lib/libvorbis.so.3 (0x28832000)
        libogg.so.5 => /bhome/part3/03/saroot/local/lib/libogg.so.5 (0x28859000)
        libc.so.6 => /lib/libc.so.6 (0x2807d000)

если LD_LIBRARY_PATH убрать, то

%ldd ~/local/lib/ffmpeg.so
/bhome/part3/03/saroot/local/lib/ffmpeg.so:
        libavformat.so.52 => /bhome/part3/03/saroot/local/lib/libavformat.so.52 (0x2816e000)
        libavcodec.so.51 => /bhome/part3/03/saroot/local/lib/libavcodec.so.51 (0x281ff000)
        libgcc_s.so.1 => /usr/local/lib/libgcc_s.so.1 (0x2866f000)
        libavcodec.so.51 => not found (0x0)
        libavutil.so.49 => not found (0x0)
        libz.so.3 => /lib/libz.so.3 (0x28677000)
        libm.so.4 => /lib/libm.so.4 (0x28688000)
        libmp3lame.so.0 => not found (0x0)
        libvorbisenc.so.2 => not found (0x0)
        libvorbis.so.3 => not found (0x0)
        libogg.so.5 => not found (0x0)
        libavutil.so.49 => not found (0x0)
        libmp3lame.so.0 => not found (0x0)
        libvorbisenc.so.2 => not found (0x0)
        libvorbis.so.3 => not found (0x0)
        libogg.so.5 => not found (0x0)
        libc.so.6 => /lib/libc.so.6 (0x2807d000)

что понятно, так как собственноручно собранные  либы не попадают в директории по умолчанию.


ffmpeg.so положен в $HOME/local/lib

прописал в ~/php4.ini
extension_dir = "/bhome/part3/03/saroot/local/lib"
extension=ffmpeg.so

из shell все нормально:

php -c ~/php4.ini -i | grep ffm
ffmpeg
ffmpeg support (ffmpeg-php) enabled
ffmpeg-php version 0.5.0
ffmpeg.allow_persistent 0

%php -c ~/php4.ini -m | grep ffm
ffmpeg


при попытке же открыть через веб, скрипт с phpinfo() информация о модуле отсутствует. При попытке подключить его динамически -

Warning: dl() [function.dl]: Unable to load dynamic library '/bhome/part3/03/saroot/local/lib/ffmpeg.so' - Shared object "libavcodec.so.51" not found, required by "libavformat.so.52" in /bhome/part3/03/saroot/domain/www/testtest/test3.php on line 21

подозреваю, что пхп не ищет либы /bhome/part3/03/saroot/local/lib, так как на него не распростряняются переменные окружения shell

Попытки экспортировать переменную LD_LIBRARY_PATH в скрипте ни к чему не привели.

Может быть, есть еще способ заставить пхп искать Shared object-ы  в другом месте?


Содержание

Сообщения в этом обсуждении
"как изменить LD_LIBRARY_PATH в php?"
Отправлено angra , 19-Апр-08 15:22 
Вообще такие вопросы лучше саппорту хостинга задавать, они лучше знают что и как у них организовано, а вариантов может быть много. Универсальным вариантом остается статическая сборка.  

"как изменить LD_LIBRARY_PATH в php?"
Отправлено AlexX , 19-Апр-08 20:05 
>Вообще такие вопросы лучше саппорту хостинга задавать, они лучше знают что и
>как у них организовано, а вариантов может быть много. Универсальным вариантом
>остается статическая сборка.

Вариант статической сборки действительно 100% сработает, т.к. собираться все будет уже непосредственно в shell.

а вообще, есть ещё такая штука: (для apache)
http://httpd.apache.org/docs/1.3/mod/mod_env.html


"как изменить LD_LIBRARY_PATH в php?"
Отправлено charliez , 19-Апр-08 20:37 
тарифный план не позволяет подключить к апачу mod_env

Но проблему удалось обойти, подключив PHP как CGI модуль к апачу :) Тему можно закрыть.



"как изменить LD_LIBRARY_PATH в php?"
Отправлено AlexX , 20-Апр-08 14:58 
>тарифный план не позволяет подключить к апачу mod_env

когда он там изначально есть :))))
>
>Но проблему удалось обойти, подключив PHP как CGI модуль к апачу :)
>Тему можно закрыть.

"Труден путь из потемок к свету..." (с)


"как изменить LD_LIBRARY_PATH в php?"
Отправлено Максим , 09-Фев-09 04:35 
Доброго времени суток!

Та же проблема. Но использовать PHP как CGI не хотелось бы.

собрал fmpeg как ./configure --prefix=$HOME/local --enable-static --enable-shared
ffmpeg- ./configure --prefix=$HOME/local --with-php-config=$HOME/php-config --with-ffmpeg=$HOME/local

в $HOME/php-config тупейший перл-скрипт подменяющий --extension-dir на $HOME/local/phpext

в итоге

> ldd ~/local/phpext/ffmpeg.so

$HOME/local/phpext/ffmpeg.so:
        libavformat.so.52 => $HOME/local/lib/libavformat.so.52 (0x6a51000)
        libavcodec.so.51 => $HOME/local/lib/libavcodec.so.51 (0x6bee000)
        libgcc_s.so.1 => /usr/local/lib/libgcc_s.so.1 (0x72cb000)
        libavcodec.so.51 => not found (0x0)
        libavutil.so.49 => not found (0x0)
        libz.so.3 => /lib/libz.so.3 (0x73d6000)
        libbz2.so.2 => /usr/lib/libbz2.so.2 (0x74ea000)
        libm.so.4 => /lib/libm.so.4 (0x75fa000)
        libavutil.so.49 => not found (0x0)
        libc.so.6 => /lib/libc.so.6 (0x6736000)

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

Премного буду благодарен.