2012/03/26

CodeIgniter 2.1.0 上傳類別 Upload 的 Bug

今天試用了一下 CodeIgniter 的上傳類別 upload,沒想到就遇到的 bug。
不管怎麼設定 config,都出現以下的錯誤訊息:
Severity: Notice  --> Undefined index: tmp_path /web/system/libraries/Upload.php 1058
The filetype you are attempting to upload is not allowed.
後來直接去看 Upload.php 的第 1058 行到底是寫什麼東西:
if (DIRECTORY_SEPARATOR !== '\\' && function_exists('exec'))
{
 $output = array();
 @exec('file --brief --mime-type ' . escapeshellarg($file['tmp_path']), $output, $return_code);
 if ($return_code === 0 && strlen($output[0]) > 0) // A return status code != 0 would mean failed execution
 {
  $this->file_type = rtrim($output[0]);
  return;
 }
}
原來是 $file['tmp_path'] 這裡出了問題。php 的 $_FILES 變數沒有 tmp_path 這個鍵值,明顯是 tmp_name 誤植成 tmp_path。因此將 1058 行的 tmp_path 改成 tmp_name 就可以了。