MacOS 10.15.1에서 PHP로 zip 확장을 작동시키는 방법은 무엇입니까?

MacOS 10.15.1에서 PHP로 zip 확장을 작동시키는 방법은 무엇입니까?

여기와 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. Xcode의 라이브러리를 사용하는 phpize의 임시 복사본을 만듭니다.

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(MacOS 10.15.1 기준 7.3.9)에 대한 소스 코드를 다운로드하세요.

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. 따라서 0x0009): (/usr/local/lib/php/extensions/zip.so)의 코드 서명이 프로세스에서 사용하기에 유효하지 않습니다. 매핑된 파일에 cdhash가 없고 완전히 서명되지 않았습니까? 코드는 최소한 임시 서명되어야 합니다. .)) 0행의 알 수 없음

답변1

좋은 요약입니다. 2번과 3번은 필요 없었어요.

그럼 서명을 위해

11. XCode를 시작하고 계정을 추가해야 합니다.

XCode에 계정 추가

인증서 다운로드

12. 터미널에서 certtool y새 서명 키를 확인하세요. 이름은 다음과 같습니다.

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. 따라서 0x0009): (/usr/local/lib/php/extensions/zip.so)의 코드 서명이 프로세스에서 사용하기에 유효하지 않습니다.매핑 프로세스는 플랫폼 바이너리이지만 매핑된 파일은 ~ 아니다)) 0행의 알 수 없음 PHP 7.3.11 (cli) (빌드: 2020년 2월 29일 02:50:36) ( NTS )

응, 인터넷을 뒤졌어(통찰력 있는 자원), 그리고 내가 찾은 비트는 어두운 이미지를 그립니다. 간단히 말해서:Mac Os Catalina에서는 더 이상 불가능합니다.

오류 메시지에서도 이를 알 수 있습니다. Php 환경은 시스템 구성 요소(플랫폼 바이너리)로 서명되며 기본적으로 설치됩니다. Mac Os Catalina는 플랫폼 바이너리가 플랫폼 바이너리이기도 한 코드만 로드하도록 강제합니다. 당신은 Apple이 아니기 때문에 무엇을 할 수 없습니까?

두 가지 가능한 옵션을 남겨 둡니다. 시스템 전반에 걸쳐 전체 서명 시행을 비활성화하는 것은 나쁜 생각입니다. 또는 교체용 Php를 완전히 자체 빌드하거나 홈브류로 설정하세요.

관련 정보