从服务器下载时,.exe文件已损坏

Ker*_*rri 7 php file-upload download

首先:我是一个低级的网页设计师,他知道足够的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;
    }
}
Run Code Online (Sandbox Code Playgroud)

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

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

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

Bar*_*lom 3

“我还将原始文件的二进制代码与无法运行的下载文件进行了比较,它们完全相同(因此 php 不会意外地将任何额外内容插入到文件中)。”

如果确实如此,那么问题一定出在 exe 下载后如何启动。这肯定不是你的 PHP 代码的问题。