¿Cómo hacer que la extensión zip funcione en PHP en MacOS 10.15.1?

¿Cómo hacer que la extensión zip funcione en PHP en MacOS 10.15.1?

He improvisado el siguiente procedimiento a partir de un par de preguntas diferentes aquí y en los foros de soporte de Apple. Ninguno de ellos ha trabajado por su cuenta, pero esto parece estar cerca. El problema es que termino con una extensión sin firmar que MacOS se niega a cargar; ¿Alguien puede ayudarme a resolver el último (espero) problema?

1. Instale la configuración automática.

cd ~/Downloads
curl -O -L http://ftpmirror.gnu.org/autoconf/autoconf-2.69.tar.gz
tar -xzf autoconf-2.69.tar.gz
cd autoconf-2.69
./configure
make
sudo make install

2. Instalar automake

cd ~/Downloads
curl -O -L http://ftpmirror.gnu.org/automake/automake-1.15.tar.gz
tar -xzf automake-1.15.tar.gz
cd automake-1.15
./configure
make
sudo make install

3. Instale libtool

cd ~/Downloads
curl -OL http://ftpmirror.gnu.org/libtool/libtool-2.4.6.tar.gz
tar -xzf libtool-2.4.6.tar.gz
cd libtool-2.4.6
./configure
make
sudo make install

4. Instale CMake

Descargue la imagen del disco desde:https://github.com/Kitware/CMake/releases/download/v3.16.0-rc3/cmake-3.16.0-rc3-Darwin-x86_64.dmg

Monte la imagen y arrastre la aplicación a su carpeta de Aplicaciones.

Edite su archivo .zshrc (o cree uno en su directorio de inicio si no tiene uno).

Añade la línea:

export PATH="$PATH:/Applications/CMake.app/Contents/bin"

Guarde el archivo y escriba el comando:

source ~/.zshrc

5. Instale libzip

cd ~/Downloads
curl -OL https://libzip.org/download/libzip-1.5.2.tar.gz
tar -xzf libzip-1.5.2.tar.gz
cd libzip-1.5.2
mkdir build
cd build
cmake ..
make
sudo make install

6. Cree una copia temporal de phpize que use las bibliotecas de Xcode

cd ~
cp /usr/bin/phpize ~/Desktop/

Edite la copia de phpize que ahora está en su escritorio y cambie esta línea:

includedir="`eval echo ${prefix}/include`/php"

...a:

includedir="/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX.sdk/usr/include/php"

Guarde el archivo phpize modificado.

7. Descargue el código fuente para la versión correcta de PHP - 7.3.9 a partir de MacOS 10.15.1

cd ~/Downloads
curl -O -L https://www.php.net/distributions/php-7.3.9.tar.bz2
tar -yxf php-7.3.9.tar.bz2
cd php-7.3.9/ext/zip

8. Construya la extensión

~/Desktop/phpize
CFLAGS="-I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/php/main -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/php/Zend -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/php/TSRM -I/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/include/php" ./configure --with-zlib-dir=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr --with-php-config=/Library/Developer/CommandLineTools/SDKs/MacOSX.sdk/usr/bin/php-config
make
make install
sudo mkdir /usr/local/lib/php/extensions
sudo mv modules/zip.so /usr/local/lib/php/extensions/

NOTA: Espero que make install falle debido a errores de permisos, pero una de las otras discusiones que encontré sugirió que este paso era necesario para firmar el código. Sin embargo, no parece tener ese efecto.

9. Edite el archivo /etc/php.ini

extension_dir="/usr/local/lib/php/extensions"
extension=zip

10. Prueba con comando:

php --version

Resultado

Advertencia de PHP: Inicio de PHP: No se puede cargar la biblioteca dinámica 'zip' (probado: /usr/local/lib/php/extensions/zip (dlopen(/usr/local/lib/php/extensions/zip, 0x0009): dlopen( ): archivo no encontrado: /usr/local/lib/php/extensions/zip), /usr/local/lib/php/extensions/zip.so (dlopen(/usr/local/lib/php/extensions/zip. entonces, 0x0009): la firma del código en (/usr/local/lib/php/extensions/zip.so) no es válida para su uso en el proceso: el archivo mapeado no tiene cdhash, no está completamente firmado. ¿El código debe estar al menos firmado ad-hoc? .)) en Desconocido en la línea 0

Respuesta1

Buen resumen. No necesitaba 2 y 3.

Luego para la firma

11. Debe iniciar XCode y agregar una cuenta.

Agregar una cuenta a XCode

Descargar un certificado

12. En la terminal consulte con certtool ysu nueva clave de firma. Se llama así:

Common Name     : Apple Development:
[email protected] (xxxxxxxx)

Aún con su usuario en la terminal, firme el archivo (muévalo nuevamente si ya no está en la carpeta de compilación; de lo contrario, terminará con un error de permiso)

codesign -f -s "Apple Development: [email protected]" /usr/local/lib/php/extensions/zip.so

Muévalo a la carpeta de destino, ejecútelo php --versiony terminará con:

Advertencia de PHP: Inicio de PHP: No se puede cargar la biblioteca dinámica 'zip' (probado: /usr/local/lib/php/extensions/zip (dlopen(/usr/local/lib/php/extensions/zip, 0x0009): dlopen( ): archivo no encontrado: /usr/local/lib/php/extensions/zip), /usr/local/lib/php/extensions/zip.so (dlopen(/usr/local/lib/php/extensions/zip. entonces, 0x0009): la firma del código en (/usr/local/lib/php/extensions/zip.so) no es válida para su uso en el proceso:El proceso de mapeo es un binario de plataforma, pero el archivo mapeado es no)) en Desconocido en la línea 0 PHP 7.3.11 (cli) (compilado: 29 de febrero de 2020 02:50:36) (NTS)

Ok, busqué en Internet (recurso perspicaz), y los bits que encontré pintan una imagen oscura. En breve:Ya no es posible con Mac Os Catalina.

El mensaje de error también lo dice. El entorno PHP está firmado como componente del sistema (binario de plataforma) y se instala de forma predeterminada. Mac Os Catalina exige que los binarios de la plataforma solo carguen código que también es un binario de la plataforma. Lo cual no puedes hacer, porque no eres Apple.

Dejando dos opciones posibles. Deshabilitar todo el sistema de aplicación de firmas, lo cual es una mala idea. O configure un Php de reemplazo completamente autoconstruido o con homebrew.

información relacionada