現在、クラスに拡張機能を提供しない場合、拡張機能は許可されません。すべての拡張を許可したいと思います。コアをハッキングせずにこれを行う方法はありますか?
Codeigniter 2では、次のように許可された型を定義するだけです。
$config['allowed_types'] = '*';
私がしていることは:
$ext=preg_replace("/.*\.([^.]+)$/","\\1", $_FILES['userfile']['name']);
$fileType=$_FILES['userfile']['type'];
$config['allowed_types'] = $ext.'|'.$fileType;
これにより、すべての関数呼び出しのすべてのファイルが自動的に許可されます。
あなたの直接的な質問への答え:いいえ、コアを上書きせずにこれを行う方法はありません
良い知らせは、コアのハッキングを回避できることです マニュアルに従って
追加のボーナスとして、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 を読みたいと思いますが、これにより、コードとコアコードを別々のユニバースに保持できます。
これまでのところ、それはハックによってのみ可能であるように見えます。
System/libraries/Upload.phpの556行目にreturn true
を挿入しました。
$config['allowed_types'] = '*';
.exeや.jpegsなどのファイル形式を追加でアップロードします...
この条件を置き換えるだけです。
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;
}
$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']変数に追加した拡張機能を使用できるようになります。
すべてが機能しない場合は、許可されているタイプの順序を最初のビデオ形式のように並べ替えます
$config['allowed_types'] = 'mp4|jpg|png|'
私の場合は問題なく機能するので、可能であれば共有してみてください。