루트 디렉터리 외부에서 경로에 액세스하려면 기호 링크를 사용하세요.

루트 디렉터리 외부에서 경로에 액세스하려면 기호 링크를 사용하세요.

Apache 구성에 외부 경로를 추가해야 합니다. (httpd)

그래서 httpd 루트 폴더에 이 경로에 대한 심볼릭 링크를 만들었습니다. 경로는 /var/log/httpd/입니다(내 프로젝트에 로그를 직접 표시하고 싶습니다).

다음을 입력하여 브라우저를 통해 모든 경로에 액세스할 수 있습니다.http://127.0.0.1/httpd/

하지만 PHP 파일에서 해당 파일에 액세스하려고 하면 PHP에서 오류가 발생합니다.

암호:

function logInfo() {

$log_path = $_SERVER['DOCUMENT_ROOT'] . "/httpd/local.cmp-error_log";
$php_log = file_get_contents($log_path);

print_r ($php_log);

}

실수:

[Sun Jul 17 23:45:19.960292 2016] [:error] [pid 19451] [client 127.0.0.1:34718] PHP Warning:  file_get_contents(/home/txx/http/www/httpd/local.cmp-error_log): failed to open stream: Operation not permitted in /home/txx/http/www/base_home/config/sys.php on line 8

여기서 오류는 어디에 있습니까?

답변1

기본 아이디어는 문서 루트 외부의 파일에 액세스할 수 없다는 것입니다. 이것이 문서 루트의 요점입니다. Apache가 루트 디렉터리 외부의 기호 링크를 추적하는 것을 방지하기 위해 여러 가지 보호 장치가 마련되어 있습니다. 당신은해야합니다~할 수 있게 하다FollowSymlinks링크가 포함된 디렉터리에 있지만 파일을 찾아볼 수 있으면 이 작업이 완료된 것입니다.

또한 PHP가 문서 루트로 제한되지 않는지 확인해야 합니다. 바라보다이 스택 오버플로 질문: 수표에는 php.ini이 설정이 포함되어 있지 않습니다 open_basedir. 또 다른 잠재적인 제한 사항은 SELinux입니다. 시스템이 강화된 경우 PHP는 미리 정의된 특정 디렉터리로 제한될 수 있습니다. 특히 홈 디렉터리에 대한 액세스가 금지될 수 있습니다. 당신은 또한 볼 수 있습니다문서 루트 외부의 파일에 액세스.

웹 루트 외부의 콘텐츠에 액세스할 수 없거나 시스템 보안을 너무 많이 약화시키고 싶지 않은 경우 Apache 및 PHP가 다른 곳을 찾도록 하는 대신 웹 루트에 파일을 배치할 수 있습니다. ㅏ바인드 마운트마운트된 디렉터리의 보기를 /var/log/httpd생성합니다 . /var/www/dangerous/logs이 보기를 읽기 전용으로 만들 수 있으며 아마도 그렇게 해야 할 것입니다./var/log/httpd/var/www/dangerous/logs

관련 정보