2011-03-08 32 views

Respuesta

55

Hay una forma de compilar PCNTL como extensión y vincularlo a una versión de PHP existente, pero es un poco profundo.

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 la suya es diferente!

Tenga en cuenta que make es necesario, que no está instalado por defecto en Mac OSX. Es necesario instalar esto a través de herramientas para desarrolladores de Mac, http://developer.apple.com/unix/

En primer lugar, descargar un alquitrán del código fuente PHP que coincide con la versión que está utilizando en MAMP (por ejemplo, la mía es 5.3.6), que se puede hacer en http://www.php.net/releases/ . Untar y CD para PHP [versión]/ext/PCNTL, por ejemplo:

$ 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, deberá 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 grupo de archivos que se necesitan para preparar una extensión para la compilación.

Ahora necesitamos agregar algunos indicadores para indicarle que compile la biblioteca con una arquitectura dual de 32 bits y 64 bits, ya que el PHP de MAMP se ha creado de esta manera. Si no lo hace, 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 ./configuremake y para construir nuestro objeto compartido:

pcntl$ ./configure 
pcntl$ make 

Esto pone un archivo llamado pcntl.so en el directorio de módulos . Copiar 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/ 

Por último, 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 debe estar habilitado. Para comprobar si se ha agregado, simplemente ejecute:

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

pcntl 

pcntl support => enabled 

Si ve eso, ¡ha funcionado! Si algo salió mal, puede eliminar el archivo pcntl.so del directorio de extensiones PHP de MAMP, eliminar la configuración INI y volver a intentarlo.

+0

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

+8

si se encuentra con 'error: 'PHP_FE_END' no declarado aquí (no en una función)' después de correr 'make', reemplace todas las apariciones de' PHP_FE_END' en pcntl.c con '{NULL, NULL, NULL}'. –

+1

Cualquier pista, estoy obteniendo Zend/zend_signal.h no existe. Cuando lo revisé, existe. – doNotCheckMyBlog

3

Solo para hacer mi vida más fácil, hice un script from the other post. Lo usé para agregar las extensiones pcntl, sysvmsg, sysvshm, sysvsem y otras a MAMP. Para usar cd en el directorio de extensión o pasar el directorio como un argumento para el 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}" 
4

Si tiene 'cerveza' instalado en su MAC, entonces debería ser capaz de hacer:

brew install php53-pcntl

No soy experto en MAMP sin embargo.

==== ==== EDITAR (En respuesta a estar abajo votó)

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! 
+0

No existe tal fórmula de elaboración –

+1

Sí lo hace .. Debe investigar mejor antes de votar. –

+0

esto depende de la versión BREW de PHP que se está instalando - parece que no funciona bien con MAMP - que fue la pregunta original –

2

He resuelto el problema mediante el uso de MacPorts.

ejecutó el comando:

sudo port install php5-pcntl 
+0

Proporcione más explicaciones a su respuesta. –

2

me encontré con algunas instrucciones ligeramente diferentes que trabajaron para Yosemite y Mamp usando PHP 5.6.2. No se encontraron instrucciones 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 
Cuestiones relacionadas