如何在PHP MAMP中启用过程控制扩展(PCNTL)?

问题描述 投票:30回答:6

我有MAMP,我需要在当前的MAMP安装中启用-pcntl。我该怎么办?

感谢您的帮助。

php mamp pcntl
6个回答
59
投票

[有一种将PCNTL编译为扩展并将其链接到现有PHP构建的方法,但是有点深入。

我正在Mac OSX Snow Leopard(64位)上使用MAMP和PHP版本5.3.6执行以下操作。如果您的不同,请记住在以下几行中更改PHP版本号!

请注意,make是必需的,Mac OSX上默认未安装。您需要通过Mac开发人员工具http://developer.apple.com/unix/

进行安装

[首先,下载与您在MAMP中使用的版本相匹配的PHP源代码的tar(例如,我的是5.3.6),您可以在http://www.php.net/releases/处执行此操作。将CD和CD解压缩到php- [version] / 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,该目录是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

然后我们可以运行./configuremake来构建共享对象:

pcntl$ ./configure
pcntl$ make

这会将名为pcntl.so的文件放置在modules目录中。将此文件复制到您的MAMP的PHP扩展目录:

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

最后,编辑PHP INI文件以包含扩展名:

$ 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设置,然后重试。


5
投票

如果您在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!

3
投票

为了使我的生活更轻松,我编写了一个脚本from the other post。我用它来将扩展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
投票

我使用MacPorts解决了这个问题。

运行命令:

sudo port install php5-pcntl

2
投票

我发现使用PHP 5.6.2的优胜美地和Mamp的工作方式略有不同。在此处找到说明: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

0
投票
  1. https://www.php.net/releases/下载php
  2. tar -xzvf php-7.3.8.tar.gz(我们将命名为输出的文件夹PhpSrcFolder
  3. 确保路径中有MAMP bin目录=> echo $PATH。为此,您将需要额外的工具。 (如果您的$ PATH中已经有垃圾箱,请跳至步骤5)
  4. 您可以按照以下步骤将Mamp的bin添加到您的路径,我们首先从~/.profile grep mamp使用的php版本(PS:Mamp在php中为php添加别名),然后我们将mamp的bin添加到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 php的路径:/Library/Application Support/appsolute/MAMP PRO/conf/php7.3.8.ini,然后重新检查其是否具有pcntl扩展名:

[pcntl]

extension = pcntl.so

© www.soinside.com 2019 - 2024. All rights reserved.