¿Cómo puedo habilitar la extensión de control de procesos (PCNTL) en PHP MAMP?

8 minutos de lectura

Avatar de usuario de Lina
Lina

tengo MÁMPARA y necesito habilitar -pcntl en mi instalación actual de MAMP.

¿Como lo puedo hacer?

Avatar de usuario de Jon Cairns
jon cairns

Hay una forma de compilar PCNTL como una extensión y vincularla a una compilación de PHP existente, pero es un poco profunda.

Estoy haciendo lo siguiente en Mac OSX Snow Leopard (64 bits), con MAMP y PHP versión 5.3.6. ¡Recuerde cambiar los números de versión de PHP en las siguientes líneas si el suyo es diferente!

Tenga en cuenta que make es obligatorio, que no está instalado de forma predeterminada en Mac OSX. Debe instalar esto a través de las herramientas de desarrollo de Mac, http://developer.apple.com/unix/

Primero, descargue un archivo tar del código fuente de PHP que coincida con la versión que está usando en MAMP (por ejemplo, la mía es 5.3.6), lo cual puede hacer en http://www.php.net/releases/. Descomprimir y CD a php-[version]/ext/pcntlp.ej:

$ 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

A continuación, debe ejecutar phpize en el directorio pcntl, que es un archivo binario que viene con MAMP:

pcntl$ /Applications/MAMP/bin/php/php5.3.6/bin/phpize

Esto crea un montón de archivos que se necesitan para preparar una extensión para compilar.

Ahora necesitamos agregar algunas banderas para decirle que compile la biblioteca con una arquitectura dual de 32 bits y 64 bits, ya que MAMP PHP se ha construido de esta manera. Si no hace esto, los objetos compartidos compilados no funcionarán.

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

Entonces podemos ejecutar ./configure y make para construir nuestro objeto compartido:

pcntl$ ./configure
pcntl$ make

Esto pone un archivo llamado pcntl.so en el módulos directorio. Copie este archivo en el directorio de extensiones PHP de su MAMP:

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

Finalmente, edite el archivo PHP INI para incluir la extensión:

$ echo "extension=pcntl.so" >> /Applications/MAMP/bin/php/php5.3.6/conf/php.ini

PCNTL ahora debería estar habilitado. Para verificar si se ha agregado, simplemente ejecute:

$ /Applications/MAMP/bin/php/php5.3.6/bin/php --ri pcntl

pcntl

pcntl support => enabled

Si ves eso, ¡ha funcionado! Si algo ha ido mal, simplemente puede eliminar el pcntl.so archivo del directorio de extensiones MAMP PHP y elimine la configuración INI, e intente nuevamente.

  • Esta solución también funciona para PHP estándar que viene con Snow Leopard ^_^

    – zundr

    16 de diciembre de 2011 a las 17:13


  • si te encuentras error: ‘PHP_FE_END’ undeclared here (not in a function) despues de correr makereemplaza todas las apariciones de PHP_FE_END en pcntl.c con {NULL,NULL,NULL}.

    – Mateo

    22 de marzo de 2012 a las 2:35

  • Cualquier pista, obtengo que Zend/zend_signal.h no existe. Cuando comprobé que existe.

    – TeaCupApp

    25 de septiembre de 2012 a las 6:20

  • Si tiene varias versiones de php en su sistema (como es el caso de Lion), es posible que deba especificar el php-config ubicación cuando en el ./configure paso. Eso se verá algo como: ./configure --with-php-config=/Applications/MAMP/bin/php/php5.4.10/bin/php-config

    – jverdi

    18 de junio de 2013 a las 1:48


  • @kyle MAMP PHP y CLI PHP usan diferentes INI, así que verifique que la extensión esté habilitada en ambos.

    -Jon Cairns

    1 de noviembre de 2016 a las 9:37

Avatar de usuario de Ian Lewis
ian lewis

Si tiene ‘brew’ instalado en su MAC, entonces debería poder hacer:

