如何从/ var / tmp更改默认的Pear / PECL构建文件夹?

时间:2010-06-22 20:42:01

标签: php linux pear pecl

我正在尝试在Linux上安装PECL软件包,但安装程序永远不会超过配置阶段。

我的托管服务提供商在/ 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构建非默认文件夹?

3 个答案:

答案 0 :(得分:2)

哇,你为什么要从PECL安装PDO?自5.1以来,PDO已内置于PHP中。你在运行5.0吗?

如果您运行的是5.1或更高版本且缺少PDO,则可能是:

  1. 您的PHP副本是在没有它的情况下编译的,必须重新编译;或
  2. 您的PHP副本是从操作系统的存储库安装的,没有PDO模块
  3. 如果为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顶部甚至还有一个很大的框。)

答案 1 :(得分:2)

上面的答案可能对用户有帮助,但不会对使用/ tmp目录遇到“noexec”问题的用户有所帮助。

以下是pecl安装[program]失败时如何“配置错误无法运行c编译的程序”,因为你无法在/ tmp目录中执行东西:

首先在启用了exec选项的情况下重新安装/ tmp目录: mount -o,remount,rw,exec / tmp

其次,安装你的pecl扩展: pecl install [扩展名]

第三,完成后,您应该使用以下命令将其设置为'noexec': mount -o,remount,rw,noexec / tmp

答案 2 :(得分:0)

在我的情况下/ tmp是noexec,/ var是可执行的。

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

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

它解决了这个问题。