Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/codeigniter/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何取出.gif、.jpg或.png_Php_Codeigniter_Upload - Fatal编程技术网

Php 如何取出.gif、.jpg或.png

Php 如何取出.gif、.jpg或.png,php,codeigniter,upload,Php,Codeigniter,Upload,我使用Windows并显示文件扩展名 当我用PHP上传图像文件时,图像名image1_big.jpg变成image1_big.jpg.jpg 而image2.gif将变为image2.gif.gif 我不想关闭文件扩展名 我怎样才能避免这个问题 function addProduct(){ $data = array( 'name' => db_clean($_POST['name']), 'shortdesc' => db_clean($_

我使用Windows并显示文件扩展名

当我用PHP上传图像文件时,图像名image1_big.jpg变成image1_big.jpg.jpg

而image2.gif将变为image2.gif.gif

我不想关闭文件扩展名

我怎样才能避免这个问题

function addProduct(){
    $data = array( 
        'name' => db_clean($_POST['name']),
        'shortdesc' => db_clean($_POST['shortdesc']),
        'longdesc' => db_clean($_POST['longdesc'],5000),
        'status' => db_clean($_POST['status'],8),
        'class' => db_clean($_POST['class'],30),
        'grouping' => db_clean($_POST['grouping'],16),
        'category_id' => id_clean($_POST['category_id']),
        'featured' => db_clean($_POST['featured'],5),
        'price' => db_clean($_POST['price'],16)

    );

    if ($_FILES){
        $config['upload_path'] = './images/';
        $config['allowed_types'] = 'gif|jpg|png';
        $config['max_size'] = '200';
        $config['remove_spaces'] = true;
        $config['overwrite'] = false;
        $config['max_width']  = '0';
        $config['max_height']  = '0';
        $this->load->library('upload', $config);    
        if (strlen($_FILES['image']['name'])){
            if(!$this->upload->do_upload('image')){
                $this->upload->display_errors();
                exit();
            }
            $image = $this->upload->data();
            if ($image['file_name']){
                $data['image'] = "images/".$image['file_name'];
            }
        }
        if (strlen($_FILES['thumbnail']['name'])){
            if(!$this->upload->do_upload('thumbnail')){
                $this->upload->display_errors();
                exit();
            }
            $thumb = $this->upload->data();
            if ($thumb['file_name']){
                $data['thumbnail'] = "images/".$thumb['file_name'];
            }
        }
    }
    $this->db->insert('omc_products', $data);   

    $new_product_id = $this->db->insert_id();
...
...

如果您觉得有必要,可以去掉文件扩展名。但是,我同意BalusC的意见,即它通常不是PHP的正确行为:

$filename = substr($filename_passed_to_upload, 0, (strlen($filename_passed_to_upload) - 4));
或者更严格地说:

$temp = explode(".", $filename_passed_to_upload);
$new_filename = $temp[0]; 
// be careful, this fails when the name has a '.' in it other than for the extention
// you'll probably want to do something with a loop with $temp
如果您告诉函数如何执行以下操作,该函数将处理不必要的扩展:

$filename = dirname($old_filename) . '/' . basename($old_file_name, '.gif');
或者,Perl正则表达式可以删除双扩展名(这将处理所有双扩展名和三扩展名文件),因此只使用最后一个扩展名

#                                +-+-- handles .c through .jpeg
#                                | |
$filename = preg_replace('/(\\..{1,4}){2,}$/', '$1', $old_filename);

这不是默认行为。这是(错误的)PHP文件上传处理代码导致的。如果您发布了一个SSCCE(),那么我们可能会发现PHP代码中的错误。我们可能需要查看do_upload()函数和/或data()函数。