正确设置标题,以便使用PHP通过代理下载文件

正确设置标题,以便使用PHP通过代理下载文件,php,proxy,http-headers,Php,Proxy,Http Headers,我发现很难正确表达这个问题,让我试着解释一下我们的问题 我们有一个运行在Ubunutu box上的内部网,带有Apache2/PHP5.2.4。我们有一些PHP代码,可以从不可公开访问的目录中读取文件,并将其输出到下面的屏幕代码中: $file_path = '/home/path/to/filename.gif'; if(file_exists($file_path)){ $output = FALSE; //File Information $path_parts

我发现很难正确表达这个问题,让我试着解释一下我们的问题

我们有一个运行在Ubunutu box上的内部网,带有Apache2/PHP5.2.4。我们有一些PHP代码,可以从不可公开访问的目录中读取文件,并将其输出到下面的屏幕代码中:

$file_path = '/home/path/to/filename.gif';

if(file_exists($file_path)){
    $output = FALSE;

    //File Information
    $path_parts = pathinfo($file_path);
    $file_size = filesize($file_path);
    $file_ext = (isset($path_parts['extension'])) ? strtolower($path_parts['extension']) : null;    
    $file_name = $path_parts['basename'];        

    //Sets up the headers    
    if($file_size > 0){
        header('Content-Length: ' .$file_size);
    }                    
    header('Content-Disposition: attachment; filename="'.$file_name.'"');
    header('Content-Type: application/octet-stream');


    //Reads the File
    if($file_size > 0){
        $handle = fopen($file_path, "r");
        $output = fread($handle, $file_size);
        fclose($handle);
    }

    //Outputs the File
    echo $output;
}
在我们的网络中,当浏览到使用此代码的页面时,文件被完美而快速地下载。。。 但是,当通过我们的Cisco ASA/Proxy/VPN访问此页面时,不确定该如何称呼此页面,此代码会锁定浏览器,但最终会下载文件

经过一点实验,在取出标题并将文件内容回显到浏览器后,它的打印没有问题。但是,只要我将带有标题的行添加回代码中,它就会再次导致挂起,但只有通过此框访问时

有没有人以前遇到过这个问题,或者知道我们可以努力向前迈进


感谢您的建议……

您是否尝试过完全删除内容大小标题?代理可能会将此视为一个坚定的承诺,如果您发送的数据大小不同,代理可能会等待最后几个丢失的字节出现

顺便说一句,您应该使用[readfile][1]而不是现在的fopen/fread/echo结构


现在,您正在将整个文件的内容悄悄地放入内存中,然后进行回音。对于大文件和多个请求,您将导致服务器内存不足。readfile将自动以较小的数据块对文件进行流式处理,以便将内存使用量降至最低。

您的代理显然存在内容类型问题:application/octet stream。尝试将其设置为每个文件的真实MIME类型。您可以使用该模块找出某个文件的MIME类型,如下所示:

//You may need to specify the location of your system's magic file
//See http://php.net/finfo_open for more info
$finfo = new finfo(FILEINFO_MIME);
$mimetype = $finfo->file($file_path);

您的代理是否希望在将整个文件转发到浏览器之前下载该文件?也许这取决于内容类型?如果将内容类型更改为image/gif,会发生什么情况?它是否仍然锁定浏览器?如果我使用Content-Type:image/gif,它工作正常…如果是这样的话。。。如何下载任何文件。。。PDF、文档、xls文件不挂起?如何在java的Kendo ProxyURL代码中设置标题?感谢readfile提示。。。我已经尝试完全删除内容大小标题。。。无济于事:-