【问题标题】:PHP - CodeIgniter download remote filePHP - CodeIgniter 下载远程文件
【发布时间】:2012-08-07 16:16:32
【问题描述】:

我在使用 CodeIgniter 下载文件时遇到问题..

代码在单独的 php 文件中完美运行,但是当我将代码放入 CodeIgniter 时: 该文件将成功下载,但已损坏:(。

注意:我正在处理来自远程服务器的视频文件。

代码:

$file = fopen ($link, "r");
if (!$file) {
    echo "<p align='center' style='color:#FF0101;'>Unable to open remote file :(, Please try again in a few minutes.</p>";
}else{
    ob_clean();
    header("Pragma: public");
    header("Expires: 0");
    header("Cache-Control: must-revalidate, post-check=0, pre-check=0"); 
    header("Content-Type: application/force-download");
    header("Content-Type: application/octet-stream");
    header("Content-Type: application/download");

    header('Content-Disposition: attachment; filename=zxc.3gp');
    //header("Content-Transfer-Encoding: binary");
    //header("Content-Length: ".$video_size);


    while (!feof ($file)) {
        $line = fgets ($file, 1024);
        echo $line;
        ob_flush();
        flush();
    }
    fclose($file);
    die();
}

我在新的 CodeIgniter 项目中尝试了这段代码:

public function index()
{
    $link = 'http://mamprogr.net.tc/tmp/1.3gp';
    $this->load->helper('download');
    force_download('1.3gp',$link);
}

但不工作:(

【问题讨论】:

  • 有什么问题?什么不工作?任何错误信息? What have you tried?
  • CodeIgniter Output Class 是罪魁祸首!请参阅 是的问题。
  • 您是否使用 gzip 压缩输出?如果是这样,那是你的问题。如果启用了 gzip 压缩,则不能直接从控制器方法输出内容。您必须使用视图。

标签: php codeigniter


【解决方案1】:

试试force_download() CodeIgniter 的助手,看看是否有帮助

force_download($name, $data); 

更新

我注意到您尝试提供直接链接作为 force_download() 函数的第二个参数 - 但是,它需要“数据” - 见下文 -

$data = file_get_contents("/local/path/to//1.3gp"); // Read the file's contents
//or perhpas $data = fopen(......);
$name = '1.3gp';

force_download($name, $data); 

【讨论】:

  • 这可能不是因为他想专门利用 ob_flush() 属性。 force_download 是否允许流式传输是现在的问题。
  • 不工作..文件已下载,但文件不工作..我使用的是远程文件,而不是本地文件!
  • @MAMProgr - 您需要提供数据而不是 url - 请参阅我的更新
【解决方案2】:

您的解决方案解决了下载问题。但是当播放文件时你会得到一个错误:

Windows Media Player 无法播放该文件。播放器可能不支持文件类型或可能不支持用于压缩文件的编解码器。

我尝试了 quicktime 和 realplayer,但视频仍然无法播放。

【讨论】:

    【解决方案3】:

    在我的情况下,外部站点上的下载链接是https://example.com/test.apk 我使用以下内容,它的工作原理就像魅力一样,codeignighter 版本是 4

    return redirect()->to('https://example.com/test.apk');
    

    【讨论】:

      猜你喜欢
      • 2010-12-03
      • 2012-02-10
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2022-08-19
      相关资源
      最近更新 更多