programing

PHP 치명적 오류 필요한 파일을 열지 못했습니다.

iphone6s 2023. 8. 30. 21:26
반응형

PHP 치명적 오류 필요한 파일을 열지 못했습니다.

Apache에서 다음 오류가 발생합니다.

[Sat 19 23:10:50 2011] [warn] mod_fcgid: stderr: PHP 치명적 오류: require_once() [function.require]:필요한 '/common/configs/config_config.inc.inc.dll'('slot_path=')을(를) 열지 못했습니다.:/usr/share/sshare:/usr/share/sshare'), 158행의 /home/viapics1/public_viapics/common/config.inc.sys에 있음

저는 Apache 전문가는 아니지만 config.inc.php & config_templates.inc.php 파일이 있습니다.또한 common/configs/에 배치한 test.html 페이지로 이동하려고 시도했습니다. 그래서 현재 진행 중인 권한 문제는 없는 것 같습니다.또한 config_templates.inc.php에 대한 권한을 설정하여 모든 사용자에게 읽기, 쓰기 및 실행 권한을 부여합니다.이 시점에서 무엇을 해야 할지 모르겠습니다. /usr/share/php 디렉토리가 있는지 확인해보니 없었지만 yum install php를 실행했을 때 최신 디렉토리가 있다고 합니다.아이디어?

아파치와 관련된 질문이 아닙니다.PHP와 관련된 것도 아닙니다.이 오류를 이해하려면 가상 서버의 경로와 파일 시스템의 경로를 구분해야 합니다.

require연산자는 파일로 작업합니다. 은.

                          /common/configs/config_templates.inc.php

가상 HTTP 서버에만 존재하는 반면 파일 시스템에는 이러한 경로가 없습니다.올바른 파일 시스템 경로는 다음과 같습니다.

/home/viapics1/public_html/common/configs/config_templates.inc.php

어디에

/home/viapics1/public_html

파트를 Document 루트라고 하며 가상 세계와 실제 세계를 연결합니다.다행히도, 웹 서버는 일반적으로 PHP와 공유하는 구성 변수에 문서 루트를 가지고 있습니다.그래서 코드를 이렇게 바꾸면,

require_once $_SERVER['DOCUMENT_ROOT'].'/common/configs/config_templates.inc.php';

모든 디렉토리에 있는 모든 파일에서 작동합니다!

업데이트: 결국 저는 파일 시스템과 웹 서버에서 상대 경로와 절대 경로의 차이를 설명하는 기사를 썼는데, 이 기사는 문제를 자세히 설명하고 몇 가지 실용적인 해결책을 담고 있습니다.예를 들어, 명령줄에서 스크립트를 실행할 때 이러한 유용한 변수는 존재하지 않습니다.이 경우 "단일 진입점"이라고 하는 기술이 구조에 사용됩니다.자세한 내용은 위의 기사를 참고하시면 됩니다.

SELinux를 실행 중인 경우 다음을 사용하여 /homedir에서 읽을 수 있는 httpd 권한을 부여해야 할 수 있습니다.

 sudo setsebool httpd_read_user_content=1

달려.php -f /common/configs/config_templates.inc.php파일에서 PHP 구문의 유효성을 확인합니다.

당신은 PHP 상수로 그것을 고칠 수 있습니다.__DIR__

require_once __DIR__ . '/common/configs/config_templates.inc.php';

파일의 디렉터리입니다.포함 내부에서 사용할 경우 포함된 파일의 디렉터리가 반환됩니다.이 값은 dirname에 해당합니다.__FILE__이 디렉터리 이름은 루트 디렉터리가 아닌 경우 후행 슬래시가 없습니다.

만약 이것이 다른 사람들에게 도움이 될까봐, 저는 어젯밤에 이 오류를 유발하는 알려지지 않은 사례를 우연히 발견했습니다.특히 require_once 메서드를 사용하여 필요한 파일이 동일한 디렉터리에 있기 때문에 파일 이름만 지정하고 경로는 지정하지 않았습니다.

어느 순간 '필요한 파일 열기 실패' 오류가 발생하기 시작했습니다.잠시 머리를 쥐어뜯은 후 치명적인 오류 출력 바로 위에 '스트림을 열지 못했습니다:사용 권한이 거부되었습니다.' 그러나 더 중요한 것은 열려는 파일의 경로를 알려준다는 것입니다.그런 다음 파일의 복사본(아파치가 액세스할 수 없는 소유권을 가지고 있음)을 다른 곳에서도 PHP '포함' 검색 경로에 있고 파일을 선택할 폴더 앞에 있다는 사실을 확인했습니다.안 돼요!

당신은 php.ini에서 포함 경로를 설정할 수 있습니다.

include_path = ".:/home/viapics1/public_html"

저는 똑같은 문제를 겪고 있었고, 포함 경로를 세 번 확인했으며, 또한 pear가 설치되어 있고 모든 것이 정상으로 보이고 여전히 오류가 발생하고 있다는 것을 확인했습니다. 몇 시간 동안 이것을 보고 미친 듯이 본 후에 제 스크립트에 다음과 같은 문제가 있다는 것을 깨달았습니다.

include_once "../Mail.php";

다음 대신:

include_once ("../Mail.php");

네, 바보 같은 괄호가 빠졌지만, 제 스크립트의 이 줄에 이상한 오류가 생성되지 않았습니다.

언급URL : https://stackoverflow.com/questions/5364233/php-fatal-error-failed-opening-required-file

반응형