2012-07-16 2 views
3

file_get_contents()에서 상대 경로를 인수로 사용하면 성능 이점이 있습니까? 성능 : file_get_contents(), 상대 URL 및 절대 URL

file_get_contents("../../mypage.php");

V/s의

file_get_contents("http://.../mypage.php");

file_get_contents()가 내부적으로 어떻게 처리합니까?

+1

에서 설명서를 확인할 수 있습니다. 하지만 아마 ... 마이크로 최적화 가능성이 가장 높습니다. –

+0

두 가지 예제는 두 개의 다른 래퍼를 보여줍니다. 첫 번째는 로컬 파일 시스템이고 두 번째는 HTTP입니다. – nickb

+1

확실히 하나는 PHP에서 처리하고 다른 하나는 처리하지 않겠습니까 ?? 나는 하나는 파싱되고 다른 하나는 파싱되지 않는다는 것을 의미한다. – Pete

답변

4

성능상의 이점이 있으면 PHP 엔진에 의존하지 않습니다. 경로는 사용자가 쿼리하는 웹 서버에 의해 처리됩니다.

그러나이 경우에는 로컬 fs에서 파일을 가져오고 두 번째 경우 전체 네트워크 스택 (http/tcp/ip)을 거쳐야하기 때문에 첫 번째 경우에 성능 이점이 있습니다. 응답을 얻으려면. 또한 첫 번째 경우는 PHP 소스를 반환하고 두 번째 경우는 PHP 엔진에 의해 처리되는 웹 페이지를 반환합니다.

명확한 예 :

file_get_contents('../../somefile.ext'); 

file_get_contents('/home/user/somefile.ext'); 

똑같이 빨리 할 것입니다.

5

"원격"파일이 로컬 서버에 있더라도 로컬 파일과 원격 파일을 사용하는 경우 성능 차이가 눈에 띄게 클 수 있습니다.

file_get_contents("../../mypage.php");과 같은 로컬/상대 파일을 사용하면 네트워크 트래픽을 사용할 필요없이 서버에 직접로드됩니다. 원격로드 (예 : file_get_contents("http://localhost/mypage.php"); 또는 file_get_contents("http://example.org/mypage.php");)의 경우 원격 호스트에 대한 연결이 설정됩니다 ("로컬"인 경우에도). 또한 로컬 읽기는 함수가 파일의 내용을 정확하게 반환하도록합니다. 원격 읽기는 원격 호스트가 반환하기 전에 내용을 렌더링합니다 (PHP 인 경우).

로컬/상대 파일의 성능은 기본적으로 원격 파일보다 빠릅니다. 연결 속도가 느린 네트워크에서 원격 파일을로드하려고 할 때 가장 눈에 띄는 성능 이점이 나타납니다.

file_get_contents()의 내부 구현하면 fread()에 대한 fopen() 및 루프를 작성하고 fclose()으로 폐쇄와 유사하다. 그런 다음 파일에있는 모든 내용의 문자열을 반환합니다. 기본적으로 훨씬 친숙한 "파일에서 읽기"인터페이스를 제공합니다.

방법에 대한 자세한 내용을 읽으려면 많은 내에있는 응용 프로그램이 경로 및 파일을 포함하는 방법에 의존 php.net/manual/en/function.file-get-contents.php