2

私は codeigniter を使用していますが、いくつかのテキスト ファイルをアップロードしようとすると、奇妙なケースが見つかりました。

( CI doc ) すべて正常に動作することを示すメソッド ドキュメントを使用しますが、文字列 ' // ' (引用符なし) を含むファイルをアップロードしようとすると、「アップロードしようとしているファイル タイプは許可されていません」という結果が得られます。

何か案が?

使用コード: (コントローラー)

function do_upload() {
    $config['upload_path'] = APPPATH.'uploads/';
    $config['allowed_types'] = 'txt|csv';
    $config['max_size'] = '1024';
    $config['max_width']  = '0';
    $config['max_height']  = '0';
    $this->load->library('upload', $config);
    @var_dump($_FILES['userfile']);   // debug
    if (!$this->upload->do_upload()) {
        $error = array('error' => $this->upload->display_errors());
        $this->load->view('upload_form', $error);
    } else 
        echo "<br>upload ok";
}

upload_form.php (ビュー):

<?php 
    if (isset($error)) echo $error;
    echo form_open_multipart('supervisor/do_upload'); 
    echo form_label('File', 'userfile');
    echo form_upload('userfile');
    echo form_submit('submit', 'Upload');
    echo form_close() 
?>

例: (アップロード用の .txt)

[file1.txt]:
THIS IS A TEXT FILE     # work fine

[file2.txt]:
THIS IS A // TEXT FILE    # fail!  note: {blank}//{blank}

出力 (file1.txt のアップロード)

array(5) { ["name"]=> string(9) "file1.txt" ["type"]=> string(10) "text/plain" ["tmp_name"]=> string(14) "/tmp/phpLVaMGs" ["error"]=> int(0) ["size"]=> int(19) }
upload ok

出力 (file2.txt のアップロード)

array(5) { ["name"]=> string(9) "file2.txt" ["type"]=> string(10) "text/plain" ["tmp_name"]=> string(14) "/tmp/phpFu4znR" ["error"]=> int(0) ["size"]=> int(22) }

The filetype you are attempting to upload is not allowed.
...

Firebug POST: (file2.txt のアップロード)

userfile    THIS IS A // TEXT FILE
submit  Upload
Fuente
-----------------------------15028408581691128039842883428 
Content-Disposition: form-data; name="userfile"; filename="file2.txt" 
Content-Type: text/plain 
THIS IS A // TEXT FILE 
-----------------------------15028408581691128039842883428 
Content-Disposition: form-data; name="submit" 
Upload 
-----------------------------15028408581691128039842883428--
4

1 に答える 1

0

この問題に何度か直面しましたが、新しいシステム フォルダーを使用している間は常に次の修正を行います。そしてそれはCIのバグです。それがうまくいかないことを教えてください???

system/libraries/Uploads.php に移動 -- LINE NO 1059

@exec('file --brief --mime-type ' . escapeshellarg($file['tmp_path']), $output, $return_code);

変更:

@exec('file --brief --mime-type ' . escapeshellarg($file['tmp_name']), $output, $return_code);

ここで、行番号 1044-1045 を見てください。次のようになります。

$this->file_type = @mime_content_type($file['tmp_name']);
return;

return ステートメントを変更します。

$this->file_type = @mime_content_type($file['tmp_name']);
if(strlen($this->file_type) > 0) return;
于 2013-03-22T05:56:32.307 に答える