2010-06-22 57 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 

它解決了這個問題。

相關問題