2011-09-26 3 views
2

PHP cURL 모듈을 사용하여 HTTP 헤더를 통해 원격 파일의 타임 스탬프를 추출합니다. 나는 CURLOPT_FILETIME 상수를 사용하여 수정 타임 스탬프를 잡을 수있었습니다. 물론 원격 파일이 내용을 다운로드하지 않고 변경되었는지 확인하기 위해이 작업을 수행하고 있습니다.원격 파일이 변경되었는지 확인하십시오.

$ch = curl_init($url); /* create URL handler */ 
curl_setopt($ch, CURLOPT_NOBODY, TRUE); /* don't retrieve body contents */ 
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, TRUE); /* follow redirects */ 
curl_setopt($ch, CURLOPT_HEADER, FALSE); /* retrieve last modification time */ 
curl_setopt($ch, CURLOPT_FILETIME, TRUE); /* get timestamp */ 
$res = curl_exec($ch); 
$timestamp = curl_getinfo($ch, CURLINFO_FILETIME); 
curl_close($ch); 

원격 파일이 변경되었는지 확인하는 가장 좋은 방법은 무엇입니까? 타임 스탬프 확인 만해야합니까? 아니면 내 마음에 안 왔어 다른 영리한 옵션이 있습니다!

+0

ftp 액세스 권한이있는 경우 실제 파일 수정 시간을 확인할 수 있습니다. –

+0

왜 리디렉션을 따르십니까? 파일 크기를 비교하면 변경 사항을 찾는 데 도움이 될 수 있습니다. ETAG 헤더 값이있을 수 있습니다. – hakre

+0

끝에 이미지 파일이 있기 때문에 리디렉션을 따르고 사용자가 단축 링크를 제공 할 수 있습니다. OTOH, ETAG가 제공 될 수 있지만 항상 그런 것은 아닙니다. 그리고 분명히 파일 크기도 검사 할 것입니다. – aL3xa

답변

3

접근 방법이 Last-Modified 시간 값을 찾는 것이 좋습니다. (CURLINFO_FILETIME은 -1 반환에주의해야합니다. 즉, Last-Modified 헤더 값이 확인되지 않았 음을 의미합니다.)

반환 된 시간을 저장하고 나중에 변경 사항이 있는지 확인합니다. 변경된 경우 Curl을 통해 새 파일을 가져옵니다.

또 다른 옵션은 ETag 및 Last-Modified 헤더를 저장 한 다음 조건부 요청을 사용하여 이미지를 다시 가져 오는 것입니다. 이것은 더 복잡하지만 매번 추가 HEAD 요청을 저장합니다. 이 SO 질문에 대한 자세한 내용은 if-modified-since vs if-none-match을 참조하십시오.

+0

-1은 헤더가 설정되지 않았다는 것을 지적 해 주셔서 감사합니다! –

관련 문제