readfile返回打开流:HTTP请求失败! HTTP / 1.1 403在php中被禁止

时间:2016-11-02 07:28:10

标签: php codeigniter download readfile

我在Codeigniter控制器中为下载文件创建了一个函数,这里是代码。

function download_example($file_name) {
    header('Content-Type: application/octet-stream');
    header('Content-Disposition: attachment; filename='.$file_name);
    ob_clean();
    flush();
    readfile(base_url().'download_example/'.$file_name);
} 

但是在文件显示 403 Forbidden error 之后下载。

        遇到PHP错误      

严重性:警告

消息:   readfile(http://example.com/download_example/example.txt):失败了   开放流:HTTP请求失败! HTTP / 1.1 403禁止

  

文件名:controllers / controllers.php

行号:371

     

3 个答案:

答案 0 :(得分:2)

更改为:

readfile(dirname(__FILE__).'/download_example/'.$file_name);

如果是本地文件,则当前PHP脚本的目录与download_example目录相同。更改以匹配您的系统。还要确保该文件存在,并且运行Web服务器的用户有权访问此文件。

答案 1 :(得分:2)

使用http://example.com/download_example/file_name会获取该文件的http地址,例如C:\path\to\site_dir\download_example_dir\file_name,但使用服务器系统路径(例如dirname($this->input->server('SCRIPT_FILENAME')).'/download_example_dir/file_name')更好。

我个人使用这样的东西:

userclientcode

答案 2 :(得分:0)

这不是您的脚本的问题,而是您请求的资源。 Web服务器返回“禁止”状态代码。

可能会阻止PHP脚本以防止抓取。

您应该与远程服务器的管理员交谈。