Comment puis-je empêcher l’échec des téléchargements importants de fichiers Apache / PHP?

J’ai récemment installé un portail de téléchargement PHP sur l’un de nos serveurs. Tout fonctionne correctement, mais les utilisateurs ne peuvent pas télécharger de gros fichiers (~ 20 Mo).

Je règle les parameters suivants sur des valeurs extrêmement grandes ou illimitées:

memory_limit upload_max_filesize post_max_size memory_limit 

php.ini complet ici: http://pastebin.com/NrqJvMVM

Mais il échoue toujours après le redémarrage du serveur.

Est-ce que je manque un cadre? Dois-je mettre à jour des valeurs dans la configuration Apache? Un pare-feu d’entreprise pourrait-il interférer avec cela?

EDIT: J’ai vérifié phpinfo () et la configuration principale affiche toujours les anciennes valeurs. Le fichier de configuration C: \ Windows \ php.ini a cependant les nouvelles valeurs. Suis-je en train d’utiliser le mauvais fichier de configuration?

Vous pouvez également tester les parameters dans un script. Peut-être que cela aide:

  1. max_execution_time = ini_set (“max_execution_time”, “-1”);
  2. post_max_size = ini_set (“post_max_size”, “200M”);
  3. memory_limit = ini_set (“memory_limit”, “200M”);
  4. upload_max_filesize = ini_set (“upload_max_filesize”, “200M”);

Dans .htaccess:

php_value upload_max_filesize 200M

php_value memory_limit 256M

php_value max_execution_time 18000

Voici de jolis articles sur ce sujet: http://www.cyberciti.biz/faq/linux-unix-apache-increase-php-upload-limit/ | https://www.dokuwiki.org/faq:uploadsize

Suhosin est-il installé sur votre serveur ou utilisez-vous fcgi ;-)?

Tous les parameters de configuration de votre installation sont contenus dans le fichier php.ini . Parfois, ces parameters peuvent être remplacés par des directives dans les fichiers Apache .htaccess ou même dans les scripts eux-mêmes.

Paramètres suivants à modifier –

  • file_uploads
  • upload_max_filesize
  • max_input_time
  • memory_limit
  • max_execution_time
  • post_max_size

Les parameters de configuration en détail ci-dessous.

  • upload_max_filesize et post_max_size

    Les fichiers sont généralement envoyés au serveur Web dans un format appelé «multipart / form-data». Post_max_size définit la limite supérieure de la quantité de données qu’un script peut accepter de cette manière. Idéalement, cette valeur devrait être supérieure à la valeur définie pour upload_max_filesize.

    Il est important de comprendre que upload_max_filesize est la sum des tailles de tous les fichiers que vous téléchargez. post_max_size est le upload_max_filesize plus la sum des longueurs de tous les autres champs du formulaire, plus les en-têtes de mime que l’encodeur peut inclure. Étant donné que ces champs sont généralement petits, vous pouvez souvent évaluer la taille maximale du téléchargement à la taille maximale.

    Selon la documentation de PHP, vous pouvez définir un MAX_UPLOAD_LIMIT dans votre formulaire HTML pour suggérer une limite au navigateur.

  • memory_limit

    Lorsque le moteur PHP gère un POST entrant, il doit conserver certaines des données entrantes en mémoire. Cette directive n’a d’effet que si vous avez utilisé l’option –enable-memory-limit au moment de la configuration. Définir une valeur trop élevée peut être très dangereux car si plusieurs téléchargements sont traités simultanément, toute la mémoire disponible sera épuisée et d’autres scripts sans rapport consommant beaucoup de mémoire peuvent également affecter l’ensemble du serveur.

  • max_execution_time et max_input_time

    Ces parameters définissent la durée de vie maximale du script et le temps nécessaire au script pour accepter les entrées. Si plusieurs méga octets de données sont transférés, max_input_time devrait être raisonnablement élevé. Vous pouvez remplacer le paramètre dans le fichier ini pour max_input_time en appelant la fonction set_time_limit () dans vos scripts.

Commentaires supplémentaires

  • Paramètres Apache

    Le serveur Web apache dispose d’une directive de configuration LimitRequestBody qui limite la taille de toutes les données POST, quel que soit le langage de script Web utilisé. Certaines installations RPM définissent le corps de la demande de limite à 512 Ko. Vous devrez changer cela pour une valeur plus grande ou supprimer complètement l’entrée.

  • Autres options

    Si vous prévoyez de gérer un grand nombre de transferts de fichiers simultanés sur votre site Web, utilisez un composant côté serveur perl ou java. PHP se trouve être notre langage de programmation Web préféré, mais Perl et Java sont légèrement plus avancés en matière de téléchargement de fichiers.

Voir également:

  1. Télécharger un grand fichier jusqu’à 100 Mo en utilisant PHP
  2. télécharger des fichiers volumineux en utilisant PHP, Apache
  3. PHP: le téléchargement de fichiers volumineux échoue

Peut-être que cet article peut vous aider. Vous pouvez append des parameters à .htaccess

Vous avez écrit la variable post_max_size deux fois et à partir de la valeur de premier si 0 et la valeur de la seconde est 9999M, supprimez le premier et essayez-le.

Suis-je en train d’utiliser le mauvais fichier de configuration?

Eh bien, phpinfo () vous indique lequel vous utilisez. Examinez le Configuration File (php.ini) Path et Loaded Configuration File juste en haut de la sortie.

Peut-être que MAX_FILE_SIZE n’est pas correctement défini …

 

Vous devriez trouver le fichier php.ini correct =)

J’ai été dans votre situation dans le passé et la meilleure solution que j’ai trouvée a été d’utiliser une bibliothèque tierce pour diviser les fichiers en morceaux du côté client et de les rassembler sur le serveur. J’ai trouvé ceci: http://www.plupload.com/

Très pratique et efficace. Il fonctionne avec une variété de technologies différentes afin qu’il puisse fonctionner sur une grande majorité de machines client. (flash, silverlight, fichier html5 api aso …)