web-dev-qa-db-fra.com

Comment faire en sorte que la classe d'envoi de fichier CodeIgniter accepte toutes les extensions?

Actuellement, si je ne fournis aucune extension à la classe, cela n'autorise aucune extension. Je voudrais autoriser toutes les extensions. Y a-t-il un moyen de faire cela sans pirater le noyau?

21
Click Upvote

Dans Codeigniter 2, vous devez simplement définir les types autorisés comme ceci: 

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

Ce que je fais c'est:

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

Cela rend automatiquement tous les fichiers de chaque appel de fonction autorisés.

4
Adam

La réponse à votre question directe: Non, il n’ya aucun moyen de le faire sans passer outre au cœur du problème.

La bonne nouvelle est que vous pouvez éviter de pirater le noyau, selon le manuel

En prime, CodeIgniter permet à vos bibliothèques d’étendre Les classes natives si vous avez simplement besoin d’ajouter des fonctionnalités à D’une bibliothèque existante. Ou vous pouvez même remplacer les bibliothèques natives simplement En plaçant des versions portant le même nom dans votre dossier application/libraries.

Donc, pour avoir un remplacement immédiat de votre bibliothèque, vous pouvez copier Upload.php sur votre 

application/libraries

dossier, puis ajoutez votre logique personnalisée à ce fichier Upload.php. Code Igniter inclura ce fichier à la place lorsque vous chargez la bibliothèque de téléchargement. 

Vous pouvez également créer votre classe de téléversement personnalisée OWN qui étend l'original et affine uniquement la fonction is_allowed_filetype.

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

Vous aurez envie de relire le journal des modifications chaque fois que vous effectuez une mise à niveau, mais cela vous permettra de conserver votre code et le code principal dans des univers distincts. 

4
Alan Storm

Jusqu'à présent, il semble que cela ne serait possible que par un piratage.

J'ai inséré un return true à la ligne 556 dans system/libraries/Upload.php.

2
Click Upvote

$config['allowed_types'] = '*'; Qui téléchargera tous les formats de fichiers, tels que .exe ou .jpegs extra ... 

1
Shafeer khan

Vous devez simplement remplacer cette condition:

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

Avec:

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

$config['allowed_types'] = '*'; est une solution possible, mais à mon humble avis, il n’est pas très sûr. Le meilleur moyen est d'ajouter un type de fichier dont vous avez besoin $ config ['allowed_types'] . Si CodeIgniter ne dispose pas des types MIME dont vous avez besoin, vous pouvez les ajouter en modifiant le fichier mimes.php dans le dossier "application/config". Incluez simplement vos types mime dans un tableau.

Exemple d’ajout de types de fichiers epub et 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'),

Vous pourrez ensuite utiliser les extensions que vous avez ajoutées dans $ config ['allowed_types'] variable.

0
Wingpilot

si tout ne fonctionne pas, réorganisez l'ordre de type autorisé comme cela dans le premier format vidéo

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

Cela fonctionnera dans mon cas, donc j'ai partagé si possible l'essayer.

0
Mehta Harshit