PHP 5.5.30
Codeigniter2.2.1
サーバーAWS
<追記>
先に記述スべきだったのですが、$_FILESをダンプした所
php
1array(1) { 2 ["userfile"]=> 3 array(5) { 4 ["name"]=> 5 string(16) "filename.xls" 6 ["type"]=> 7 string(24) "application/vnd.ms-excel" 8 ["tmp_name"]=> 9 string(14) "/tmp/phpVvCVSo" 10 ["error"]=> 11 int(0) 12 ["size"]=> 13 int(1910784) 14 } 15}
でしたが、こちらを確認したところ、$_FILESのMIMEは信じてはならないとのことで、
Linuxコマンドから確認したところ、
php
1<?php 2$path = $_FILES['myfile']['tmp_name']; 3$mime = shell_exec('file -bi '.escapeshellcmd($path)); 4$mime = trim($mime); 5$mime = preg_replace("/ [^ ]*/", "", $mime); 6print($mime); 7?>
なんと、
application/CDFV2-encrypted; charset=binary
なるものが返ってきました。もしや?
と思い、LibreOfficeやNumberでxlsファイルを出力すると
それぞれ返されるMimeTypeは異なりましたが、いずれもExcel絡みのTypeで正しくアップロード出来ました。
ところが、今回振り回されたxlsファイルは PHPExcel というLibraryにより出力されたファイルで何かが違うようです。
現段階では、CDFV2-encrypted;
これをアップするにはどうすればよいか、という問題に集約されている状況です。
<本文>
公式マニュアルに基づき、ファイルアップローダー?を作りました。
http://codeigniter.jp/user_guide_ja/libraries/file_uploading.html
php:
1<?php 2 3class Upload extends CI_Controller { 4 5 function __construct() 6 { 7 parent::__construct(); 8 $this->load->helper(array('form', 'url')); 9 } 10 11 function index() 12 { 13 $this->load->view('upload_form', array('error' => ' ' )); 14 } 15 16 function do_upload() 17 { 18 $config['upload_path'] = './uploads/'; 19 $config['allowed_types'] = 'xls|xlsx|csv'; 20 $config['max_size'] = '5000000'; 21 $config['overwrite'] = true; 22 23 $this->load->library('upload', $config); 24 25 if ( ! $this->upload->do_upload()) 26 { 27 $error = array('error' => $this->upload->display_errors()); 28 29 $this->load->view('upload_form', $error); 30 } 31 else 32 { 33 $data = array('upload_data' => $this->upload->data()); 34 35 $this->load->view('upload_success', $data); 36 } 37 } 38} 39?> 40
こちらでほぼ正常に挙動するのですが、ふと
xls形式(Excel2003形式)を上げた所、
The filetype you are attempting to upload is not allowed.
のエラー。他のファイル(xlsxやcsv、設定を変えればjpg,pngなど)は正常にアップロードができます。
ネットで調べてみるとmime絡みであることが推測され、
config/mimes.php の設定で xls を
'xls' => array( 'application/excel', 'application/vnd.ms-excel', 'application/msexcel' ),
から
'xls' => array( 'application/excel', 'application/vnd.ms-excel', 'application/octet-stream' ),
とか
'xls' => array( 'application/vnd.openxmlformats-officedocument.spreadsheetml.sheet', 'application/zip', 'application/x-zip', 'application/vnd.ms-excel', 'application/msexcel', 'application/excel', 'application/vnd.ms-office' ),
に変更してみましたが、状況変わらずです。
なにぶん、英語に弱いためネットの資料を存分に活用しきれず挫折しそうです。
毎回お助けお願いしますで大変お恥ずかしいばかりですが、どうかお力添えお願い致します。
回答2件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2015/12/21 08:47
退会済みユーザー
2015/12/21 08:52
2015/12/24 05:09