检查文件扩展名或mime类型是否失败

时间:2014-06-10 00:37:33

标签: wordpress csv file-upload wordpress-plugin

我需要检查上传的文件是否有.csv.txt作为扩展程序,并且我按照以下方式执行操作:

$uploadfiles = $_FILES['uploadfiles'];

echo '<pre>';
var_dump($uploadfiles);
echo '</pre>';

if (is_array($uploadfiles)) {
    foreach ($uploadfiles['name'] as $key => $value) {
        if ($uploadfiles['error'][$key] == 0) {

            $filetmp = $uploadfiles['tmp_name'][$key];
            $filename = $uploadfiles['name'][$key];

            $filetype = wp_check_filetype(basename($filename), null);
            $filetitle = preg_replace('/\.[^.]+$/', '', basename($filename));
            $filename = $filetitle . '.' . $filetype['ext'];
            $upload_dir = wp_upload_dir();

            if ($uploadfiles['type'] != "text/csv" || $uploadfiles['type'] != "text/plain") {
                echo "Error, the file $filename has not a valid extension: " . $filetype["ext"];
                continue;
            }

            echo "entre";die();

            $i = 0;
            while (file_exists($upload_dir['path'] . '/' . $filename)) {
                $filename = $filetitle . '_' . $i . '.' . $filetype['ext'];
                $i++;
            }

            $filedest = $upload_dir['path'] . '/' . $filename;

            if (!is_writeable($upload_dir['path'])) {
                $this->msg_e('Unable to write to directory %s. Is this directory writable by the server?');
                return;
            }

            if (!move_uploaded_file($filetmp, $filedest)) {
                $this->msg_e("Error, the file $filetmp could not moved to : $filedest ");
                continue;
            }
        }
    }
}

但我一直都会收到此错误:

  

错误,文件Aruba Airlines门票 - 优惠券(截至2014年4月27日) -   Aruba Airlines门票 - 优惠券.csv没有有效的扩展名:csv

我也用这段代码测试:

if ($filetype['type'] != "text/csv" || $filetype['type'] != "text/plain") {
    echo "Error, the file $filename has not a valid extension: " . $filetype["ext"];
    continue;
}

结果是一样的。如果我这样做:

echo '<pre>';
var_dump($uploadfiles);
echo '</pre>';

我得到了这个结果:

array (size=5)
  'name' => 
    array (size=1)
      0 => string 'Aruba Airlines tickets-coupons (through 27-Apr-2014) - Aruba Airlines tickets-coupons .csv' (length=90)
  'type' => 
    array (size=1)
      0 => string 'text/csv' (length=8)
  'tmp_name' => 
    array (size=1)
      0 => string '/tmp/php53tzhZ' (length=14)
  'error' => 
    array (size=1)
      0 => int 0
  'size' => 
    array (size=1)
      0 => int 14084526

那么错误在哪里?

1 个答案:

答案 0 :(得分:3)

我相信你已经在wordpress.stackexchange.com问了你的问题。但这是一个答案,所以问题不会得不到答案。

检查文件类型

从文件名中检索文件类型。

如果需要,您可以选择定义mime数组。

<?php wp_check_filetype( $filename, $mimes ) ?>

检查文件类型&amp;扩展

尝试确定文件的真实文件类型。

如果无法,将使用文件扩展名来确定类型。如果确定扩展名与文件的实际类型不匹配,则将使用正确的文件名和扩展名设置“proper_filename”值。

 <?php
      $validate = wp_check_filetype_and_ext( $file, $filename, $mimes );

      if( $validate['proper_filename'] !== false )
          $filename = $validate['proper_filename'];
 ?> 

参考:

  

http://codex.wordpress.org/Function_Reference/wp_check_filetype

     

http://codex.wordpress.org/Function_Reference/wp_check_filetype_and_ext