我从本地服务器下载pdf时遇到问题。我有一个文档文件的URL(例如:\ 10.10.10.10 \ directory \ 123_ABC.pdf)。我必须制作从url下载文件并在网络浏览器中显示的php功能。对此目录的访问受到保护(用户名和密码)。我不知道如何下载这个文件。也许卷曲?这可能吗?
我试过了:
$login = 'LOGIN';
$password = 'PASSOWRD';
$host = "http://10.10.10.10/directory/123_ABC.pdf";
$CurlConnect = curl_init();
curl_setopt($CurlConnect, CURLOPT_URL, $host);
curl_setopt($CurlConnect, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($CurlConnect, CURLOPT_USERPWD, $login.':'.$password);
$Result = curl_exec($CurlConnect);
header('Cache-Control: public');
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="new.pdf"');
header('Content-Length: '.strlen($Result));
v($Result) ;
文件new.pdf显示在浏览器中,但已损坏。
编辑: 我解决了问题。我无法下载pdf文件,因为我使用了错误的协议。 这段代码是正确的:
$login = 'LOGIN';
$password = 'PASSOWRD';
$host = "ftp://10.10.10.10/directory/123_ABC.pdf";
$CurlConnect = curl_init();
curl_setopt($CurlConnect, CURLOPT_URL, $host);
curl_setopt($CurlConnect, CURLOPT_RETURNTRANSFER, 1 );
curl_setopt($CurlConnect, CURLOPT_USERPWD, $login.':'.$password);
$Result = curl_exec($CurlConnect);
curl_close ($ch);
header('Cache-Control: public');
header('Content-type: application/pdf');
header('Content-Disposition: attachment; filename="new.pdf"');
header('Content-Length: '.strlen($Result));
echo $Result;
答案 0 :(得分:0)
引用:The file new.pdf is displayed in the browser, but it is broken
- 这是不正确的,pdf文件没有显示在浏览器中,但是因为你发送了标题header('Content-Disposition: attachment; filename="new.pdf"');
,告诉浏览器你发送的是pdf文件,浏览器尝试将您注销的错误页面呈现为pdf,并且由于HTML(您的注销错误页面可能包含)和PDF是2种完全不同的格式,因此pdf解析器无法呈现它(最大的区别在于HTML是基于文本的,PDF是二进制格式)
如何登录取决于服务器使用的登录系统。 curl内置了对几种类型的支持,即HTTP Basic authentication
和HTTP Digest authentication
以及HTTP NTLM authentication
,其中大部分是标准化的,但没有广泛使用。最有可能的是,他们使用自定义登录方案,您必须自己实施。最常见的方案包括将用户名和密码发送到登录页面,然后登录页面在cookie中提供session id
,您必须使用该cookie访问需要您登录的所有页面。例如,stackoverflow.com,wikipedia.com和facebook.com都有自己的cookie-session-id方案版本 - 你必须找出服务器使用的登录方案,之后任何人都可以告诉你如何如果你很幸运,他们会使用内置的(稀有)方案中的一种进行卷曲,在这种情况下你必须使用CURLOPT_HTTPAUTH和CURLOPT_USERPWD来登录..用于登录的方法最好通过研究登录页面来推断。当您进入浏览器的登录页面时,您会获得哪些http标题和正文?在谷歌浏览器中,您可以通过按Ctrl + Shift + I,然后在浏览到登录页面之前转到“网络”选项卡,然后浏览到该页面,然后您应该在网络选项卡中看到请求,在那里可以看到收到和发送的标题和响应正文(通常是html)
答案 1 :(得分:-1)
您可以使用file_put_contents将文件从网址下载到您的服务器。
file_put_contents("example.pdf", fopen("http://10.10.10.10\directory\123_ABC.pdf","rb"));