2010-05-19 3 views
0

다음 코드를 사용하면 브라우저가 '이미지가 생성되거나 저장되지 않았습니다'라는 메시지를 표시합니다. 나는 당신에게 이미지의 위치가 있음을 확신한다. 그래서 if 문 내의 줄은 어떤 이유로 든 false를 반환하고 예 GD가 설치됩니다. 어떤 아이디어?PHP GD 이미지가 생성되지 않는 문제

if ($img = @imagecreatefromjpeg("/var/www/images/upload/1/1.jpg")) { 

      die("image was created"); 

    } else { 

     die ("image was not created or saved"); 

    } 

OK, 나는이 한 :

<?php 

error_reporting(E_ALL); 

if (fopen('/var/www/images/upload/1/1.jpg')) { 

    echo 'file was opened'; 

} else { 

    echo 'file was not opened'; 

} 


?> 

그것은 모든 시간 오픈되어 있지 않았던 파일을 반환을, 아파치 그룹은이 모든 폴더에 대한 모든 권한을 갖습니다. GD 또는 PHP가 다른 사용자 이름입니까?

테스트 스크립트에서 is_readable()을 수행 한 후 true를 반환합니다. 그밖에 또 다른 문제가있을 수 있습니까? 내가 스크립트를 실행할 때

그래서 ... :

error_reporting(E_ALL); 
imagecreatefromjpeg("/var/www/images/upload/1/1.jpg"); 
print_r(error_get_last()); 
echo ("hi"); 

을 나는 죽음의 흰색 화면을받을 수 있습니다. imagecreatefromjpeg 라인을 주석 처리하면 화면에 'hi'가 표시됩니다.

500k jpg 이미지에서 메모리 문제인지 확인하려고했지만 흰색 화면이 계속 나타납니다.

if 문 안에서 imagecreatefromjpeg를 실행하고 터미널을 통해 스크립트를 실행하면 imagecreatefromjpeg가 성공합니다! = \ 아직도 달리 작동하지 않는 이유를 여전히 알 수 없습니다. 편집 : 내 브라우저를 통해이 정확한 스크립트를 실행도 성공입니다.

+0

@ 연산자를 제거하면 해당 줄에서 실제 오류 메시지를받을 수 있습니까?GD에서로드하지 않을 때 메모리를 부족하게 만들려고 할 때 메모리가 부족할 수도 있습니다. – Paul

+0

오류 제거를 제거하면 오류 메시지는 무엇입니까? – erisco

+0

오류 메시지가 없습니다. – ThinkingInBits

답변

4

분명히 $ img의 값이 true로 평가되지 않습니다.

죄송합니다. 그건 너무 많이 저항 할 수밖에 없었습니다. 내 요점은, 귀하의 게시물에 다른 모든 쓰레기가 필요 없다는 것입니다.

프로세스가 파일을 읽을 수없는 경우 이미지를 만들 수 없습니다. 읽기 위해 파일을 열어보십시오. 또한 함수 호출 (@) 앞에서 오류 억제를 제거하십시오. 그런 다음 error_reporting을 E_ALL로, display_errors를 on으로 설정하십시오.

업데이트 : fopen이 실패하면 php를 실행하는 사용자에게 파일에 대한 읽기 권한이 없습니다. fopen 및 fwrite를 사용하여/tmp에 파일을 작성하여 php/apache 프로세스가 실행중인 사용자를 확인하십시오. 그런 다음 사용자에게 읽기 권한이 있는지 확인하십시오. 또는 o + r에 파일을 chmoding하여 모든 사용자의 읽기 액세스가 문제를 해결하는지 확인할 수 있습니다.

+0

is_readable()이 true를 반환합니다. – ThinkingInBits

0

스크립트가 /var/www/images/upload/1/1.jpg에 액세스 할 수있는 권한이 있는지 확인하십시오 (웹 서버가 CLI 스크립트가 아니라고 가정 할 때) 다른 사용자로 실행 중일 수 있습니다.

+0

내 apache 사용자가 전체/var/www/디렉토리에 대한 사용 권한을 가진 www-data 그룹에 있고 그 하위 폴더가 – ThinkingInBits

0

아마도 파일에 액세스 할 수있는 권한이 없습니다.

localhost가 var/www에 매핑되는 경우 해당 파일을 호출 할 필요가 없습니다. PHP 파일의 경로를 기준으로 사용하십시오.

+0

이므로 테스트를 위해 절대 경로를 호출 해 보았습니다. 상대 경로도 작동하지 않았습니다. – ThinkingInBits

+0

@ThinkingInBits : 예,하지만 권한 문제가 발생했을 수 있습니다. 1) @을 제거하고 무엇이 오류 메시지인지 확인하십시오 2) 파일의 사용 권한을 확인하십시오 3) 브라우저에서 파일에 액세스하면 어떻게됩니까? 너는 그것을 볼 수 있니? – nico

+0

예, 브라우저에서 이미지를 볼 수 있습니다. 권한이 755 – ThinkingInBits

0

error_get_last() (PHP> = 5.2) 또는 $ php_errormsg를 사용하여 img *() 함수가 반환하는 것을 확인하십시오.

파일의 읽기 가능 여부를 확인하는 가장 좋은 방법은 fopen이 아니라 is_readable()입니다.

+0

입니다. is_readable()이 true를 반환합니다. – ThinkingInBits

+0

파일을 읽을 수 있으면 .jpg가 손상되었거나 .jpg가 아니므로 imagecreatefromjpeg()가 실패하게됩니다. error_get_last() 응답 확인 –

+0

이 스크립트는 내 localhost에서 제대로 작동합니다. jpg에는 아무런 문제가 없습니다. – ThinkingInBits