2010-06-22 2 views
2

Я пытаюсь установить пакет PECL в Linux, но установщик никогда не проходит стадию настройки.Как изменить папку Pear/PECL по умолчанию из/var/tmp?

Мой хостинг-провайдер смонтированный файловую систему в/вар/TMP, который предотвращает файлы от выполнения, и что вызывает эту ошибку:

[email protected] [/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 о создании нестандартной папки?

+0

Монтаж/tmp (или тот, который ссылается на него), поскольку noexec является ложным чувством безопасности. 'cd ~ &&/bin/sh -c/tmp/badcode'. .. слишком много хостов принимают администраторов, которые делают все, что говорит Google. –

ответ

2

Whoa, почему вы устанавливаете PDO из PECL? PDO был встроен в PHP с 5.1. Вы используете 5.0?

Если вы работаете 5.1 или выше и отсутствуют PDO, вероятность того, что:

  1. Ваша копия PHP был скомпилирован без него, и должен быть повторно; или
  2. Ваша копия PHP был установлен из репозитория вашей операционной системы без модуля PDO

Если 1, то вам необходимо либо перекомпилировать PHP с нуля, или скомпилировать только общий модуль и скопировать его в правильное место нахождения.

Если вам 2, вам просто нужно установить расширение PDO вашей ОС. В разделе RHEL и CentOS попробуйте yum search php-pdo. Я не знаю правильного синтаксиса для вызова установщика пакетов для других дистрибутивов, но пакет почти наверняка будет содержать строку «php-pdo». (Совет: если вы получили свой PHP из своей ОС, они также могут предоставить общие пакеты PECL. Попробуйте найти «pecl» в своих хранилищах.)

Наконец, если вы используете 5.0 ... ради все, что хорошо в этом мире, обновится! Прочитайте через upgrade notes in the PHP manual first, на случай, если вы случайно используете старое поведение.

(Кроме того, перенастроить PECL, попробуйте pecl config-show, чтобы увидеть, какие настройки доступны, а затем pecl config-set ... изменить настройку. Не пытайтесь установить расширение PDO для версии PHP новее, чем 5.0.x, его будет перерыв. Там даже большой толстый ящик в верхней части PDO page on the PECL site.)

+0

Спасибо! Я запустил phpinfo() и увидел "./configure" --disable-mbregex '' --disable-pdo '". Не знаю, почему у них было бы отключено PDO ... – jodonnell

+0

Если это ваш хост, они безумны. Если это ваш дистрибутив ОС, это значит, что они могли бы скомпилировать его как отдельный модуль для любой безумной причины. – Charles

2

ответы выше, могут помочь пользователю, но не те, которые работают в «поехес» задачи с/TMP реж.

Вот как PECL установить [Программа], когда он терпит неудачу с «ошибка конфигурации не может работать с скомпилированных программ», потому что вы не можете выполнить вещи в каталоге/TMP:

Первый перемонтировать каталог/TMP с ехес опции включено: крепление -o, перемонтирования, RW, Exec/TMP

Во-вторых, установить свой PECL расширение,: PECL установить [имя продление]

в-третьих, как только вы закончите, вы должны установить его обратно в ' noexec ': mount -o, remount, rw, noexec/tmp

+0

У меня есть эта проблема при установке memcached. Я повторно установил каталог tmp и var/tmp, но ошибка сохраняется, и я не могу установить расширение. CentOS 5.9. Должен ли я открыть вопрос для этого? –

0

В моем случае/tmp is noexec,/var является исполняемым.

main10:~# mv /tmp/pear /var/tmp 

main10:~# ln -s /var/tmp/pear /tmp/pear 

Это решило проблему.