재인쇄: http://blog.sina.com.cn/s/blog_4ce89f200100twbl.html
http://blog.sina.com .cn/s/blog_815611fb0101cqgy.html
오늘 회사에서 소스코드 공부하다가 set_include_path(dirname(__FILE__)); 과 같은 코드줄을 보고 매우 당황했습니다. 그래서 바이두에 검색해서 php.net 매뉴얼도 봤는데, 아직도 무슨 일을 하는지 잘 이해가 안 됐어요.
우연히 또 다른 코드를 보고 영감을 받아 테스트해봤는데 예상대로였어요!
이제 요약하겠습니다.
먼저, set_include_path 함수는 스크립트에서 PHP.ini의 include_path를 동적으로 수정합니다.
이 include_path는 다음 include 및 require의 경로 범위로 제한하거나 미리 정의할 수 있습니다.
은 다음과 같습니다.
이 값을 설정하지 않으면 일부 완전한 경로를 작성해야 할 수도 있습니다.
include("123/test1.php");
include("123/test2.php " );
include("123/test3.php");
> 외부 파일은 많지만 set_include_path를 설정하면 ("123/") 대신 다음 코드를 사용할 수 있습니다.
set_include_path("123/");
include( "test1.php");
include("test2.php"); include("test3.php");
요구
("test4.php");
요구("test5.php");
?>
include 또는 require
작업이 실행되면 가져올 파일을 include_path에 지정된 경로에서 검색하기 때문입니다. 지금은 어떻게 해야 할지 모르겠습니다. 이것이 성능을 최적화할지는 모르겠지만 일부 코드를 절약할 수 있다는 것은 확실합니다. ㅎㅎ~ 그래서 처음에는 이 폴더에 파일 하나만 넣었기 때문에 넣어도 안 넣어도 똑같을 줄 알았습니다.
나중에 드디어 그 비밀을 발견했어요! 한심한 건 인터넷에 저 같은 글이 하나도 없다는 거에요... 같은 글이 계속해서 올라오고 있거든요.
그러면 이 함수는 하나의 폴더를 정의할 수 있을 뿐만 아니라 여러 폴더를 정의할 수도 있습니다. 아래와 같이 초기화 함수를 작성하고 싶습니다: function 초기화()
{
set_include_path(get_include_path(). PATH_SEPARATOR . "core/");
set_include_path(get_include_path().PATH_SEPARATOR . "app/");
set_include_path(get_include_path().PATH_SEPARATOR . "admin / ");
set_include_path(get_include_path().PATH_SEPARATOR . "lib/");
set_include_path(get_include_path().PATH_SEPARATOR . "include/");
set_include_path(get_include_path().PATH_SEPARATOR."data/");
set_include_path(get_include_path().PATH_SEPARATOR."cache/");
}
따라서 경로는 다음과 같습니다.
.;C:php5pear;core/;app/;admin/;lib/;include /; data/;cache/
야, 우리 앞에 또 하나 있는 걸 발견했어.;C:php5pear;사실, 아무것도 쓰지 않으면 무슨 일이 벌어지는 거지? , 먼저 include_path를 출력하세요. 기본값은 .;C:php5pear;입니다. 이를 통해 가져온 파일로 이동할 수 있습니다.
폴더가 더 많이 로드된다면 파일명을 직접 적어주면 됩니다!
근데 원래 질문처럼 우리 회사의 코드는 왜 다른 사람의 코드와 다른가요?
set_include_path(dirname (__FILE__) );
그러면 다른 폴더에서 파일을 가져올 때 지정한 폴더에서 파일을 찾을 수 없다는 오류가 보고됩니다.
먼저 다른 방법을 사용하여 출력해 보겠습니다.
set_include_path(dirname (__FILE__));
$include_value = ini_get('include_path');
echo $include_value;
? 🎜>
결과는 다음과 같습니다. D:AppServwww
test4.php 파일을 찾기 위해 www로 이동하면 오류가 보고되지 않습니다
include("test4.php");
하지만
include("test1.php");를 검색하면
은 오류를 보고합니다:
경고: include() [function.include]: 'test1 열기 실패 .php '를 D:AppServwwwtest.php온라인6에 포함하려면(include_path='D:AppServwww') 그리고
.;C:php5pear; 교체되었습니다. 그래서 우리가 사용할 때 한 폴더의 파일만 소개하는 것이 아니라면 앞에 get_include_path().PATH_SEPARATOR를 추가해야 합니다.
설명:
get_include_path()는 현재 include_path의 기본값을 가져오는 것입니다
마지막으로 다른 방법도 사용할 수 있다고 말하고 싶습니다. 가장 독창적인 방법입니다.
ini_set('include_path', '디렉터리 이름'); 또한 주의할 점은 두 가지입니다:
지정된
에서 필요한 파일을 찾을 수 없는 경우 디렉터리이며 현재 페이지 디렉터리에 해당 이름의 파일이 있으면 기본적으로 현재 디렉터리의 파일을 가져옵니다.