Debian 8에 아주 오래된 PHP 버전을 설치하고 싶습니다. 그것은 PHP 5.1.0입니다. 저 할 수 있어요아니요프로덕션 환경에서 사용하세요. 테스트 목적으로만 사용하세요. 그러나 컴파일하려고 하면 dom 모듈에 문제가 발생합니다. 몇 가지 조사 끝에 libxml2 버전 >= 2.9가 이전 PHP 버전에서 문제를 일으키는 것으로 나타났습니다. 이제 libxml2 2.8을 컴파일하고 어딘가에 저장한 다음 이를 사용하여 PHP 5.1을 컴파일하는 것이 가능한지 알고 싶습니다. 가능하다면 어떻게 하는지 알려주실 수 있나요?
답변1
확실히 할 수 있지만 성가실 수 있습니다. 새 라이브러리를 이전 라이브러리로 덮어쓰는 위험을 감수하고 싶지 않기 때문에 libxml 2.8을 ./configure --prefix=/path/to/prefix/
PHP 5.1.0(예: /opt/php510/
또는 )과 /usr/local/php510/
별도의 접두사( )에 붙였습니다 . libxml 2.8을 정적으로 구축하면 PHP와 조화를 이루고 프로그램을 시작할 때 "공유 라이브러리 지옥"을 피할 수 있는 것이 가장 좋습니다. 일반적으로 이는 --disable-shared --enable-static
구성 플래그를 추가하여 수행됩니다.
그런 다음 PHP 측에서 동일한 접두사를 사용하도록 구성하고 GCC 호출에 libxml 2.8 라이브러리 경로를 추가해야 합니다. autoconf를 사용하여 빌드한 경우( ./configure
대개 스크립트는 autoconf로 생성됨) 다음과 같은 것을 실행해야 합니다 CFLAGS=-I/opt/php510/include LDFLAGS=-L/opt/php510/lib ./configure --prefix=/opt/php510
.
.o
CFLAGS는 객체 파일 생성 시 gcc에 전달되는 매개변수를 포함하는 변수입니다 . 기본 목록(일반적으로 IIRC)을 보기 전에-I/path
헤더 파일("includes" 또는.h
파일) 을 찾도록 GCC에 지시합니다./path
/usr/include
/include
- LDFLAGS는 링커에 전달된 인수를 포함하는 변수입니다(일반적으로 파일을 실행 가능한 프로그램으로 결합하는 링커
ld
로 사용할 수도 있지만 autoconf는 두 가지 용도 모두에서 이 변수를 존중합니다). 의 링커 에게 알려주세요 .gcc
.o
-L/path
.a
.so
/path
libxml 2.8을 공유 라이브러리로 링크하면 이에 대해 아무 것도 알려주지 않기 libxml.so.2.8 not found
때문에 유사한 오류가 발생합니다 . 이것이 바로 제가 정적으로 링크된 버전을 사용하는 것을 권장하는 이유입니다./etc/ld.so.conf
/opt/php510/lib
이 작업을 수행하는 데 문제가 있거나 다른 빌드 시스템을 사용하는 경우 알려주시기 바랍니다.
제거된 함수에 대한 오래된 지원 중단 알림을 찾는 것이 때때로 어렵더라도, PHP를 엉망으로 만드는 libxml >= 2.9 버전의 모든 함수를 사용하도록 수정할 수도 있습니다.