我从外部服务器遇到readfile()问题。下载的文件总是被破坏,大小约为3,4kb。它正在本地主机上工作。
第一
$file_name = $_POST['myname'];
readfile("http://www.ftj.eu/.../3n.pdf");
header("Content-Disposition: attachment; filename=$file_name" .date("m-d-y") . ".pdf");
第二
你知道为什么它甚至在本地主机上都没有工作吗?:
readfile("3n.pdf");
header("Content-Disposition: attachment; filename=$_POST['myname']" .date("m-d-y") . ".pdf");
解析错误:语法错误,意外T_ENCAPSED_AND_WHITESPACE,期待T_STRING或T_VARIABLE或T_NUM_STRING
请帮帮我。
修改
帮我从外部URL工作制作readfile。
答案 0 :(得分:3)
你有一个语法错误,readfile()
没有问题,因为@Will已经提到过。
替换它:
header("Content-Disposition: attachment; filename=$_POST['myname']" .date("m-d-y") . ".pdf");
使用此(在$_POST['myname']
周围添加花括号):
header("Content-Disposition: attachment; filename={$_POST['myname']}" .date("m-d-y") . ".pdf");
^ ^
修改强>
对于来自外部URL的readfile()
,这就是PHP手册对它的评价:
如果已启用fopen wrappers,则可以将URL用作具有此功能的文件名。有关如何指定文件名的更多详细信息,请参阅fopen()。请参阅Supported Protocols and Wrappers以获取有关各种包装器具有哪些功能的信息的链接,使用说明以及它们可能提供的任何预定义变量的信息。
这意味着您必须在php.ini
中启用allow_url_fopen
,或者您可以使用curl在服务器上下载该文件,然后将其提供给您的客户。
使用curl的示例:
<?php
$remote_file_url = 'http://www.ftj.eu/.../3n.pdf';
$downloadedFileName = "your_pdf_file.pdf";
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, $remote_file_url);
$downloadedFile = fopen($downloadedFileName, 'w+');
curl_setopt($ch, CURLOPT_FILE, $downloadedFile);
curl_exec ($ch);
curl_close ($ch);
fclose($downloadedFile);
readfile($downloadedFileName);
header("Content-Disposition: attachment; filename={$_POST['myname']}" .date("m-d-y") . ".pdf");
答案 1 :(得分:1)
可能您的服务器设置为不打开远程文件,因此除非您更改其配置,否则不能在其上使用fopen,readfile和类似命令。