php – .exe文件从服务器下载时损坏

前端之家收集整理的这篇文章主要介绍了php – .exe文件从服务器下载时损坏前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
首先:我是一个低级的网页设计师,他知道只有足够的 PHP是危险的,而且只要服务器管理就足够了.除非你很清楚,否则我可能不会理解你!

设置:我已经建立了一个网站,客户端将文件上传到特定目录,这些文件通过PHP提供,供用户下载.这些文件通常是50MB以上的可执行文件.客户端不希望他们压缩,因为他们觉得他们的用户不够精明,无法解压缩.我正在使用下面的PHP强制下载对话框并隐藏文件所在的目录.

这是Linux服务器,如果这有所不同.

问题:用户尝试下载后,某个文件会损坏.它是一个可执行文件,但是当它被单击时,会打开一个空白的DOS窗口.下载之前的原始文件打开完美.还有其他几个类似的文件经过相同的下载程序,所有这些都可以正常工作.

我尝试过的事情:我尝试上传压缩文件,然后在服务器上解压缩,以确保它在上传过程中没有损坏,没有运气.
我还将原始文件的二进制代码与不起作用的下载文件进行了比较,它们完全相同(因此PHP不会意外地在文件中插入任何额外内容).

这可能是我的downloadFile函数中的标题的问题?我真的不确定如何解决这个问题……

这是下载PHP,如果它是相关的($filenamereplace在别处定义):

downloadFile("../DIRECTORY/files/$filenamereplace","$filenamereplace");

function downloadFile($file,$filename){    
    if(file_exists($file)) {
        header('Content-Description: File Transfer');
        header('Content-Type: application/octet-stream');
        header('Content-Disposition: attachment; filename="'.$filename.'"');
        header('Content-Transfer-Encoding: binary');
        header('Expires: 0');
        header('Cache-Control: must-revalidate,post-check=0,pre-check=0');
        header('Pragma: public');
        header('Content-Length: ' . filesize($file));
        @ flush();
        readfile($file);
        exit;
    }
}

ETA Additonal信息:
– 已在同一台机器上完成工作/非工作文件的测试
– 如果它有任何区别,原始文件有一个自定义图标.下载后,该文件具有通用空白文档图标.

Additonal信息:我认为这一点非常重要!
我只是尝试直接下载文件(绕过触发上面的下载功能的下载链接).如果我只是通过它的URL下载文件并以这种方式下载它,下载的文件就是WORKS.所以我认为它必须与下载功能有关.但是什么?

3/17主要修正 – 并已解决
所以今天早上醒来,我突然意识到我可能正在比较错误文件. (我已将它们重新保存为二进制文本,然后对它们进行比较.我没有意识到比较程序将采用并比较实际的exe文件).今天早上我尝试比较实际的exe文件,但有一点不同.有一行PHP代码被注入到文件的第一行.我调整了PHP,问题得到解决. (它来自if / else语句,在我引用的代码中定义了teh $filenamereplace变量).再次感谢您的帮助,并抱歉误导您坚持文件内容相同!

“我还将原始文件的二进制代码与不起作用的下载文件进行了比较,它们完全相同(因此PHP不会意外地在文件中插入任何内容).”

如果这是真的,那么问题必须在于如何在下载后启动exe.它应该不是您的PHP代码的问题.

猜你在找的PHP相关文章