PHP 5.5.30
Codeigniter2.2.1
サーバーAWS
<追記>
先に記述スべきだったのですが、$_FILESをダンプした所
php
array(1) { ["userfile"]=> array(5) { ["name"]=> string(16) "filename.xls" ["type"]=> string(24) "application/vnd.ms-excel" ["tmp_name"]=> string(14) "/tmp/phpVvCVSo" ["error"]=> int(0) ["size"]=> int(1910784) } }
でしたが、こちらを確認したところ、$_FILESのMIMEは信じてはならないとのことで、
Linuxコマンドから確認したところ、
php
<?php $path = $_FILES['myfile']['tmp_name']; $mime = shell_exec('file -bi '.escapeshellcmd($path)); $mime = trim($mime); $mime = preg_replace("/ [^ ]*/", "", $mime); print($mime); ?>
なんと、
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:
<?php class Upload extends CI_Controller { function __construct() { parent::__construct(); $this->load->helper(array('form', 'url')); } function index() { $this->load->view('upload_form', array('error' => ' ' )); } function do_upload() { $config['upload_path'] = './uploads/'; $config['allowed_types'] = 'xls|xlsx|csv'; $config['max_size'] = '5000000'; $config['overwrite'] = true; $this->load->library('upload', $config); if ( ! $this->upload->do_upload()) { $error = array('error' => $this->upload->display_errors()); $this->load->view('upload_form', $error); } else { $data = array('upload_data' => $this->upload->data()); $this->load->view('upload_success', $data); } } } ?>
こちらでほぼ正常に挙動するのですが、ふと
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' ),
に変更してみましたが、状況変わらずです。
なにぶん、英語に弱いためネットの資料を存分に活用しきれず挫折しそうです。
毎回お助けお願いしますで大変お恥ずかしいばかりですが、どうかお力添えお願い致します。
まだ回答がついていません
会員登録して回答してみよう