2010-10-28 2 views
3

J'ai une application PHP où je peux télécharger des fichiers. Lorsque je télécharge la plupart des fichiers et faire un print_r($_FILES), je reçois quelque chose comme ceci:Le téléchargement ne fonctionne pas lorsque le fichier est trop gros

Array 
(
    [import] => Array 
     (
      [name] => Array 
       (
        [excel_file] => COD MKTG 2.csv 
       ) 

      [type] => Array 
       (
        [excel_file] => application/vnd.ms-excel 
       ) 

      [tmp_name] => Array 
       (
        [excel_file] => /tmp/phpy8mEKn 
       ) 

      [error] => Array 
       (
        [excel_file] => 0 
       ) 

      [size] => Array 
       (
        [excel_file] => 1584286 
       ) 

     ) 

) 

J'ai un autre fichier CSV qui est plus comme 13 méga-octets, et lorsque je tente de télécharger, je reçois ceci:

Array 
(
    [import] => Array 
     (
      [name] => Array 
       (
        [excel_file] => COD MKTG.csv 
       ) 

      [type] => Array 
       (
        [excel_file] => 
       ) 

      [tmp_name] => Array 
       (
        [excel_file] => 
       ) 

      [error] => Array 
       (
        [excel_file] => 1 
       ) 

      [size] => Array 
       (
        [excel_file] => 0 
       ) 

     ) 

) 

Je ne reçois aucune erreur en disant que le fichier est trop gros. Je viens d'obtenir un malformé $_FILES. J'ai post_max_size dans php.ini mis à 100 Mo. Pourquoi cela arrive-t-il?

+0

Vérifiez bien que c'est le fichier php.ini que PHP utilise actuellement, et non une copie –

+0

Bonne suggestion - ça m'a brûlé avant. Dans ce cas, c'est la même chose. –

Répondre

12

Selon la documentation PHP, le code d'erreur 1 est UPLOAD_ERR_INI_SIZE: "Le fichier téléchargé dépasse la directive upload_max_filesize dans php.ini"

Vous devez vous assurer que tous les fol variables vantes sont correctement définies:

upload_max_filesize - taille maximale d'un fichier individuel dans un téléchargement
max_file_uploads - nombre total de fichiers autorisés à être téléchargés
post_max_size - somme totale de toutes les données étant affiché (sous forme de données + fichiers)
memory_limit - doit être> post_max_size, pour permettre à l'espace pour les frais généraux PHP + scénario

Et en plus de cela, il y a les limites du serveur web ainsi. Apache a LimitRequestBody qui s'appliquerait bien avant que PHP n'entre dans l'image.

+1

+1 pour webserver LimitRequestBody référence –

+0

Il s'est avéré être 'upload_max_filesize'. Je pourrais dire parce que le code d'erreur était "1": http://php.net/manual/fr/features.file-upload.errors.php –

+0

Yep. c'était dans votre message original. –

1

modifier la limite de mémoire ainsi memory_limit = 8M;

à peut-être 20?

et peut-être temps d'exécution

max_execution_time

modifier:

assurez-vous que son pas le temps d'exécution le chercher ...

si vous avez une connexion internet très lente, il pourrait être

max_input_time

il doit être l'un de ceux-ci ou il y a quelque chose de mal avec votre script ou vos réglages pas les paramètres correctement

memory_limit

max_execution_time

max_input_time

+0

Non, mon memory_limit était de 128M et j'ai toujours les mêmes résultats à 256. Mon script ne sort pas non plus. –

+0

a mis à jour la réponse – Breezer

0

Vous pouvez également essayer de mettre ces valeurs dans un fichier .htaccess au sein de votre répertoire racine

php_value upload_max_filesize 128M 
php_value post_max_size 128M 
php_value max_execution_time 200 
php_value max_input_time 200 
0

Pour autant que je sache, PHP a des problèmes avec des fichiers volumineux en matière de système de fichiers fonctions. PHP compilé 32 bits a 2147483647 comme PHP_INT_MAX, ce qui signifie que les fichiers plus gros que ~ 2G ne s'ouvriront pas, ne chercheront pas, etc.Ce nombre est plus grand dans PHP 64-bit compilé [environ 4+ trillion octets - 8 octets signés entiers qui est].

En ce moment même, j'essaie de résoudre ce problème [J'essaie d'intégrer JumpLoader à mon projet CMS. C'est fait, sauf la partie liée à ce problème de chavirement 2G - ne peut pas travailler sur des fichiers plus gros que 2G.], Donc une fois que j'aurai une solution sur celui-ci, je le partagerai.

Bonne chance pour le moment.

Questions connexes