2010-06-28 2 views
0

지난 주에 나는 이미지 파일을 가리키는 PHP 스크립트를 사용하여 이미지를 제공하기 위해 내 페이지 img src 값을 변환했습니다. 주된 이유는 파일과 데이터베이스 BLOB를 실제 소스로 사용할 수 있기 때문입니다.Image IIS의 PHP 스크립트에서 SRC가 일관되게 표시되지 않습니다.

사용자가 페이지로 이동할 때 이미지가 표시되거나 때로는 표시되지 않는 경우가 있습니다. 그렇지 않은 경우 페이지를 새로 고치고 \ 다시로드하면 이미지가 나타납니다. 이미지가 나타나지 않으면 사용자가 이미 이전에 이미 액세스 한 이미지입니다.

나는 혼란 스럽습니다. 다음,

<img src="../somedir/image_script.php?i=1234"> 

image_script.php 파일이 곳에서 이미지를 얻을 파악과 함께 완료 : 여기

는 img 태그입니다

header("Content-type: image/jpeg"); 
if($from_db){ 
    print $image_blob; 
} else { 
    $im = imagecreatefromjpeg($image_file); 
    imagejpeg($im,null,100); 
    imagedestroy($im) 
} 

내가 PHP 5.2.8을 사용하고 있습니다 FastCGI를 사용하는 IIS 6에서. image_script.php 파일이나 디렉토리에 캐시 헤더가 없습니다. 현재 이미지의 99.9 %가 파일 기반이므로 db 기반 이미지와 파일 기반 이미지 사이에 결과가 다른지는 알 수 없습니다 . 내 브라우저에서 직접 image_script.php로 이동하면 요청한 이미지 (i = ????) 100 %를 반환합니다.

> 이미지가 표시되는 이유는 무엇입니까? 및

b> PHP 스크립트에서 제공하는 이미지를 실제로 캐시하는 적절한 방법은 무엇입니까?

  • 스콧

답변

1

흠 (그들은 매우 정적). 확실히 말할 수는 없지만 imagecreatefromjpeg에서 가끔씩 메모리가 부족합니다. 이 경우 JPEG 데이터로 오류 메시지를 출력하고 절대 보지 못합니다.

덧붙여 말하자면, imagecreatefromjpeg/imagejpeg/imagedestroy를 거치지 않고 이미지 파일을 문자열로 잡고 그만 두는 것이 더 효율적입니까? JPEG 파일을 읽고, 내부 PHP 메모리 이미지를 만든 다음 JPEG (100 % 품질)로 다시 변환 한 다음 해당 데이터를 제공하는 것처럼 보입니다. JPEG 파일 데이터를 당신이 데이터베이스에서하는 것처럼 인쇄하십시오. 당신이 말하는, 이렇게하면 어떻게됩니까

...

... 
} else { 
    header ('Content-length: ' .filesize($image_file)); 
    readfile ($image_file); 
} 
+0

매트는 ReadFile을에 우수 제안. 나는 데이터베이스 부분을 추가하는 데 집중하여 파일 부분을 돌진했다. 훌륭한 테스트를 거친다 - 프로덕션 서버에서 핵심 문제가 수정되었는지 확인해야한다. – menkes

+0

차가움. 희망적으로 도움이 될 것입니다. 가끔씩 메모리 부족 현상이 발생한다면 readfile이 메모리 집약도가 적어지고 CPU가 더 가볍기 때문에 가끔씩 수행해야합니다. –

관련 문제