web-dev-qa-db-ja.com

CodeIgniterファイルアップロードクラスですべての拡張子を受け入れるようにするにはどうすればよいですか?

現在、クラスに拡張機能を提供しない場合、拡張機能は許可されません。すべての拡張を許可したいと思います。コアをハッキングせずにこれを行う方法はありますか?

22
Click Upvote

Codeigniter 2では、次のように許可された型を定義するだけです。

$config['allowed_types'] = '*';
63
Baris

私がしていることは:

$ext=preg_replace("/.*\.([^.]+)$/","\\1", $_FILES['userfile']['name']);
$fileType=$_FILES['userfile']['type'];
$config['allowed_types'] = $ext.'|'.$fileType;

これにより、すべての関数呼び出しのすべてのファイルが自動的に許可されます。

4
Adam

あなたの直接的な質問への答え:いいえ、コアを上書きせずにこれを行う方法はありません

良い知らせは、コアのハッキングを回避できることです マニュアルに従って

追加のボーナスとして、CodeIgniterを使用すると、既存のライブラリにいくつかの機能を追加するだけでよい場合に、ライブラリでネイティブクラスを拡張できます。または、同じ名前のバージョンをapplication/librariesフォルダーに配置するだけで、ネイティブライブラリを置き換えることもできます。

したがって、ライブラリの代わりにドロップインを使用するには、Upload.phpを

application/libraries

フォルダを作成してから、カスタムロジックをそのUpload.phpファイルに追加します。アップロードライブラリをロードするたびに、Code Igniterは代わりにこのファイルを含めます。

または、元のクラスを拡張し、is_allowed_filetype関数のみを調整するOWNカスタムアップローダークラスを作成することもできます。

application/libraries/MY_Upload.php
class MY_Upload Extends CI_Upload{
    function is_allowed_filetype(){
         //my custom code here
    }
}

アップグレードするときは常に changelog を読みたいと思いますが、これにより、コードとコアコードを別々のユニバースに保持できます。

4
Alan Storm

これまでのところ、それはハックによってのみ可能であるように見えます。

System/libraries/Upload.phpの556行目にreturn trueを挿入しました。

2
Click Upvote

$config['allowed_types'] = '*'; .exeや.jpegsなどのファイル形式を追加でアップロードします...

1
Shafeer khan

この条件を置き換えるだけです。

        if (! $this->is_allowed_filetype())
        {
            $this->set_error('upload_invalid_filetype');
            return false;
        }

と:

        if (count($this->allowed_types) && !$this->is_allowed_filetype())
        {
            $this->set_error('upload_invalid_filetype');
            return false;
        }
0
Sarfraz

$config['allowed_types'] = '*';は可能な解決策ですが、私見ではあまり安全ではありません。より良い方法は、必要なファイルタイプを追加することです$ config ['allowed_types']。 CodeIgniterに必要なMIMEタイプがない場合は、「application/config」フォルダーのファイルmimes.phpを編集して追加できます。配列にMIMEタイプを含めるだけです。

Epubおよびfb2ファイルタイプを追加する例:

return array(
'epub'  =>  'application/epub+Zip',
'fb2'   =>  'application/x-fictionbook+xml',
'hqx'   =>  array('application/mac-binhex40', 'application/mac-binhex', 'application/x-binhex40', 'application/x-mac-binhex40'),

その後、$ config ['allowed_types']変数に追加した拡張機能を使用できるようになります。

0
Wingpilot

すべてが機能しない場合は、許可されているタイプの順序を最初のビデオ形式のように並べ替えます

$config['allowed_types'] = 'mp4|jpg|png|'

私の場合は問題なく機能するので、可能であれば共有してみてください。

0
Mehta Harshit