【问题标题】:CodeIgniter Upload Class file_ext_tolower not working, even on localhostCodeIgniter Upload Class file_ext_tolower 不工作,即使在本地主机上
【发布时间】:2017-07-04 10:02:42
【问题描述】:

我有一个非常奇怪的问题。我正在使用 CodeIgniter 上传类来管理简单 jpg 图像的上传。如果我上传扩展名为 .JPG 的文件,即使我将属性 file_ext_tolower 设置为 TRUE,我的文件也会以 .JPG 扩展名上传。这是我不想要的东西!这是一些代码..

$this->load->library('upload');

$config['upload_path'] = './resources/img/content';
$config['allowed_types'] = 'jpg';
$config['overwrite'] = FALSE;
$config['file_ext_tolower'] = TRUE;
$config['remove_spaces'] = TRUE;

$this->upload->initialize($config, true);

if ( ! $this->upload->do_upload('cover')) {
    $this->session->set_flashdata('message','Cover: ' . $this->upload->display_errors());
    redirect('admin');
    break;
} else {
    // Whatever
}

问题是,这甚至不能在本地主机上运行。它总是继续并使用 .JPG 上传文件。我只是无法理解。我在服务器和本地主机上都使用 CodeIgniter 3.1.0。有什么想法吗?在服务器上,我还在 php.ini 中启用了 fileinfo 扩展。

这带来的另一件事是..如果我有一个名为 myfile.JPG 和 myfile.jpg 的文件,CodeIgniter 无法看到它们是同一个文件..这最终可能是只有 file_ext_tolower 正常工作时才会这样做。

在服务器上,myfile.JPG 被保存为 myfile.JPG。我认为,当 file_ext_tolower 设置为 TRUE 时,它应该保存为 myfile.jpg ......最终,在此之前,实际搜索另一个具有此名称的文件..如果具有此名称的文件已经在服务器上,它应该遵循 overwrite 设置:要么覆盖它,要么用渐进式数字重命名。

【问题讨论】:

    标签: php codeigniter file-upload


    【解决方案1】:

    我也有同样的问题。这是一个愚蠢的错误,无论我在这个文件上编辑多少代码也对结果没有影响。所以我开始猜我指的是错误的文件:

    1. 可能是会员站点文件,但我编辑了管理站点文件。
    2. 可能是订单模型文件,但我编辑发票模型文件。 回声后“警报(“abc”);”找到正确的文件,然后我编辑代码,最后我得到了完美的结果输出。

    【讨论】:

    • 您的答案可以通过额外的支持信息得到改进。请edit 添加更多详细信息,例如引用或文档,以便其他人可以确认您的答案是正确的。你可以找到更多关于如何写好答案的信息in the help center
    【解决方案2】:

    我有解决方案:)

    创建文件:application/libraries/MY_Upload.php

    <?php 
    class MY_Upload extends CI_Upload
    {
        /**
         * Force filename to lowercase
         *
         * @var string
         */
        public $file_name_tolower = FALSE;
    
    
        function _prep_filename($filename)
        {
            if ($this->mod_mime_fix === FALSE OR $this->allowed_types === '*' OR ($ext_pos = strrpos($filename, '.')) === FALSE)
            {
                return $filename;
            }
    
            $ext = substr($filename, $ext_pos);
            $filename = substr($filename, 0, $ext_pos);
    
            //change ext tolower
            $filename = ($this->file_name_tolower)?strtolower($filename):$filename;
            //change ext tolower
            $ext = ($this->file_ext_tolower)?strtolower($ext):$ext;
    
            return str_replace('.', '_', $filename).$ext;
        }
    }
    

    我修改file_ext_tolower并添加file_name_tolower

    文件示例:coVEr.JPG

    ...
    $config['file_ext_tolower'] = TRUE;
    $config['file_name_tolower'] = TRUE;
    ...
    

    结果:cover.jpg

    ...
    $config['file_ext_tolower'] = TRUE;
    $config['file_name_tolower'] = FALSE;
    ...
    

    结果:coVER.jpg

    ...
    $config['file_ext_tolower'] = FALSE;
    $config['file_name_tolower'] = TRUE;
    ...
    

    结果:cover.JPG

    ...
    $config['file_ext_tolower'] = FALSE;
    $config['file_name_tolower'] = FALSE;
    ...
    

    结果:coVER.JPG

    【讨论】:

    • 此解决方案是否考虑检查服务器上是否已存在具有给定新名称的文件?因为我看到了代码,但我没有看到应该检查这个的行。它检查具有相同名称的文件并且不会覆盖它,这一点很重要。
    • 另外..我看到你再次使用 file_ext_tolower。但是,在我说的问题中,它不起作用。如果它工作正常,我不需要所有这些解决方法。这就是重点..
    猜你喜欢
    • 2016-03-05
    • 1970-01-01
    • 2014-03-11
    • 2018-10-27
    • 2023-03-21
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-03
    相关资源
    最近更新 更多