문제

나는 거대하고 구식 (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)

그래서, 진짜, 유용하고 의미있는 오류 메시지 ;-)

다른 팁

@ 사인을 제거하십시오.

@ 부호는 오류 메시지를 억제하므로 함수가 일반적으로 제공하는 오류를 억제합니다.

제거하십시오 오류 억제기.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top