2010-06-22 59 views
2

我试图在Linux上安装PECL包,但安装程序永远不会超过配置阶段。如何从/ var/tmp中更改默认的Pear/PECL构建文件夹?

我的托管服务提供商安装的文件系统位于/ var/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说什么。 – 2010-06-22 21:41:02

回答

2

哇,你为什么要从PECL安装PDO?从5.1开始,PDO就已经嵌入到PHP中。你运行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”。)所有这一切都很好,升级!请仔细阅读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 2010-06-23 16:46:03

+0

如果这是你的主机,他们是疯了。如果它是你的操作系统发行版,那么它可以将它作为一个单独的模块进行编译,无论它有什么疯狂的原因。 – Charles 2010-06-23 18:23:02

2

以上这些问题的答案可以帮助用户,而不是那些运行与在/ tmp目录的“NOEXEC”的问题。

下面是如何PECL安装[程序],当它失败,“配置错误可能不是C编译的程序运行”,因为你不能在/ tmp目录下执行的东西:

首先重新挂载/ tmp目录使用exec选项开启: 安装邻,重新装载,RW,EXEC/tmp目录

二,安装您的PECL extention: PECL安装[extention名称]

第三,一旦你完成,你应该将其设置回“ noexec'使用: mount -o,remount,rw,noexec/tmp

+0

安装memcached时出现此问题。我重新安装了tmp和var/tmp目录,但是错误仍然存​​在,我无法获得安装的扩展。 CentOS 5.9。我应该为此打开一个问题吗? – 2013-07-12 21:18:13

0

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

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

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

它解决了这个问题。

相关问题