Как заставить работать расширение zip в PHP в MacOS 10.15.1?

Как заставить работать расширение zip в PHP в MacOS 10.15.1?

Я составил следующую процедуру из нескольких разных вопросов здесь и на форумах поддержки Apple. Ни один из них не сработал сам по себе, но это, похоже, близко. Проблема в том, что я получаю неподписанное расширение, которое MacOS отказывается загружать; может ли кто-нибудь помочь мне решить эту последнюю (надеюсь) проблему?

1. Установите autoconf.

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. Установить 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. Установить 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. Установите CMake

Загрузите образ диска с:https://github.com/Kitware/CMake/releases/download/v3.16.0-rc3/cmake-3.16.0-rc3-Darwin-x86_64.dmg

Смонтируйте образ и перетащите приложение в папку «Приложения».

Отредактируйте файл .zshrc (или создайте его в домашнем каталоге, если у вас его нет).

Добавьте строку:

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

Сохраните файл и введите команду:

source ~/.zshrc

5. Установить 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. Создайте временную копию phpize, которая использует библиотеки Xcode.

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

Отредактируйте копию phpize, которая теперь находится на вашем рабочем столе, и измените эту строку:

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

...к:

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

Сохраните измененный файл phpize.

7. Загрузите исходный код для нужной версии PHP — 7.3.9 для 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. Постройте расширение

~/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/

ПРИМЕЧАНИЕ: Я ожидаю, что make install не удастся из-за ошибок прав доступа, но в одном из других обсуждений, которые я нашел, предполагалось, что этот шаг необходим для подписи кода. Однако, похоже, это не имеет такого эффекта.

9. Отредактируйте файл /etc/php.ini

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

10. Тест с командой:

php --version

Результат

PHP Предупреждение: Запуск PHP: Невозможно загрузить динамическую библиотеку 'zip' (попытка: /usr/local/lib/php/extensions/zip (dlopen(/usr/local/lib/php/extensions/zip, 0x0009): dlopen(): файл не найден: /usr/local/lib/php/extensions/zip), /usr/local/lib/php/extensions/zip.so (dlopen(/usr/local/lib/php/extensions/zip.so, 0x0009): подпись кода в (/usr/local/lib/php/extensions/zip.so) недопустима для использования в процессе: сопоставленный файл не имеет cdhash, полностью неподписан? Код должен быть как минимум подписан ad-hoc.)) в Unknown в строке 0

решение1

Хорошее резюме. Мне не нужны были 2 и 3.

Затем для подписи

11. Вам необходимо запустить XCode и добавить учетную запись.

Добавить учетную запись в XCode

Скачать сертификат

12. В терминале проверьте certtool yналичие нового Signing Key. Он называется так:

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

Все еще находясь в терминале, подпишите файл (переместите его обратно, если его больше нет в папке сборки, в противном случае вы получите ошибку прав доступа)

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

Переместите его в целевую папку, запустите php --versionи получите следующее:

Предупреждение PHP: Запуск PHP: Невозможно загрузить динамическую библиотеку 'zip' (попытка: /usr/local/lib/php/extensions/zip (dlopen(/usr/local/lib/php/extensions/zip, 0x0009): dlopen(): файл не найден: /usr/local/lib/php/extensions/zip), /usr/local/lib/php/extensions/zip.so (dlopen(/usr/local/lib/php/extensions/zip.so, 0x0009): сигнатура кода в (/usr/local/lib/php/extensions/zip.so) недопустима для использования в процессе:Процесс отображения — это двоичный файл платформы, но отображаемый файл — это нет)) в Неизвестно в строке 0 PHP 7.3.11 (cli) (построено: 29 февр. 2020 02:50:36) ( NTS )

Хорошо, я поискал в интернете (проницательный ресурс), и найденные мной кусочки рисуют темную картину. Короче говоря:С Mac Os Catalina это больше невозможно.

Сообщение об ошибке тоже говорит об этом. Среда PHP подписана как системный компонент (бинарный файл платформы) и установлена ​​по умолчанию. Mac Os Catalina обеспечивает, чтобы двоичные файлы платформы загружали только код, который также является двоичным файлом платформы. Чего нельзя сделать, потому что вы не Apple.

Оставляем два возможных варианта. Отключение всей системы принудительной подписи, что является плохой идеей. Или настройка замены PHP полностью самостоятельно или с помощью homebrew.

Связанный контент