2012-06-05 6 views
2

이것은 약간 미친 듯합니다. 아마 서버 설정 문제 일 수도 있지만, 다른 호스트에서 시도해 보았습니다. 같은 문제가 발생했습니다. TEST.TXT이 내가 할 파일을 열 입니다 수없는 경우fread() : 제공된 인자가 유효한 스트림 리소스가 아닙니다.

나는 그것을 좁혀하고있는 test.txt 내가 제대로 다이를 얻을 수없는 경우

<?php 
$myFile = "test.txt"; 
$fh = fopen($myFile, 'r') || die("Couln't open file"); 
if ($fh == true) { 
     echo "file handle valid<br>"; 
} 
else { 
     echo "file handle invalid<br>"; 
} 
$theData = fread($fh, filesize($myFile)) || die("Couldn't read file"); 
echo $theData; 
fclose($fh)|| die("Couldn't close file"); 
?> 

모든 것을 배제하기 위해 테스트 스크립트를 만들었습니다

경고 : FREAD() : 공급 인수는 내가 확실하게 777에있는 test.txt 설정 한

에 유효한 스트림 자원 아닙니다

은 또한 단지

<?php 
$data = file_get_contents('test.txt'); 
echo $data; 
?> 

이 희망 누군가가 나를 위해이 되거 수 있습니다 잘 작동 한 번 확인,이를 썼다.

답변

1
$fh = fopen($myFile, 'r') || die("Couln't open file"); 

부울 식을 $fh으로 지정하면 프로세스에서 실제 파일 핸들이 손실됩니다. 위 라인을

($fh = fopen($myFile, 'r')) || die("Couln't open file"); 
1

번으로 변경해보십시오. PHP에서 operator precedence에 물 렸습니다. ||의 우선 순위가 =보다 높으므로 실제로는 논리 OR 결과를 $fh에 할당합니다.

$fh = fopen($myFile, 'r') or die("Couln't open file"); 
          ^^--- lower precedence logical or 

으로 변경하면 문제가 해결됩니다. fopen의 경우() 파일 핸들을 반환의 또는 실패 코드 proceedes합니다 - or

fopen()의 반환 값이 $fh에 할당 한 다음 or die() 평가된다. fopen이 실패하면 부울 false가 반환되고 die가 실행됩니다.

||을 사용하면 fopen의 값이 논 호출과 논리적으로 ORred되며 그 결과 (false)가 $ fh에 할당됩니다. .

관련 문제