PHP 파일 공개 실패의 이유를 출력하는 방법
-
05-07-2019 - |
문제
나는 거대하고 구식 (2001 년경) PHP 웹 서비스를 디버깅하려고 노력하고 있으며 파일이 열린 실패를 겪고 있습니다. Fopen 호출은 포함 된 모듈에 있으며 발신자는 파일을 열 수 없지만 로그인하는 이유는 없습니다.
실제로 열려있는 코드는 다음과 같습니다.
// Read the file
if (!($fp = @fopen($fileName, 'rb'))) {
$errStr = "Failed to open '{$fileName}' for read.";
break; // try-block
}
Fopen이 왜 실패했는지 어떻게 알 수 있습니까?
해결책
이미 큰 대답이 주어졌습니다 @ 운영자, 그러나 여기에 귀하 또는 다른 사람에게 유용 할 수있는 몇 가지 더 많은 정보가 있습니다.
- 디버깅 목적으로 비활성화 해야하는 경우
@ operator
, 당신은 그것을 설치할 수 있습니다 비명 확장 -- 또한보십시오 매뉴얼 -- 잘 설계 / 코딩되지 않은 오래된 응용 프로그램을 유지할 때 정말 유용합니다 ^^ - PHP 구성에 따라 (만약
track_errors
옵션이 활성화 됨), 당신은 사용할 수 있습니다$php_errormsg
마지막 오류 메시지를 얻으려면.
이 코드를 고려 :
// This file doesn't exist
if (!@fopen('/tmp/non-existant-file.txt', 'r')) {
var_dump($php_errormsg);
}
// My Apache server doesn't have the right to read this file
if (!@fopen('/tmp/vboxdrv-Module.symvers', 'w')) {
var_dump($php_errormsg);
}
당신은 이것을 얻을 것입니다 :
string 'fopen(/tmp/non-existant-file.txt) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: No such file or directory' (length=129)
string 'fopen(/tmp/vboxdrv-Module.symvers) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: Permission denied' (length=122)
그래서, 진짜, 유용하고 의미있는 오류 메시지 ;-)
다른 팁
@ 사인을 제거하십시오.
@ 부호는 오류 메시지를 억제하므로 함수가 일반적으로 제공하는 오류를 억제합니다.
제거하십시오 오류 억제기.
제휴하지 않습니다 StackOverflow