Я пытаюсь установить пакет PECL в Linux, но установщик никогда не проходит стадию настройки.
Мой хостинг-провайдер установил файловую систему в / var / tmp, которая предотвращает выполнение файлов, и это вызывает эту ошибку:
root@host [/usr/local/apache/conf/includes]# pecl install pdo downloading PDO-1.0.3.tgz ... Starting to download PDO-1.0.3.tgz (52,613 bytes) .............done: 52,613 bytes 12 source files, building running: phpize Configuring for: PHP Api Version: 20041225 Zend Module Api No: 20060613 Zend Extension Api No: 220060519 building in /var/tmp/pear-build-root/PDO-1.0.3 running: /root/tmp/pear/PDO/configure checking for egrep... grep -E checking for a sed that does not truncate output... /bin/sed checking for cc... cc checking for C compiler default output file name... a.out checking whether the C compiler works... configure: error: cannot run C compiled programs. If you meant to cross compile, use `--host'. See `config.log' for more details. ERROR: `/root/tmp/pear/PDO/configure' failed
Я на 99% уверен, что проблема в том, что вы не можете выполнять файлы в / var / tmp (я скопировал исполняемый файл здесь и попробовал проверить). Я уверен, что могу получить PECL для завершения, если у меня есть работа над его работой в другом месте, но я не могу найти подходящий параметр конфигурации.
Как вы сообщаете PECL о создании в папке, отличной от настроек по умолчанию?
Whoa, почему вы устанавливаете PDO из PECL? PDO был встроен в PHP с 5.1. Вы используете 5.0?
Если вы используете 5.1 или выше и упускаете PDO, возможно, что:
Если 1, вам нужно либо перекомпилировать PHP с нуля, либо скомпилировать только общий модуль и скопировать его в нужное место.
Если 2, вам просто нужно установить расширение PDO вашей ОС. В RHEL и CentOS попробуйте yum search php-pdo
. Я не знаю правильного синтаксиса для вызова установщика пакетов для других дистрибутивов, но пакет почти наверняка будет содержать строку «php-pdo». (Совет. Если вы получили свой PHP из своей ОС, они также могут предоставить общие пакеты PECL. Попробуйте найти «pecl» в своих хранилищах.)
Наконец, если вы используете 5.0 … ради всего, что хорошо в этом мире, обновите! Сначала прочитайте заметки об обновлении в руководстве по PHP , на случай, если вы случайно используете старое поведение.
(Кроме того, чтобы переконфигурировать pecl, попробуйте pecl config-show
pecl, чтобы узнать, какие параметры доступны, за которым pecl config-set ...
чтобы изменить параметр. Не пытайтесь установить расширение PDO для версии PHP более новой версии, чем 5.0 .x, он сломается . В верхней части страницы PDO на сайте PECL есть даже большая жирная коробка.)
Ответы выше могут помочь пользователю, но не те, которые сталкиваются с проблемой «noexec» с / tmp dir.
Вот как можно установить программу [program], когда она терпит неудачу, поскольку «ошибка конфигурации не может запускаться с скомпилированными программами», потому что вы не можете выполнить материал в каталоге / tmp:
Сначала перемонтируйте каталог / tmp с включенной опцией exec: mount -o, remount, rw, exec / tmp
Во-вторых, установите расширение pecl: pecl install [имя расширения]
В-третьих, как только вы закончите, вы должны установить его обратно в «noexec», используя: mount -o, remount, rw, noexec / tmp
В моем случае / tmp is noexec, / var является исполняемым.
main10:~# mv /tmp/pear /var/tmp main10:~# ln -s /var/tmp/pear /tmp/pear
Он решил проблему.