【问题标题】:CodeIgniter Upload class PDF filetype not allowed不允许 CodeIgniter 上传类 PDF 文件类型
【发布时间】:2013-04-04 10:30:14
【问题描述】:

在本地工作,但在我尝试过的两台服务器上显示相同的错误消息。使用 Codeigniter 2.1.3

private function upload_file(){
    $config['upload_path'] = './uploads/';
    $config['allowed_types'] = 'jpg|png|jpeg|gif|pdf';
    $config['max_width']  = '0';
    $config['max_height']  = '0';
    $config['encrypt_name']  = true;
    $this->load->library('upload', $config);
    var_dump($_FILES);
    if ( ! $this->upload->do_upload()){
        $error = array('error' => $this->upload->display_errors());
        var_dump($error);
        die();
        return $error;
    } else {
        $data = array('upload_data' => $this->upload->data());
        var_dump($data);
        die();
        return $data;
    }
}

在执行var_dump($_FILES); 时,它会显示正确的信息 array(1) { ["userfile"]=> array(5) { ["name"]=> string(8) "0002.pdf" ["type"]=> string(14) "aplication/pdf" ["tmp_name"]=> string(27) "C:\Windows\Temp\php9454.tmp" ["error"]=> int(0) ["size"]=> int(29295) } }

var_dump($error) 放出array(1) { ["error"]=> string(64) " The filetype you are attempting to upload is not allowed. " }

使用 png 和 jpg 进行测试,效果非常好。

正确的 mime 类型在配置文件 config/mimes.php

 'pdf'  =>  array('application/pdf', 'application/x-download'),

编辑:如果它意味着什么,本地服务器是一个 MAC,两个远程是 windows。

【问题讨论】:

  • 您确定将更改上传到服务器?我只是问,因为你说它在本地有效。
  • 是的,我很肯定,这东西几个月前就涨了。刚刚停止工作,不知道什么时候。我还添加了 var_dumps() 并在远程服务器上进行了测试,所以它肯定有最新的代码
  • 它只是随机停止工作?您可能需要查明是否有人对服务器、apache、php 配置文件或类似内容进行了任何更改。你能写一个不使用codeigniter的测试上传脚本,看看它是否允许你上传pdf文件吗?
  • 服务器都运行 2.1.3? 2.1.0 中的上传类存在错误。
  • 是的,两者都在运行 2.1.3,两台服务器上的代码完全相同。 @Danny 仍在尝试将脚本放在一起,在本地尝试,但它拒绝我上传 pdf...

标签: php codeigniter file-upload mime-types


【解决方案1】:

因此,即使代码全部正确,错误实际上是在 PHP 本身上。那里的 mime-types 有拼写错误。 当var_dump($_FILES) 吐出["type"]=> string(14) "aplication/pdf" 请注意“应用程序”拼写错误。

在同事的机器上检查过,他的正确,所以可能是 php >5.3.5 的问题

【讨论】:

  • 奇怪,你本地输出的拼写一样吗?
  • 是的,我在本地发现了错误,然后回来查看服务器上是否相同(我在问题中所做的转储来自服务器)。你还知道那里的错误吗
  • pdf 是如何制作的?听起来无论是谁/如何制作 pdf 的标题都设置不正确。
  • 如果是这种情况,只需将拼写错误的 mime 添加到 CI mime 配置中,使其为 'pdf' => array('application/pdf', 'application/x-download', 'aplication/pdf'),
  • @Jeemusu 将创建一个新的 pdf 然后尝试。神秘的谢谢,会做的:)让我感到困惑的是,这是如何在本地工作而不是在服务器上工作的?相同的文件,相同的标题,不同的结果
【解决方案2】:

由于某种原因,我在这里遇到了同样的问题,我无法上传 pdf 文件,快速故障排除是显示错误

$msg = $this->upload->display_errors('<p>', '</p>');
echo $msg;

我收到无效文件类型的错误消息,因此我添加了新的代码行来显示有关要上传的文件的完整信息。

$msg = $this->upload->display_errors('<p>', '</p>');
$msg.=print_r($this->upload->data());
echo $msg;

然后我将文件类型复制到 config/mime.php

'pdf'   =>  array('application/pdf'),

并确保使用相同的 mime 类型作为我上传文件的 mime 类型。 有趣的是,错误在于 mime.php 中有一个错字:)

撇号而不是单引号,因为从互联网上复制过去而不注意使用的引号。

【讨论】:

    【解决方案3】:

    代替

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

    试试这个

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

    这对我有用

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2019-02-27
      • 2017-08-18
      • 2012-04-06
      • 1970-01-01
      • 2021-01-01
      • 2015-05-11
      • 2012-04-22
      • 2014-12-30
      相关资源
      最近更新 更多