2011-09-23 3 views
0

파일을 특수 헤더로 보내 강제 다운로드하려고합니다. 그렇게 할 때, 다운로드 스크립트를 통해 PDF 문서에 대한 URL 요청을 리디렉션해야합니다.file_get_contents() 및 stream_get_contents()에서 스트림을 열지 못했습니다.

$ seg3이라는 쿼리를 전달하기 전에 base64_encode()를 보낸 다음 파일을 요청할 때 base64_decode() 및 urlencoded()를 전달합니다.

내가 사용에서 살펴 보았다

,

if (ini_get('allow_url_fopen') == '1') 
{ 
    $data = file_get_contents(urlencode(base64_decode($seg3))); 
} 
else 
{ 
    $fp = fopen(urlencode(base64_decode($seg3)), 'rb'); 
    $data = stream_get_contents($fp); 
    fclose($fp); 
} 

그러나 모두 file_get_contents()stream_get_content()가 실패 : 나는 전송되는 URL을 덤프하면 그러나, 나는 복사 할 수 있습니다

fopen($URL): failed to open stream: HTTP request failed! HTTP/1.1 404 Not Found 

및 내 브라우저에 붙여넣고 파일을 엽니 다.

파일에 공백이있는 경우에만 발생하지만 urlencode()을 사용했는지 여부에 관계없이 오류가 발생합니다.

+1

'allow_url_fopen' 체크가 중복되어 보입니다. 'fopen'과'file_get_contents'는 모두 의존합니다. 비활성화 된 경우 'fopen'도 실패합니다. – hakre

답변

2

url이 404 오류를 반환하지만 일반 내용도 반환 할 수 있습니다. 따라서 브라우저가 일반 페이지를 표시 할 수 있지만 결과 코드로 인해이 함수는 실패합니다.

+0

URL은 괜찮습니다. 브라우저에 수동으로 입력하면 파일이 다운로드됩니다. stream_get_contents() 또는 file_get_contents()를 통해 PDF 문서의 이름에 공백이 있으면 _only_가 모두 실패합니다. – bafromca

+0

@BrettAlton : 이름에 공백이 있으면 이것이 유효한 URI가 아님을 의미합니다. URI의 공백을 인코딩해야합니다. – hakre

0

이 문제는 이미 해결되었지만 공백이 있으면 urlencode ($ url)이 문제를 해결할 수 있습니다.

+0

나는 그 문제를 아직 해결하지 못했다고 믿는다. 추신 : 나는 질문에 "공간에 파일이있을 때만 발생하는 것 같지만 아직 urlencode() 사용 여부에 관계없이 오류가 발생합니다." – bafromca

+0

CURL (으)로 전환 할 수있는 기회가 있으십니까? 헤더를 훨씬 더 잘 제어 할 수 있고 코드를 코드로 전환 한 후 오류 수가 크게 감소한 것으로 나타났습니다. –

관련 문제