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
'programing' 카테고리의 다른 글
| iOS 13에서 상태 표시줄 배경색과 텍스트 색을 변경하는 방법은 무엇입니까? (0) | 2023.08.30 |
|---|---|
| CSS의 부모로부터 자식 불투명도를 상속받고 싶지 않습니다. (0) | 2023.08.30 |
| 마지막 프레임에서 CSS3 애니메이션 중지 (0) | 2023.08.30 |
| 스택 추적 없이 PowerShell에서 '벌거벗은' 오류 메시지를 표시하려면 어떻게 해야 합니까? (0) | 2023.08.30 |
| PowerShell을 사용하여 .reg 파일을 실행하는 방법은 무엇입니까? (0) | 2023.08.30 |