У меня есть 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 (например, my 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
в каталог модулей . Скопируйте этот файл в каталог расширений 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
из каталога расширений PHP MAMP и удалить параметр INI и повторить попытку.
Чтобы облегчить мою жизнь, я сделал сценарий с другого поста . Я использовал его для добавления расширений 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}"
Если у вас есть «заваривание», установленное на вашем MAC-адресе, вы должны уметь:
brew install 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!
Я решил проблему, используя 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