У меня есть MAMP, и мне нужно включить -pcntl
в моей текущей установке MAMP. Как я могу это сделать?
Спасибо за вашу помощь.
У меня есть MAMP, и мне нужно включить -pcntl
в моей текущей установке MAMP. Как я могу это сделать?
Спасибо за вашу помощь.
Существует способ скомпилировать 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 и повторить попытку.
error: ‘PHP_FE_END’ undeclared here (not in a function)
после запуска make
, замените все вхождения PHP_FE_END
в pcntl.c на {NULL,NULL,NULL}
.
- person Matthew; 22.03.2012
php-config
местоположение на шаге ./configure
. Это будет выглядеть примерно так: ./configure --with-php-config=/Applications/MAMP/bin/php/php5.4.10/bin/php-config
- person jverdi; 18.06.2013
Если на вашем 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!
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}"
Я решил проблему с помощью MacPorts.
Запустил команду:
sudo port install php5-pcntl
Я нашел немного разные инструкции, которые работали для 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
tar -xzvf php-7.3.8.tar.gz
(Мы назовем выходную папку PhpSrcFolder
)echo $PATH
. Для этого вам понадобятся дополнительные инструменты. (Перейдите к шагу 5, если у вас уже есть корзина mamp в $PATH)~/.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
Скопируйте PhpSrcFolder
/ext/pcntl в /Applications/MAMP/bin/php/php7.3.8/include/php/ext/pcntl
Войдите в /Applications/MAMP/bin/php/php7.3.8/include/php/ext/pcntl
и затем запустите команду phpize
. Обратите внимание, что вам также потребуется установить Xcode и связанные с ним инструменты.
После этого вы сможете запустить ./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
.
Теперь отредактируйте php.ini и включите модуль, как и любое другое расширение. получить путь к php.ini
, загруженному с помощью команды which php
for me its: /Library/Application Support/appsolute/MAMP PRO/conf/php7.3.8.ini
, и перепроверить, имеет ли он расширение pcntl:
[pcntl]
расширение = pcntl.so