【问题标题】:how to enable process control extension (PCNTL) in PHP MAMP?如何在 PHP MAMP 中启用进程控制扩展 (PCNTL)?
【发布时间】:2011-07-10 22:58:28
【问题描述】:


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

感谢您的帮助。

【问题讨论】:

    标签: php mamp pcntl


    【解决方案1】:

    有一种方法可以将 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
    

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

    这会在 modules 目录中放置一个名为 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
    

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

    【讨论】:

    • 此解决方案也适用于 Snow Leopard 自带的标准 PHP ^_^
    • 如果在运行make 后遇到error: ‘PHP_FE_END’ undeclared here (not in a function),请将pcntl.c 中所有出现的PHP_FE_END 替换为{NULL,NULL,NULL}
    • 任何线索,我得到 Zend/zend_signal.h 不存在。当我检查它确实存在时。
    • 如果您的系统上有多个版本的 php(如 Lion 中的情况),您可能需要在 ./configure 步骤中指定 php-config 位置。这看起来像:./configure --with-php-config=/Applications/MAMP/bin/php/php5.4.10/bin/php-config
    • @kyle MAMP PHP 和 CLI PHP 使用不同的 INI,因此请检查是否在两者中都启用了扩展。
    【解决方案2】:

    如果你的 MAC 上安装了“brew”,那么你应该可以这样做:

    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!
    

    【讨论】:

    • 不存在这样的冲泡配方
    • 是的,确实如此。在否决投票之前,您需要更好地进行研究。
    • 这取决于正在安装的 PHP 的 BREW 版本 - 它似乎不能与 MAMP 很好地配合 - 这是最初的问题
    • 它适用于我的 MAMP 版本(使用 php 5.6.1)除了 php56-pcntl 现在有点问题,brew 无法安装它。
    • 这适用于 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/
    【解决方案3】:

    为了让我的生活更轻松,我制作了一个脚本from the other post。我用它来向 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}"
    

    【讨论】:

      【解决方案4】:

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

      运行命令:

      sudo port install php5-pcntl
      

      【讨论】:

      • 给你的答案更多解释。
      【解决方案5】:

      我发现一些稍有不同的指令适用于使用 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
      

      【讨论】:

        【解决方案6】:
        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添加到你的路径中,我们首先从~/.profile grep mamp使用的php版本(PS:Mamp在后者中为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 并像其他任何扩展一样启用该模块。通过运行which php获取php.ini 的路径,对我来说它是:/Library/Application Support/appsolute/MAMP PRO/conf/php7.3.8.ini,并重新检查它是否具有 pcntl 扩展名:

        [pcntl]

        extension=pcntl.so

        【讨论】:

          猜你喜欢
          • 2018-05-28
          • 1970-01-01
          • 2017-03-13
          • 2015-07-14
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2020-01-03
          相关资源
          最近更新 更多