2011-03-08 71 views

回答

55

有一種編譯PCNTL作爲擴展並將其鏈接到現有PHP構建中的方法,但它有點深入。

我在Mac OSX Snow Leopard(64位)上使用MAMP和PHP 5.3.6版進行以下操作。如果您的版本不同,請記住更改以下行中的PHP版本號!

請注意,make是必需的,它在Mac OSX上默認不安裝。你需要通過蘋果開發工具安裝此,http://developer.apple.com/unix/

首先,下載您所使用的MAMP版本相匹配的PHP源代碼的焦油(如我的是5.3.6),你可以在http://www.php.net/releases/做。解壓和CD到PHP的[版本]/ext /中了pcntl,如:

$ wget http://museum.php.net/php5/php-5.3.6.tar.gz 
$ tar xvf php-5.3.6.tar.gz 
$ cd php-5.3.6/ext/pcntl 

然後,您需要在了pcntl目錄,這是帶有甲基苯丙胺的二進制文件運行phpize

pcntl$ /Applications/MAMP/bin/php/php5.3.6/bin/phpize 

這會創建一堆準備編譯擴展所需的文件。

我們現在需要添加一些標誌來告訴它用雙32位和64位體系結構編譯庫,因爲MAMP PHP是以這種方式構建的。如果你不這樣做,編譯的共享對象將不起作用。

pcntl$ MACOSX_DEPLOYMENT_TARGET=10.6 
pcntl$ CFLAGS="-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp" 
pcntl$ CCFLAGS="-arch i386 -arch x86_64 -g -Os -pipe" 
pcntl$ CXXFLAGS="-arch i386 -arch x86_64 -g -Os -pipe" 
pcntl$ LDFLAGS="-arch i386 -arch x86_64 -bind_at_load" 
pcntl$ export CFLAGS CXXFLAGS LDFLAGS CCFLAGS MACOSX_DEPLOYMENT_TARGET 

我們可以運行./configuremake打造我們共同的目標:

pcntl$ ./configure 
pcntl$ make 

這使得一個名爲pcntl.so文件中的模塊目錄。最後

pcntl$ cp modules/pcntl.so /Applications/MAMP/bin/php/php5.3.6/lib/php/extensions/no-debug-non-zts-20090626/ 

,編輯PHP INI文件,包括擴展名::這個文件複製到你的MAMP的PHP擴展目錄

$ echo "extension=pcntl.so" >> /Applications/MAMP/bin/php/php5.3.6/conf/php.ini 

PCNTL應已啓用。要檢查是否已添加,請執行以下操作:

$ /Applications/MAMP/bin/php/php5.3.6/bin/php --ri pcntl 

pcntl 

pcntl support => enabled 

如果您看到這一點,如果出現任何問題,您可以從MAMP PHP擴展目錄中刪除pcntl.so文件並刪除INI設置,然後重試。

+0

該解決方案還適用於自帶的雪豹標準的PHP^_^ – zundr 2011-12-16 17:13:19

+8

如果遇到'錯誤:「PHP_FE_END」運行未申報這裏(不是在一個函數)'後'make',用'{NULL,NULL,NULL}'替換pcntl.c中所有出現的'PHP_FE_END'。 – 2012-03-22 02:35:13

+1

任何線索,我得到Zend/zend_signal.h doe不存在。當我檢查它確實存在。 – doNotCheckMyBlog 2012-09-25 06:20:30

3

爲了讓我的生活更輕鬆我做了一個腳本from the other post。我用它來擴展pcntl,sysvmsg,sysvshm,sysvsem和其他的MAMP。將cd用於擴展目錄或將該目錄作爲參數傳遞給腳本。例子./addExtension.sh php-5.3。6 /轉/ PCNTL

#!/bin/bash 
DIR=$1 
MAMP_PHP=$2 
if [ -z "$DIR" ] 
then 
    DIR=`pwd` 
fi 

if [ -z "$MAMP_PHP" ] 
then 
    MAMP_PHP='/Applications/MAMP/bin/php/php5.3.6' 
fi 

