2013-06-17 4 views
1

나는 Tumblrs를 홍보하는 데 사용 된 웹 사이트에서 일하고 있습니다. Tumblr 아바타를 저장하고 불쾌한 Tumblr API 호출을 줄일 수 있도록 처음으로 PHP 이미지 서버 스크립트를 만들었습니다.깨진 이미지를 반환하는 PHP 이미지 서버 스크립트

나는 지금 사이트에서 작업하고 있지만 이상한 결함이 있습니다. 페이지가 열리면 거의 항상 1 ~ 2 개의 아바타가 깨진 이미지로 표시됩니다. 행동

페이지 : http://www.tumblrlink.com/

나는 그것이 일반적으로 깨진 이미지의 다른 세트를 보여줍니다 페이지를 새로 고침하기 때문에, 특정 계정에 특정하지 알고있다.

이것은 내가 만든 이미지 서버 스크립트입니다 : 당신이 링크를 볼 수

<?php 

if (!isset($_GET['uri'])) 
    exit(); 

$url = urldecode($_GET['uri']); 

// Check to make sure API URL is passed. 
if (strpos($url,'http://api.tumblr.com/') === FALSE) 
    exit(); 

// Get the User's Tumblr "Short Name" 
$shortName = $url; 
$shortName = str_replace('http://api.tumblr.com/v2/blog/','',$shortName); 
$shortName = str_replace('/avatar/40','',$shortName); 

$avatarLoc = '../../media/avatars/' . $shortName . '.png'; 

// Save the Avatar to the server for use. 
if (!file_exists($avatarLoc)) { 
    copy($url, $avatarLoc); 
} 

// Write out the contents of the Avatar Image. 
header("Content-Type: image/png"); 
header("Content-Length: " . filesize($avatarLoc)); 
readfile($avatarLoc); 

exit(); 

?> 

는 이제 이미지가 저장되고 성공적으로 제공 ...하지만 시간의 90 %가된다.

여기서 프로그래밍 된 타이밍 문제가 있습니까? 아니면이 문제가 서버/환경에서 발생할 수 있습니까? 어떤 도움을 주시면 감사하겠습니다.

+1

우리가 제공 할 수있는 대답은 순수한 추측입니다. 문제를 찾는 가장 좋은 방법은 프로세스의 모든 단계를 기록하도록 코드를 업데이트하여 언제 어디에서 오류가 발생하는지 확인할 수 있도록하는 것입니다. 그런 다음 공통 요소를 식별하지 못한 경우 로그를 참조 할 수 있습니다. –

+0

file_get_contents 또는 cURL을 사용하여 이미지 데이터를 가져오고 wassup을 봅니다. –

+0

@GeorgeCummins 서버에 대한 액세스없이이 문제를 파악할 수있는 방법이 없다는 것을 알고 있습니다. 나는 커뮤니티의 누군가가'readfile()'함수와 비슷한 경험을 갖고 있으며 해결 방법을 알고 있는지 궁금했다. – TbWill4321

답변

1

당신은 PNG를 강제하고 있습니다. 항상 png라고 확신합니까? 헤더 호출을 주석 처리하고 작동하는지 확인하십시오.

+0

콘텐츠 형식을 설정해야합니다. 기본적으로 출력은 text/html로 보내 지므로 적절한 내용 유형없이 이진 데이터를 보내면 내용이 손상 될 수 있습니다. –

+0

Tumblr API는 항상 PNG를 제공합니다. 나는 당신의 제안을 확인하기 위해 그것을 주석 처리하려고했지만 불행히도 여전히 발생했습니다. 어떤 아이디어? – TbWill4321

0

해결책이 아니기 때문에 답변을 덧붙일 수 있으면 좋겠지 만 제 담당자가 충분히 높지는 않습니다. 어쨌든 다음은 디버깅을 시도하는 몇 가지 사항입니다.

  1. 이 페이지에는 많은 부분이 있습니다. serve.php를 통해 일련의 이미지 만로드하는 별도의 페이지를 만들고 동일한 문제가 있는지 확인하려고합니다.

  2. 이 파일을 로컬에 저장하고 있습니다. 서버에 저장 한 파일을보고 모든 파일에 실제 이미지가 포함되어 있는지 또는 일부가 비어 있거나 렌더링되지 않는지 확인하십시오.

  3. 파일이 웹에서 액세스 할 수있는 디렉토리에 저장되는 경우 스크립트를 이미지로 직접 리디렉션하도록하십시오. 분명히 이런 식으로 살아 가기를 원하지 않지만 PHP 스크립트가 이미지 파일을 읽고 제공하는 데 문제가 있는지 파악하는 데 도움이 될 수 있습니다.

위시 나는 더 많은 도움이 될 수 있습니다.

0

처음에 나는 당신이 묘사 한 문제를 가지고 있었지만 잠시 후에 그것은 사라져 버렸고 이제는 모든 사진이로드됩니다. 캐시를 지우셨습니까?

+0

완벽한 대안을 찾을 수있었습니다. 나는 결코 그것을 고정시키지 못했습니다. 그래서 이제는 페이지 자체가 save/serve를 호출하기 전에 파일을 검사합니다. 나는 그 질문을 마무리 할 것이다. – TbWill4321

0

간단히 save/serve 스크립트를 자주 호출하지 않아서이 문제가 해결되었으므로이 시점에서는 문제가되지 않을 정도로 희귀합니다.

관련 문제