как включить расширение управления процессом (PCNTL) в PHP MAMP?


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

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


person Lina    schedule 08.03.2011    source источник


Ответы (6)


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

Я делаю следующее на Mac OSX Snow Leopard (64-битная версия) с 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/. Распаковать и перезагрузить в 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 и повторить попытку.

person Jon Cairns    schedule 08.12.2011
comment
Это решение также работает для стандартного PHP, который поставляется со Snow Leopard ^_^ - person zundr; 16.12.2011
comment
Если вы встретите error: ‘PHP_FE_END’ undeclared here (not in a function) после запуска make, замените все вхождения PHP_FE_END в pcntl.c на {NULL,NULL,NULL}. - person Matthew; 22.03.2012
comment
Любая подсказка, я получаю Zend/zend_signal.h не существует. Когда я проверил, он существует. - person TeaCupApp; 25.09.2012
comment
Если в вашей системе установлено несколько версий php (как в случае с Lion), вам может потребоваться указать php-config местоположение на шаге ./configure. Это будет выглядеть примерно так: ./configure --with-php-config=/Applications/MAMP/bin/php/php5.4.10/bin/php-config - person jverdi; 18.06.2013
comment
@jverdi спасибо. ваш совет сработал для меня ... Также, если кто-то получает ошибку компиляции в файле pcntl.c, замените HASH_KEY_NON_EXISTENT на HASH_KEY_NON_EXISTANT - person Haider; 25.11.2014
comment
Можно ли сделать это доступным для PHP через командную строку? Я вызываю php через тот, который устанавливает MAMP, но после этого модуль все еще не существует. Однако он сделал его доступным для того, который использует apache. - person kyle; 29.10.2016
comment
@kyle MAMP PHP и CLI PHP используют разные INI, поэтому убедитесь, что расширение включено в обоих. - person Jon Cairns; 01.11.2016
comment
Работает с php7.2.14 даже в 2019 году! - person Sarasranglt; 15.01.2019

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

варить установить php53-pcntl

Я не эксперт по MAMP, хотя.

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

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!
person Ian Lewis    schedule 10.05.2013
comment
Такой формулы заваривания не существует - person Bob Gregor; 20.06.2013
comment
Да, это так .. Вам нужно лучше провести исследование, прежде чем голосовать против. - person Ian Lewis; 20.06.2013
comment
это зависит от установленной версии PHP BREW - похоже, она плохо работает с MAMP - это был первоначальный вопрос - person Bob Gregor; 05.07.2013
comment
Он отлично работает с моей версией MAMP (с php 5.6.1), за исключением того, что php56-pcntl сейчас немного глючит, и brew не может его установить. - person Mario Dian; 28.01.2015
comment
Это работает с MAMP. Просто сначала установите phpXX-pcntl, а затем скопируйте pcntl.so в нужную папку (проверьте правильность пути в выводе brew): cp /usr/local/Cellar/php71-pcntl/7.1.8_15/pcntl.so /Applications/MAMP/bin/php/php7.1.1/lib/php/extensions/no-debug-non-zts-20160303/ - person Michiel; 31.08.2017

Чтобы облегчить себе жизнь, я сделал скрипт из другого поста. Я использовал его для добавления расширений 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}"
person rp90    schedule 11.04.2012

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

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

sudo port install php5-pcntl
person padawan    schedule 14.05.2014
comment
Дайте больше пояснений к вашему ответу. - person Sulthan Allaudeen; 14.05.2014

Я нашел немного разные инструкции, которые работали для 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
person davydka    schedule 24.04.2015

  1. загрузить php с https://www.php.net/releases/
  2. tar -xzvf php-7.3.8.tar.gz (Мы назовем выходную папку PhpSrcFolder)
  3. Убедитесь, что у вас есть каталог bin MAMP на вашем пути => echo $PATH. Для этого вам понадобятся дополнительные инструменты. (Перейдите к шагу 5, если у вас уже есть корзина mamp в $PATH)
  4. вы можете добавить корзину mamp в свой путь следующим образом: сначала мы выбираем версию php, используемую mamp, из ~/.profile (PS: Mamp добавляет псевдоним к php в последнем), затем мы добавляем корзину mamp в PATH в соответствии с используемой версией. .

экспорт PHP_VERSION=grep "alias php" ~/.profile | cut -d"/" -f6 | cut -c4-

# укажите на папку php.ini, чтобы использовать ту же настройку php

export PHPRC=/Library/Application Support/appsolute/MAMP PRO/conf/

экспорт PATH=/Applications/MAMP/bin/php/php$PHP_VERSION/bin:$PATH

PS: закройте и снова откройте терминал

  1. Скопируйте PhpSrcFolder/ext/pcntl в /Applications/MAMP/bin/php/php7.3.8/include/php/ext/pcntl

  2. Войдите в /Applications/MAMP/bin/php/php7.3.8/include/php/ext/pcntl и затем запустите команду phpize. Обратите внимание, что вам также потребуется установить Xcode и связанные с ним инструменты.

  3. После этого вы сможете запустить ./configure && make && make install. Это создаст расширение в /Applications/MAMP/bin/php/php7.3.8/include/php/ext/pcntl/modules/pcntl.so, скопирует его и вставит в /Applications/MAMP/bin/php/php7.3.8/lib/php/extensions/no-debug-non-zts-20180731/pcntl.so.

  4. Теперь отредактируйте php.ini и включите модуль, как и любое другое расширение. получить путь к php.ini, загруженному с помощью команды which phpfor me its: /Library/Application Support/appsolute/MAMP PRO/conf/php7.3.8.ini, и перепроверить, имеет ли он расширение pcntl:

[pcntl]

расширение = pcntl.so

person Abouhassane Abdelhamid    schedule 24.01.2020