EXTENSION=${DIR##*/} 

echo Extension: $EXTENSION 

cd $DIR 

eval "${MAMP_PHP}/bin/phpize" 


MACOSX_DEPLOYMENT_TARGET=10.6 
CFLAGS="-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp" 
CCFLAGS="-arch i386 -arch x86_64 -g -Os -pipe" 
CXXFLAGS="-arch i386 -arch x86_64 -g -Os -pipe" 
LDFLAGS="-arch i386 -arch x86_64 -bind_at_load" 
export CFLAGS CXXFLAGS LDFLAGS CCFLAGS MACOSX_DEPLOYMENT_TARGET 

./configure 
make 

cp modules/${EXTENSION}.so "${MAMP_PHP}/lib/php/extensions/no-debug-non-zts-20090626/" 

PHP_INI_PATH="${MAMP_PHP}/conf/php.ini" 
sed -e "/extension=${EXTENSION}.so/ d" $PHP_INI_PATH > TMP 
mv TMP $PHP_INI_PATH 
echo "extension=${EXTENSION}.so" >> $PHP_INI_PATH 

eval "${MAMP_PHP}/bin/php --ri ${EXTENSION}" 
4

如果您已經安裝在你的MAC「釀造」,那麼你應該能夠做到:

brew install php53-pcntl

我對甲基苯丙胺不是專家,但。

==== EDIT ==== (響應於被向下投票)

Ian-Lewiss-MacBook-Pro:~ ianlewis$ brew install php53-pcntl 
Warning: php53-pcntl-5.3.25 already installed 

Ian-Lewiss-MacBook-Pro:~ ianlewis$ brew info php53-pcntl 
php53-pcntl: stable 5.3.25 
http://php.net/manual/en/book.pcntl.php 
/usr/local/Cellar/php53-pcntl/5.3.23 (3 files, 32K) 
    Built from source 
/usr/local/Cellar/php53-pcntl/5.3.25 (3 files, 32K) * 
    Built from source 
https://github.com/josegonzalez/homebrew-php/commits/master/Formula/php53-pcntl.rb 
==> Dependencies 
Build: autoconf 
Required: php53 
==> Options 
--without-config-file 
    Do not add ext-pcntl.ini to /usr/local/etc/php/5.3/conf.d 
--without-homebrew-php 
    Ignore homebrew PHP and use default instead 
==> Caveats 
To finish installing pcntl for PHP 5.3: 
    * /usr/local/etc/php/5.3/conf.d/ext-pcntl.ini was created, 
    do not forget to remove it upon extension removal. 
    * Restart your webserver. 
    * Write a PHP page that calls "phpinfo();" 
    * Load it in a browser and look for the info on the pcntl module. 
    * If you see it, you have been successful! 
+0

不存在這樣的沖泡配方 – 2013-06-19 20:55:23

+1

是的,你需要在投票前做更好的研究。 – 2013-06-20 08:33:28

+0

這取決於正在安裝的PHP的BREW版本 - 它似乎不能很好地與MAMP搭配使用 - 這是原始問題 – 2013-07-05 18:08:54

2

我使用的MacPorts解決了這個問題。

運行命令:

sudo port install php5-pcntl 
+0

給出更多解釋給你的答案。 – 2014-05-14 12:31:41

2

我發現了一些使用PHP 5.6.2工作了Yosemite和甲基苯丙胺的說明略有不同。 說明在這裏找到: https://www.flynsarmy.com/2015/01/get-artisan-tinker-working-osx-10-mamp/

wget http://museum.php.net/php5/php-5.6.2.tar.gz 
tar -xzvf php-5.6.2.tar.gz 
mv php-5.6.2 php 
mkdir -p /Applications/MAMP/bin/php/php5.6.2/include 
mv php /Applications/MAMP/bin/php/php5.6.2/include 

cd /Applications/MAMP/bin/php/php5.6.2/include/php 
./configure 

MACOSX_DEPLOYMENT_TARGET=10.10 
CFLAGS="-arch i386 -arch x86_64 -g -Os -pipe -no-cpp-precomp" 
CCFLAGS="-arch i386 -arch x86_64 -g -Os -pipe" 
CXXFLAGS="-arch i386 -arch x86_64 -g -Os -pipe" 
LDFLAGS="-arch i386 -arch x86_64 -bind_at_load" 
export CFLAGS CXXFLAGS LDFLAGS CCFLAGS MACOSX_DEPLOYMENT_TARGET 

cd ext/pcntl 
phpize 
./configure 
make 
cp modules/pcntl.so /Applications/MAMP/bin/php/php5.6.2/lib/php/extensions/no-debug-non-zts-20131226