drupal에 기사와 관련된 각각의 PDF 파일을 표시하려고합니다. 브라우저에 pdf가 렌더링되어 있으면 직접 열어야합니다. 기존 대화 상자가 표시되지 않으면 '열기', '저장'및 '취소'로 사용자가 옵션 중에서 선택할 수 있도록합니다. PDF는 이미지 및 파일과 같은 모든 리소스에 액세스 할 수있는 공개 웹 서버에 있습니다.올바른 경로로 원격 pdf 파일 열기 404
내가 달성하기 위해 사용하고 코드는 다음과 같습니다 :
$pdf_file_name = "http://mysite.com/valid-pdf-file.pdf";
drupal_set_header('Content-type: application/pdf');
drupal_set_header('Content-Disposition: inline; filename="' . $pdf_file_name
. '"');
$fp = fopen($pdf_file_name, "r");
$file_open_timeout = 60;
if ($fp) {
stream_set_timeout($fp, $file_open_timeout);
while (!feof($fp)) {
echo fread($fp, 65536);
flush();
}
fclose($fp);
}
else {
watchdog("pdf logging", "Could not open the file " . $pdf_file_name);
}
이 코드는 (내가 작은 것들 10메가바이트 개까지 있었다 가정) 내 초기 PDF 파일의 일부 근무하지만, 많은 실패했습니다 다른 다음과 같은 오류 메시지가있는 파일 :
는 fopen (http://mysite.com/valid-pdf-file.pdf는) : HTTP 요청에 실패했습니다 : 스트림을 열지 못했습니다! HTTP/1.1 404를 찾을 수 없음
브라우저를 통해 해당 파일 http://mysite.com/valid-pdf-file.pdf의 경로를 열면 오류 메시지없이 파일이 직접 렌더링됩니다. 따라서 나는 위의 코드에서 일부 검색을 기반으로 stream_set_timeout
을 시도했지만 여전히 존재하는 파일에도 불구하고 404 오류를 지나칠 수는 없습니다. 여기
"http://fileservername.com/resources/sitename/2013/03/20/bed6e3de-41bf-4bf9-bed8-d21508eaa8ca/Trouble --Cloud 제요의 optimized.pdf"
또한 URL이 파일 경로를 인코딩하지만 테스트결과도 다르지 않았다. fopen 및 readfile에 urlencode($pdf_file_name)
을 입력했습니다.
더 나아가 이러한 골치 아픈 pdf 파일의 파일/폴더 권한이 제대로 열리는 것과 다르지 만 다른 점이 없음을 확인했습니다.
ob_clean();
flush();
readfile($pdf_file_name);
exit();
취급이 파일에 대한 또 다른 코드는 다른 사람이 잘 작동하는 동안 번잡 한 PDF 파일 (404)를 반환 동일한 결과를했다. 이 기능 또는 더 나은 구현을 위해 무엇을 놓치고 있는지에 대한 제안은 크게 감사하겠습니다.
실제 URL을 표시하십시오. 문제는 파일 이름에있는 것입니다. 404 오류는 매우 명확합니다. 요청한 위치에 문제가 있습니다. 브라우저는 사용자 입력을 올바르게 URL 인코딩하는 방법을 연구 할 때 훨씬 지능적입니다. 따라서 URL 인코딩이 해결책 일 수 있지만 실제로로드하려는 실제 URL을 볼 필요가 있습니다 (원하는 경우 도메인 이름을 난독화할 수 있음).) – DaveRandom
URL 래퍼가 fopen (http://www.php.net/manual/en/filesystem.configuration.php#ini.allow-url-fopen)에 사용 가능하게 설정되어 있는지 확인하고 서버의 DNS 확인 제대로 작동하는지 - 간단한 명령 줄을 wget http : //pathto.pdf/file 작동합니까? – shannonman
@shannonman 이러한 문제로 인해 HTTP 404가 발생하지 않습니다. URL 래퍼를 사용하지 않으면 오류가 표시되며 DNS가 작동하지 않으면 원격 서버에 연결하여 404 오류가 발생하지 않습니다 응답. – DaveRandom