php HTTP文件上传变量并不总是可读的

时间:2015-11-26 18:50:34

标签: http file-upload php-5.4

在PHP(版本5.4.39-0 + deb7u2)中,我上传文件。 这种情况顺利进行了大约3年,直到今天。

经过数小时的测试后,我注意到 $ _ FILES ['Filedata'] ['name'] 数组在以下情况下无法读取:

  • 当PATHINFO_EXTENSION为“ .jpg ”时,文件名由Mac OSX系统编写
  • 写为'.JPG'的文件没有问题。
  • 当文件名包含' -_ '时(例如20151126-_HG634163.JPG)
  • 在包含.jpg,.JPG,-_,...的PC上写的文件正常运作

在今天早上工作完美的代码之下。没有服务器更改。 Chrome和Safari都给出了相同的结果。 $ this-> file_name 变量存储在数据库中,以防止出现双打。

        if (!empty($_FILES)) {
        $tempFile = $_FILES['Filedata']['tmp_name'];
        $ext = pathinfo($_FILES['Filedata']['name'], PATHINFO_EXTENSION);
        $this->file_name = $_FILES['Filedata']['name'];
        $fileTypes = array('jpg','JPG','jpeg'); // File extensions
        $this->new_filename = $_POST['i']."_".date(YmdHis).$i."_".sha1($this->file)."_".rand(0, 1000)."_".rand(0, 1000).".JPG";
        $this->new_file = $this->targetFile."/".$this->new_filename;

        if (in_array($ext,$fileTypes)) {
        move_uploaded_file($tempFile,$this->new_file);
        } else {
        $this->upload_error = 1;
        }
        }

0 个答案:

没有答案