
여기와 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를 시작하고 계정을 추가해야 합니다.
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를 완전히 자체 빌드하거나 홈브류로 설정하세요.