2012-02-29 5 views
1

웹 사용자가 컴퓨터에서 업로드하지 않고 URL에서 프로필 이미지를 업로드 할 수있는 기능을 제공하고 있습니다. 여기 장난 꾸러기 사용자가 거대한 파일의 URL을 제공하거나 /dev/random에 꼬리가 달린 일부 URL 일 수 있지만 매우 드물게 발생할 수 있습니다. 내 서버로 완전히 가져 오기 전에 파일 크기를 결정할 수있는 방법이 있습니까?PHP 컬을 사용하여 가져 오기 전에 파일 크기를 결정하는 방법

+0

정확한 복제본 : http://stackoverflow.com/questions/2602612/php-remote-file-size-without-downloading-file –

+0

@Topener : 주제가 OP가 ** 원본 **을 해결하는 데 도움이되지 않습니다. 발행물. * 때로는 전체 질문 *을 읽을 가치가 있습니다. – zerkms

+0

@Topener 나는 내가 검색하는 데 사용해야하는 것을 결코 알지 못했습니다. –

답변

0

서버의 응답에서 Content-Length 헤더를 확인하십시오.

+0

응답에 그러한 헤더가 없으면 어떻게 될까요? – zerkms

+2

그들이'Content-Length : 123'을 제공했지만 실제로 그보다 더 많이 보냈다면 어떻게 될까요? – rodneyrehm

1

원격 파일을 가져 오기 위해 수행하는 작업에 따라 수행 할 수있는 여러 가지 작업이 있습니다.

  • file_get_contents('http://foobar.com')은 매우 편리하지만 가장 적은 제어량을 제공합니다. Content-Length 헤더를 잡으려고 HEAD 요청을 할 수있는 방법을 모르겠습니다.
  • fsockopen()은 HTTPS를 다룰 때 울게 만듭니다.
  • 곱슬 머리입니다. 그것은 강력한만큼이나 추악합니다. HTTP Pecl (기본적으로 컬링)과 같은 다른 옵션도 있습니다.

    1. 리소스가 Content-Length 헤더를 제공하는지 확인하십시오. 이것에 대한 HEAD 요청을하십시오. 일부 서버/서비스는 HEAD 요청을 처리하지 않습니다. 그런 다음 응답 헤더를 얻은 후 GET 요청을하고 전송을 중단합니다.
    2. (1) 결과가 나온 경우 사용자가 제한 한도를 초과하는지 확인하십시오. 그렇다면 중단하십시오.
    3. curl을 사용하여 리소스를 가져옵니다. 볼륨이 제한을 초과하는 경우 다운로드를 중단 할 수 있으려면 CURLOPT_READFUNCTION을보십시오. 또한 (1) 결과가 스푸핑되었을 수 있으므로이 결과를 확인해야합니다. 당신이 $ yourLimit 바이트를 다운로드 한 HEAD와 콘텐츠 길이를 취득하는 1 개 GET 요청뿐만 아니라 다른 GET 요청을 한거야 최악의 경우

.

관련 문제