Это не вопрос о PCRE, а скорее вопрос об обновлении разделяемых библиотек. Распространение CentOS, которое я использую, позволяет только yum
обновляется до версии 6.6 или чего-то подобного.
Я устанавливаю средство отслеживания проблем, для которого требуется PCRE версии 8.0+. Я не могу удалить текущую версию PCRE 6.6, так как от нее зависит почти все, и система сломается.
Таким образом, я скомпилировал и установил PCRE 8.12 из исходников, но хотя pcretest -C
показал новую версию, вызов php_info () на моей тестовой странице показывает, что библиотеки 6.6 все еще загружаются. Я нашел ссылка на сайт предлагая, как заменить старые библиотеки на новые.
При этом я думаю, что не совсем так. Несколько команд сообщают о проблемах:
/usr/bin/php: error while loading shared libraries: libpcre.so.0: cannot open shared object file: No such file or directory
Что именно мне делать, чтобы исправить проблему? Я не очень знаком с разделяемыми / динамическими библиотеками. У меня есть следующие файлы:
[root@vps tracker]# find / -name libpcre.so* -exec ls -l '{}' \;
lrwxrwxrwx 2 root root 16 Jul 14 07:53 /lib64/libpcre.so.0 -> libpcre.so.0.0.1
lrwxrwxrwx 1 root root 16 Jul 14 07:53 /usr/local/lib/libpcre.so.0 -> libpcre.so.0.0.1
-rwxr-xr-x 1 root root 116790 Jul 14 07:53 /usr/local/lib/libpcre.so.0.0.1
lrwxrwxrwx 2 root root 16 Jul 14 07:53 /usr/local/lib/libpcre.so -> libpcre.so.0.0.1
lrwxrwxrwx 1 root root 16 Jul 14 07:16 /root/pcre-8.12/.libs/libpcre.so.0 -> libpcre.so.0.0.1
-rwxr-xr-x 1 root root 116790 Jul 14 07:16 /root/pcre-8.12/.libs/libpcre.so.0.0.1
lrwxrwxrwx 1 root root 16 Jul 14 07:16 /root/pcre-8.12/.libs/libpcre.so -> libpcre.so.0.0.1
Успех! Я уничтожил существующие библиотеки, все, чего не было в /root/pcre-8.12/
, затем запустил ./configure; make; make install
из исходного каталога.
Установлено правильно, но все равно показал мне аналогичную ошибку. Я отметил:
[root@vps pcre-8.12]# ldd /usr/sbin/httpd
libm.so.6 => /lib64/libm.so.6 (0x00002b3c8a9dd000)
libpcre.so.0 => not found
(bunch of others)
Что библиотеки были в /lib64/
, в то время как единственная ссылка, созданная исходным установщиком, была:
/usr/local/lib/libpcre.so.0
Итак, я просто создал ссылку в /lib64/
:
[root@vps tracker]# link /usr/local/lib/libpcre.so.0.0.1 /lib64/libpcre.so.0
И вроде бы все отлично!
Возможно
LDD / USR / bin / PHP
покажет, где php ожидает найти разделяемые библиотеки pcre.
В моем случае я исправил это с помощью следующей команды, изменив пределы выполнения:
echo "php-fpm - stack -1" >> / etc / security / limits.conf
echo "apache - стек -1" >> / etc / security / limits.conf
su apache --shell / bin / bash --command "ulimit -s"
mkdir -p /etc/systemd/system/php-fpm.service.d
echo [Сервис]> /etc/systemd/system/php-fpm.service.d/ulimit.conf
эхо LimitSTACK = бесконечность >> / etc / systemd / system / php-fpm.service.d / ulimit.conf
mkdir -p /etc/systemd/system/nginx.service.d
echo [Сервис]> /etc/systemd/system/nginx.service.d/ulimit.conf
эхо LimitSTACK = бесконечность >> / etc / systemd / system / nginx.service.d / ulimit.conf
echo "fs.file-max = 500000" >> /etc/sysctl.conf
systemctl демон-перезагрузка
systemctl перезапустить php-fpm