来自外部服务器的PHP readfile

时间:2012-10-14 13:55:16

标签: php external readfile

我从外部服务器遇到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。

2 个答案:

答案 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和类似命令。