2

我遇到了来自外部服务器的 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 工作。

4

2 回答 2

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");
                                                  ^                ^

编辑:

至于readfile()来自外部 URL,这是 PHP 手册必须说的:

如果启用了fopen 包装器,则 URL 可以用作此函数的文件名。有关如何指定文件名的更多详细信息,请参阅fopen() 。请参阅支持的协议和包装器以获取有关各种包装器具有哪些功能的信息的链接、有关其使用的说明以及有关它们可能提供的任何预定义变量的信息。

这意味着您必须allow_url_fopen在您的服务器中启用,php.ini或者您可以使用 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");
于 2012-10-14T14:00:22.917 回答
1

可能您的服务器设置为不打开远程文件,因此您不能在其上使用 fopen、readfile 和类似命令,除非您更改其配置。

于 2012-10-14T14:22:00.213 回答