30


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

谢谢你的帮助。

4

6 回答 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 到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

然后需要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

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

pcntl$ ./configure
pcntl$ make

pcntl.so这会在模块目录中放置一个名为的文件。将此文件复制到 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

如果你看到了,那就成功了!如果出现任何问题,您可以pcntl.so从 MAMP PHP 扩展目录中删除该文件并删除 INI 设置,然后重试。

于 2011-12-08T14:53:33.637 回答
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!
于 2013-05-10T13:06:42.547 回答
3

只是为了让我的生活更轻松,我从另一篇文章中制作了一个脚本。我用它来向 MAMP 添加扩展 pcntl、sysvmsg、sysvshm、sysvsem 和其他扩展。使用 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}"
于 2012-04-11T18:29:33.497 回答
2

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

运行命令:

sudo port install php5-pcntl
于 2014-05-14T12:10:45.070 回答
2

我发现一些稍微不同的指令适用于使用 php 5.6.2 的 Yosemite 和 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
于 2015-04-24T16:58:26.620 回答
0
  1. 从https://www.php.net/releases/下载 php
  2. tar -xzvf php-7.3.8.tar.gz(我们将命名输出的文件夹PhpSrcFolder
  3. 确保路径 => 中有 MAMP bin 目录echo $PATH。为了做到这一点,你需要它所拥有的额外工具。(如果您的 $PATH 中已经有 mamp 的 bin,请跳到第 5 步)
  4. 你可以将mamp的bin添加到你的路径中,我们首先grep mamp使用的php版本来自~/.profile(PS:Mamp add alias to php in 后者),然后我们根据使用的版本将mamp bin添加到PATH。

导出 PHP_VERSION=grep "alias php" ~/.profile | cut -d"/" -f6 | cut -c4-

# 指向您的 php.ini 文件夹以使用相同的 php 设置

导出 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加载路径:并重新检查它是否具有 pcntl 扩展名:which php/Library/Application Support/appsolute/MAMP PRO/conf/php7.3.8.ini

[pcntl]

扩展=pcntl.so

于 2020-01-24T22:49:53.457 回答