为什么redirect()不允许我完成我的函数调用?

时间:2011-09-12 07:49:54

标签: php http function redirect header

所以我正在编写一个函数,允许我从一个数据库表添加一个ID到另一个数据库表来关联这两个,但是我遇到了一些小问题,似乎无法想象该怎么做。任何帮助都会被贬低。

请原谅我的一些杂乱的代码,我一直在尝试很多看似不起作用的不同解决方案。

class photo_modle extends CI_Model {

var $gallery_path;
var $image_name;
var $row;
var $gid; // gallary ID
var $iid; // image ID
function photo_modle() {
ob_start();
    $this->gallery_path = realpath(APPPATH . '../images');
}

function uploadPhoto() {


    $config = array(
        'allowed_types' => 'jpg|jpeg',
        'upload_path' => $this->gallery_path,
    );

    $this->load->library('upload', $config);
    $this->upload->do_upload();
    $image_data = $this->upload->data();

    $this->image_name = $image_data['file_name'];
    $config = array(
        'source_image' => $image_data['full_path'],
        'new_image' => realpath($this->gallery_path . '/thumb/normal/'),
        'width' => 248,
        'height' => 198,
        'maintain_ratio' => false
    );

    $this->load->library('image_lib', $config);
    $this->image_lib->resize();

    $data = array(
        'image_name' => $this->image_name,
        'description' => $this->input->post('description'),
        'name' => $this->input->post('name')

    );



    $str = $this->db->insert_string('images', $data);

    $this->db->query($str);
    $this->iid = $this->db->insert_id();


    $grayscale_path = '/Applications/XAMPP/xamppfiles/htdocs/images/thumb/normal/' . $this->image_name;
    header('Content-type: image/jpeg');
    $img = imagecreatefromjpeg($grayscale_path);
    imagefilter($img, IMG_FILTER_GRAYSCALE);
    imagejpeg($img, '/Applications/XAMPP/xamppfiles/htdocs/images/thumb/rollover/' . $this->image_name, 100);
    imagedestroy($img);
    $ndata = array (
        'image_name' => $this->image_name,
        'description' => $this->input->post('description'),
        'name' => $this->input->post('name'),
        'id' => $this->iid
         );

    $this->session->set_userdata($ndata);


}




function add_new_gallery() {


    $ndata = array(
        'gallery_name' => $this->input->post('gallery_name'),
        'description' => $this->input->post('gallery_description'),
     ); 

     $n_str = $this->db->insert('gallery', $ndata);
    // this is the only place where i can put the redirect without it returning errors
    // but if i do it here it does not pass back the gid variable which i need. 
    // I also should mention that I have a  header('Content-type: image/jpeg'); above all of
    // this, and that is why I have to do a redirect, so that I don't get an error. and that 
    // header code is nessasary, for I am doing some photo manipulation that requires it. 
     redirect('site/uploaded'); 
     $this->db->query($n_str);
     $this->gid = $this->db->insert_id();

     // I was trying to send that info in the session, but even that did not work because of the 
     // redirect
     $sdata = array(
         'gallery_id' => $this->gid
     );

     $this->session->set_userdata($sdata);


}
// this function needs the info that is not getting passed. 
function addId() {
      $sdata = array('gallery_id' => $this->session->userdata('gallery_id'));
     $where = "id = ".$this->session->userdata('image_id'); 
     $str = $this->db->update_string('images', $sdata, $where);

     $this->db->query($str);
}

对任何一个可以帮助你感谢太多时间的人。任何建议都会很棒!

1 个答案:

答案 0 :(得分:2)

如果您只是操纵图像,并将结果保存到文件,则无需发送Content-type: image/jpeg标题。

将图像发送到浏览器时,是必需的。

你可能会对imagejpeg的工作方式感到困惑,因为它有双重行为。 imagejpg可以:

  • 如果您没有将图片传递给$filename,请将图片直接输出到您的浏览器。当然,您需要警告浏览器预期图像数据,即当您向其发送内容类型标题时。

  • 如果您将图片设为$filename,请将图片保存到文件中。

在您的情况下,您确实将$filename传递给它,以便将图像保存到磁盘。但是你也发送了Content-type: image/jpeg所以你的浏览器希望接收从未发生的图像数据,然后它“因为它包含错误而无法显示”。