데비안 8에서 이전 PHP 버전과 종속성을 컴파일하는 방법은 무엇입니까? (이 예에서는 PHP 5.1.0)

데비안 8에서 이전 PHP 버전과 종속성을 컴파일하는 방법은 무엇입니까? (이 예에서는 PHP 5.1.0)

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.

  • .oCFLAGS는 객체 파일 생성 시 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 버전의 모든 함수를 사용하도록 수정할 수도 있습니다.

관련 정보