Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/227.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何修复通过PHP下载时损坏的PDF文件 问题_Php_Pdf_Download - Fatal编程技术网

如何修复通过PHP下载时损坏的PDF文件 问题

如何修复通过PHP下载时损坏的PDF文件 问题,php,pdf,download,Php,Pdf,Download,我刚刚重建了我们的网站,允许用户下载.pdf和.mp3文件。我正在使用一个PHP脚本来处理下载过程。问题是,对于.pdf文件,大多数情况下下载都会成功。但某些时候,我不知道为什么,下载的文件被破坏了。或者,实际上,Adobe Reader说打开此文档时出错。文件已损坏,无法修复。如果我用另一个读卡器打开同一个损坏的文件,它可以正常工作 我已经做了什么 我所做的是用Notepad++打开了一个好文件和一个损坏的文件。我发现问题在于损坏的文件不是以%%EOF结尾,而是在%%EOF之后有更多的内容。看

我刚刚重建了我们的网站,允许用户下载.pdf和.mp3文件。我正在使用一个PHP脚本来处理下载过程。问题是,对于.pdf文件,大多数情况下下载都会成功。但某些时候,我不知道为什么,下载的文件被破坏了。或者,实际上,Adobe Reader说打开此文档时出错。文件已损坏,无法修复。如果我用另一个读卡器打开同一个损坏的文件,它可以正常工作

我已经做了什么 我所做的是用Notepad++打开了一个好文件和一个损坏的文件。我发现问题在于损坏的文件不是以%%EOF结尾,而是在%%EOF之后有更多的内容。看起来好像PDF文件的开头已复制到文件的结尾。 我还检查了服务器上存储的文件,它很好。 因此,在这一点上,我认为处理下载的php脚本有问题

代码如下: 我使用相同的脚本下载.pdf和.mp3文件

我不是php专家。我不太明白php是如何处理下载的,所以如果有人能帮我找到问题,我将不胜感激。提前非常感谢

readfile($file);
print file_get_contents($file);
脚本在这里两次输出文件内容,这两行的作用基本相同。拆下第二个

 header('Content-Transfer-Encoding: chunked');

这在这里没有真正的意义,脚本实际上并不是以块的形式发送内容。当指定内容传输编码时,不应同时指定内容长度。如果它目前以这种方式工作,那是很偶然的,但它可能会使您尚未测试的客户端出错。此标题也应删除。

您将通过readfile$file两次输出文件内容;后跟打印文件\u获取\u内容$file;-删除第二行。并删除标题“Content-Transfer-Encoding:chunked”;,这在这里没有任何意义,脚本实际上并没有以块的形式发送内容。问题解决了!非常感谢,这就是问题所在。祝您今天过得愉快!
 header('Content-Transfer-Encoding: chunked');