【问题标题】:Ask, how to use redirect without contition?请问,如何无条件使用redirect?
【发布时间】:2013-11-18 11:16:16
【问题描述】:

我有这样的代码

    function download(){
            $id = $this->uri->segment(3);
            $dat = $this->mikland->gidiklanfoto($id);
            foreach ($dat as $item){
            $name = $item->foto; 
            $data = file_get_contents(base_url()."/uploads/".$name); // filenya
            force_download($name,$data); 
    }  
            redirect('cikland/viewiklan/'.$id);
   }

当函数运行时,重定向不能运行。, 有人可以帮忙吗?? 我认为是一件简单的事情,但我不知道诀窍。谢谢之前

【问题讨论】:

  • 我认为您不需要在下载功能中重定向。只需在调用下载函数后重定向到下一行。 redirect('cikland/viewiklan/'.$id, 'refresh');
  • 我已经在函数下载中将重定向代码移动到任何地方。但是它没有工作,我试图将代码放在$id = $this->uri->segment(3);重定向运行之后但下载不运行

标签: codeigniter redirect codeigniter-2 response.redirect codeigniter-url


【解决方案1】:

force_download() 的末尾有一个exit() 语句,因此强制下载后不会运行任何代码。

并且您正尝试同时下载多个文件 - 使用某种多部分 mime 类型,这可能会或可能不会起作用,但在给定的情况下不会,因为 CI 的 force_download() 似乎不支持.

另一种方法是创建一个包含所有下载文件的临时存档文件;请查看compression and archives 上的官方文档。

如果您想随文件一起发送重定向标头,您必须这样做:

function download(){

    // add this somewhere befor the download
    header('Location: '.site_url('cikland/viewiklan/'.$id));

    $id = $this->uri->segment(3);
    $dat = $this->mikland->gidiklanfoto($id);

    // only first item is downloaded
    foreach ($dat as $item)
    {
        $name = $item->foto; 
        $data = file_get_contents(base_url()."/uploads/".$name); // filenya
        force_download($name,$data); 
   }  
}

但问题仍然是浏览器将如何处理重定向和内容:很可能您只会获得重定向。

【讨论】:

  • 浏览器无法处理 header().,它在地址栏中生成一个长 url.. 我在函数下载中到处移动重定向代码.,但它没有用,我试图把$id = $this->uri->segment(3);之后的代码重定向运行但下载不运行
  • 啊抱歉,CI 的重定向会在 uri 前面加上 site_url() 基础 - 我相应地更正了代码。至于重定向和下载,如前所述,该组合可能不起作用 - 因为它是如此指定(或至少对于浏览器来说很常见)。您可以尝试使用 javascript 来规避这一点
【解决方案2】:

你需要加载 url 助手。

$this->load->helper('url');

之后

redirect("cikland/viewiklan/$id", 'refresh');

redirect("cikland/viewiklan/$id", 'location', 301);

字体:http://ellislab.com/codeigniter%20/user-guide/helpers/url_helper.html

【讨论】:

  • 我必须在自动加载文件中设置$this->load->helper('url');,我尝试使用“刷新”代码,但它不起作用..我在函数下载中到处移动重定向代码.,但它没有工作,我试图把代码放在$id = $this->uri->segment(3);重定向运行但下载不运行之后
【解决方案3】:

redirect() 方法重定向到一个 URL。您需要将完整的 URL 传递给它(因为它使用 header() 函数,根据 HTTP1.1 的 RFC 需要完整的 URL。

所以你需要像给定的例子一样硬编码完整的网址 - redirect('http://www.yoursite.com/cikland/viewiklan/'.$id);

【讨论】:

  • 不,不太对。如果 redirect($uri) 没有传递以 http 或 https 开头的字符串,它会将 $uri 修改为 site_url($uri)。
  • 我已经在函数下载中将重定向代码移动到任何地方。但它没有工作,我试图将代码放在$id = $this->uri->segment(3);重定向运行之后但下载不运行
猜你喜欢
  • 1970-01-01
  • 2014-07-20
  • 1970-01-01
  • 1970-01-01
  • 2021-01-22
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多