2009-12-01 7 views
4

나는 PHP 5.3.1 소스 트리를 샅샅이 뒤지고 있었으며 main.c을 살펴보기로 결정했습니다. PHP가 실행될 때마다 배후에서 무슨 일이 일어나고 있는지 궁금했습니다.PHP의 main.c는 어떻게 실행합니까?

C 또는 C++ 프로그램이 main이라는 함수에서 실행되기 시작했지만 main.c에 해당 이름의 함수가 표시되지 않았습니다.

PHP 코드는 실제로 실행을 시작합니까? (명령 줄 대 MOD_PHP 대 CGI는 어떻게 다른가요?) 그리고 main.c 파일에 w/r/t가 없으면 무엇이 있습니까? 다음 번에이 질문에 스스로 대답 하시겠습니까?

답변

2

인터넷에서 그런 종류의 질문에 대한 명확한 답을 본 적이 없다고 생각하지만 책 Extending and Embedding PHP의 일부 단락에 관심이있을 수 있습니다.이 부분은 아마도 writting에 관한 참고서 일 것입니다 PHP 확장 기능 및 PHP 엔진의 내부 기능을 제공합니다. 제 1 장을 인용

문장의 흥미로운 부부는 "PHP 라이프 사이클은"입니다 :

일반적인 웹 서버 환경에서

, 명시 적으로 PHP 인터프리터를 시작하지 않을 것이다; 아파치 또는 다른 웹 필요에 따라 PHP 및 프로세스 스크립트를로드 서버 ...

그리고, 바로 뒤에 시작합니다 :

을 ... CLI를 바이너리 실제로 를 작동 똑같은 방식으로. PHP 프롬프트에 입력 된 은 을 시작하여 을 단일 요청을 처리하도록 설계된 미니 웹 서버로 작동하는 "명령 줄 API"를 시작합니다.

당신은 아마 당신이 좀 더 읽어보세요하려는 경우, Google books에 일부 페이지를 찾을 수 있습니다

...

+0

Safari에서 책을 찾아보십시오. 감사합니다. 아주 재미있는 독서. –

+0

@Alan : 실제로 책을 가지고 읽었습니다. 그게 바로 제가 지적한 이유입니다 ^^ (사파리에 대해서는 한번도 확인하지 않았고 어느 날 시도해야합니다 ...) –

2

그것은 C/C의 진입 점으로 '주'에 대한 일반적입니다 ++ , 표준은 특별히 그것을 다루고 있지만, 유일한 가능성은 아닙니다 (표준에서 요구하는 유일한 것입니다). 런타임 라이브러리가 애플리케이션을 제어하기 전에 설정해야하기 때문에 실제로 처리되는 방식은 구현에 따라 다릅니다. 최종 답변에 대한 링커 설정을 확인하십시오.

php_module_startup 당신이 원하는 것처럼 보일 수도 있습니다. 실제 엔트리 포인트에서 결국 호출 될 수 있습니다.

3

main() 함수는 main.c라는 파일에있을 필요는 없습니다. PHP 명령 행 인터페이스 main()php_cli.c (642 행)입니다.

+0

PHP가 명령 행을 통해 호출되는 경우. 예를 들어 PHP가 mod_php를 통해 호출 될 때 진입 점이 다르다면 놀랄 일이 아닙니다. –

+0

물론, mod_php는 공유 객체/DLL /로 웹 서버에 의해로드 될 것이고 웹 서버는 그 모듈에서 호출하고자하는 함수를 호출 할 것입니다. 하지만 PHP는 자체 프로그램으로 실행되지 않고 웹 서버의 일부로 실행됩니다. – sth

관련 문제