2012-12-02 1 views
0

를 반환 이런 일이 발생하는 이유PHP is_readable()가이 같은 스크립트를 사용하고 잘못된 값을

Warning: fread() [function.fread]: Length parameter must be greater than 0 
in /nfs/c10/h02/mnt/161920/domains/example.com/html/my-folder/file.php on line 16 

내가 궁금하네요. 일부 서버에서만 발생하며 다른 서버에서는 문제가 없습니다. fread을 성공적으로 사용하기위한 요구 사항은 무엇입니까? 해당 위치에 파일이 있습니다.

+2

파일을 읽은 후에 파일을 닫지 않는 해킹 대신 file_get_contents()를 찾습니다. –

+2

'filesize ($ path)'값이 0이거나 0보다 작습니다. 값을 인쇄하여 확인하십시오. –

답변

1

는, 파일 크기는 아마 0

입니다 어느 제안 file_get_contents를 사용하거나 당신이 절대적으로 fread()를 사용/필요를 원한다면, 당신은 5.3+ PHP에서 다음과 주위에 얻을 수 :

$path = dirname(__FILE__)."/folder/file.ext" 
if(is_readable($path)){ 
    $file = fread(fopen($path,"r"), filesize($path) ?: 1); 
}else{ 
    //do something else if file can't be opened 
} 

?: 1에 주목하십시오. ternary operator이라고합니다. 즉, 파일 크기가 true (즉, 0보다 큽니다)이거나 1을 사용하면 파일 크기를 사용하십시오.

확실히 모범 사례는 아니지만 지적 해주십시오.

+0

그레이트 :) 정말 고마워! 이제 나는 그것으로 무엇이 진행되고 있는지보고,이 트릭에 대해 당신에게 감사드립니다. – Atadj

+0

[PHP 삼자 연산자] (http://php.net/manual/en/language.operators.comparison.php#language.operators.comparison.ternary)에서 읽으십시오. 멋진 기능입니다! – jmlnik

+0

예, 알고 있습니다 - 자주 사용하지만'file_get_contents'를 사용하면'? : 1'로 표시됩니다. 안전하지 않은 치트처럼 보입니다 ((1) 파일이 0이면 파일 1 바이트를주는 것이 안전합니까? (scandir)을하고 있기 때문에 숨겨진 파일을 읽어 들이지 않는 한 내 파일에 0이 없다.'.'와'..' 만 제외시킨다. , (3) 파일이 비어 있더라도 - 항상 어떤 크기를 가지고 있지 않아야 하는가?). – Atadj

1

파일이 비어 있으면 읽을 수 있습니다. 하지만 fread으로 0 바이트를 읽을 수는 없습니다. 당신은 또한 PHP의 file_get_contents 기능을 사용할 수 있습니다 당신의 유스 케이스를 들어 0

빈 파일 == 파일 크기. 모두가 말한 것처럼

+0

그레이트 :) 정말 고마워! 이제 나는 그 일이 무엇인지보고있다. – Atadj

관련 문제