preparar la instalación de php53-pcntl

Sin embargo, no soy un experto en MAMP.

==== EDITAR ==== (En respuesta a la votación negativa)

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!

  • No existe tal fórmula de preparación

    – Bob Gregor

    19 de junio de 2013 a las 20:55

  • Sí, lo hace. Debe investigar mejor antes de votar negativamente.

    –Ian Lewis

    20 de junio de 2013 a las 8:33

  • esto depende de la versión BREW de PHP que se esté instalando; no parece funcionar bien con MAMP, que era la pregunta original

    – Bob Gregor

    5 de julio de 2013 a las 18:08

  • Funciona bien con mi versión MAMP (con php 5.6.1), aparte de que php56-pcntl tiene un poco de errores en este momento y brew no puede instalarlo.

    – Mario Diana

    28 de enero de 2015 a las 15:44

  • Esto funciona con MAMP. solo instala phpXX-pcntl primero, y luego copiar el pcntl.so a la carpeta correcta (Verifique la salida de brew para la ruta correcta): 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/

    – Miguel

    31 de agosto de 2017 a las 7:03

avatar de usuario de rp90
rp90

Solo para hacerme la vida más fácil, hice un guión de la otra publicación. Lo usé para agregar extensiones pcntl, sysvmsg, sysvshm, sysvsem y otras a MAMP. Para usar cd en el directorio de extensiones o pasar el directorio como argumento al script. Ejemplo ./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}"

avatar de usuario de padawan
padawan

Resolví el problema usando MacPorts.

Ejecutó el comando:

sudo port install php5-pcntl

Encontré algunas instrucciones ligeramente diferentes que funcionaron para Yosemite y Mamp usando php 5.6.2. Las instrucciones se encontraron aquí:
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

Avatar de usuario de la comunidad
Comunidad

  1. descargar php desde https://www.php.net/releases/
  2. tar -xzvf php-7.3.8.tar.gz (Nombraremos la carpeta de salida PhpSrcFolder)
  3. Asegúrese de tener el directorio bin MAMP en su ruta => echo $PATH. Necesitará las herramientas adicionales que tiene para hacer esto. (Pase al paso 5 si ya tiene el contenedor de mamp en su $PATH)
  4. puede agregar el contenedor de mamp a su ruta de la siguiente manera, primero grep la versión de php utilizada por mamp de ~/.profile (PD: Mamp agrega alias a php en este último), luego agregamos el contenedor de mamp a PATH de acuerdo con la versión utilizada.

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

# apunta a tu carpeta php.ini para usar la misma configuración de php

export PHPRC=”/Library/Application Support/appsolute/MAMP PRO/conf/”

exportar RUTA=/Aplicaciones/MAMP/bin/php/php$PHP_VERSION/bin:$RUTA

PD: cerrar y volver a abrir terminal

  1. Copiar PhpSrcFolder/ext/pcntl a /Applications/MAMP/bin/php/php7.3.8/include/php/ext/pcntl

  2. Entrar en /Applications/MAMP/bin/php/php7.3.8/include/php/ext/pcntl y luego ejecuta el phpize dominio. Tenga en cuenta que también necesitará tener Xcode y las herramientas relacionadas instaladas.

  3. A continuación, debería poder ejecutar ./configure && make && make install. Esto construirá la extensión en /Applications/MAMP/bin/php/php7.3.8/include/php/ext/pcntl/modules/pcntl.socópialo y pégalo en /Applications/MAMP/bin/php/php7.3.8/lib/php/extensions/no-debug-non-zts-20180731/pcntl.so

  4. Ahora, edite php.ini y habilite el módulo como lo haría con cualquier otra extensión. obtener ruta de php.ini cargado por correr which phppara mi es : /Library/Application Support/appsolute/MAMP PRO/conf/php7.3.8.ini y vuelva a comprobar que tiene la extensión pcntl:

[pcntl]

extensión=pcntl.so

¿Ha sido útil esta solución?