Как включить расширение управления процессом (PCNTL) в PHP MAMP? - PullRequest
29 голосов
/ 08 марта 2011


У меня есть MAMP, и мне нужно включить -pcntl в моей текущей установке MAMP. Как я могу это сделать?

Спасибо за вашу помощь.

Ответы [ 5 ]

58 голосов
/ 08 декабря 2011

Существует способ скомпилировать PCNTL как расширение и связать его с существующей сборкой PHP, но он немного углублен.

Я делаю следующее на Mac OSX Snow Leopard (64bit), с MAMP и PHP версии 5.3.6. Не забудьте изменить номера версий PHP в следующих строках, если у вас другое!

Обратите внимание, что требуется make, который не установлен по умолчанию в Mac OSX. Вам необходимо установить это через инструменты разработчика Mac, http://developer.apple.com/unix/

Сначала загрузите tar исходного кода PHP, который соответствует версии, которую вы используете в MAMP (например, у меня 5.3.6), которую вы можете сделать на http://www.php.net/releases/. Untar и 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

Затем вам нужно запустить phpize в каталоге pcntl, который является двоичным файлом, который поставляется с MAMP:

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

Затем мы можем запустить ./configure и make, чтобы построить наш общий объект:

pcntl$ ./configure
pcntl$ make

Это помещает файл с именем pcntl.so в каталог modules . Скопируйте этот файл в каталог расширений PHP вашего MAMP:

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

Наконец, отредактируйте INI-файл 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

Если вы видите это, это работает! Если что-то пошло не так, вы можете просто удалить файл pcntl.so из каталога расширений MAMP PHP, удалить параметр INI и повторить попытку.

5 голосов
/ 10 мая 2013

Если у вас установлен «brew» на вашем MAC, то вы должны сделать:хотя.

==== РЕДАКТИРОВАТЬ ==== (В ответ на то, что проголосовали против)

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!
3 голосов
/ 11 апреля 2012

Просто чтобы облегчить мне жизнь, я написал скрипт из другого поста .Я использовал его для добавления расширений pcntl, sysvmsg, sysvshm, sysvsem и других в MAMP.Использовать cd в каталоге расширений или передать каталог в качестве аргумента скрипту.Пример ./addExtension.sh php-5.3.6 / ext / 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}"
2 голосов
/ 24 апреля 2015

Я нашел несколько отличающиеся инструкции, которые работали для Yosemite и Mamp, используя php 5.6.2.Инструкции были найдены здесь: 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
2 голосов
/ 14 мая 2014

Я решил проблему с помощью MacPorts.

Запустил команду:

sudo port install php5-pcntl
...