Modifier la taille maximale du fichier de téléchargement

513

J'ai un site Web hébergé sur un PC auquel je n'ai pas accès. J'ai un formulaire de téléchargement permettant aux gens de télécharger des fichiers mp3 jusqu'à 30 Mo de large. Mon script côté serveur se fait en PHP.

Chaque fois que j'essaie de télécharger un fichier, je reçois une erreur indiquant que le fichier dépasse la taille maximale autorisée, j'ai donc besoin d'augmenter la taille. Mes recherches sur le Web ont suggéré de modifier le .htaccessfichier auquel je n'ai pas accès, donc cela ne fonctionnera pas. D'autres ont suggéré que j'ajoute php.inià ma racine un fichier personnalisé qui ne fonctionnait pas. D'autres suggestions?

Yo Momma
la source

Réponses:

877

Vous devez définir la valeur de upload_max_filesizeet post_max_sizedans votre php.ini:

; Maximum allowed size for uploaded files.
upload_max_filesize = 40M

; Must be greater than or equal to upload_max_filesize
post_max_size = 40M

Après avoir modifié les fichiers php.ini, vous devez redémarrer votre serveur HTTP pour utiliser la nouvelle configuration.

Si vous ne pouvez pas modifier votre php.ini, vous n'avez pas de chance. Vous ne pouvez pas modifier ces valeurs au moment de l'exécution; les téléchargements de fichiers supérieurs à la valeur spécifiée dans php.ini auront échoué au moment où l'exécution atteindra votre appel à ini_set.

Voir la description des principales directives php.ini .

meagar
la source
4
connaissez-vous peut-être l'itinéraire par défaut dans lequel le fichier php.ini est stocké?
Yo Momma
1
Sous Linux, il se trouve généralement dans / etc / php / ou quelque chose du genre. Si vous êtes sur un serveur partagé, vous n'avez pas de chance à moins que votre hébergeur ne soit assez généreux pour fournir un fichier php.ini par utilisateur.
Johannes Gorset
4
Si vous utilisez WAMP sous Windows, vous pouvez le modifier en cliquant sur l'icône WAMP> PHP -> php.ini. Dans Debian, mon fichier de configuration se trouve dans / etc / php5 / apache2.
meagar
19
Je suggère de définir une taille plus élevée post_max_size. La taille globale des champs publiés peut être supérieure à la taille du fichier, donc si vous rencontrez le cas de bord de quelqu'un qui télécharge un fichier de 40 Mo, il échouera en raison d'un dépassement post_max_size.
Acme
2
Veuillez noter que memory_limit limite également la taille de téléchargement.
Daniel
151

Vous pouvez le modifier via un .htaccessfichier.

.htaccessles fichiers sont stockés dans le même répertoire que vos .phpfichiers. Ils modifient la configuration de ce dossier et de tous les sous-dossiers. Vous les utilisez simplement en créant un .htaccessfichier dans le répertoire de votre choix (ou modifiez-le s'il est présent).

Les éléments suivants devraient vous permettre d'augmenter votre limite de téléchargement (si le fournisseur de serveur autorise les modifications de configuration PHP via .htaccess).

php_value upload_max_filesize 40M
php_value post_max_size 42M
Andrew Moore
la source
3
Il semble que cela ne fonctionne pas toujours. Sur mes machines de développement, définir la valeur appropriée dans .htaccess a fait le travail. Sur l'hébergement partagé, cependant, ce paramètre ne fonctionne pas, mais le message d'erreur indique que la taille de téléchargement maximale autorisée est la valeur que j'ai définie dans .htaccess. Donc, une situation très étrange se produit.
Eugeniu Torica
5
On dirait que l'ajout dans le .htaccess ne fonctionne que si vous exécutez Apache. Essayez-le et fonctionne très bien pour moi.
AngelGris
Cela ne fonctionne pas si ces 2 lignes dans php.ini n'étaient pas commentées :; Nom des fichiers php.ini (.htaccess) définis par l'utilisateur. La valeur par défaut est ".user.ini" ;user_ini.filename = ".user.ini" ; Pour désactiver cette fonction, définissez cette option sur une valeur vide;user_ini.filename =
Alan Deep
Il convient de noter que si vous utilisez apache CGI ou Fast CGI, cela entraînera 500 erreurs. Enveloppez-le dans <IfModule mod_php7.c> </IfModule>
Shardj
59

J'ai eu le même problème et j'ai créé un fichier .user.ini et l'ai placé dans le répertoire dans lequel se trouvait le script de téléchargement. À l'intérieur de ce fichier, j'ai défini ces deux valeurs:

  upload_max_filesize = 40M

  post_max_size = 40M

et cela a très bien fonctionné pour moi!

user1641252
la source
2
Génial. Fonctionne également avec fastcgi. Nécessite PHP5.3 ou plus récent.
Ciantic
1
Ok, cela a fonctionné sur un serveur partagé quand rien d'autre ne fonctionnait. Super trouvaille.
Edward Potter
55

Vous pouvez également utiliser la fonction ini_set (uniquement pour la version PHP inférieure à 5.3):

ini_set('post_max_size', '64M');
ini_set('upload_max_filesize', '64M');

Comme l'a dit @acme, en php 5.3 et supérieur, ces paramètres sont des directives PHP_INI_PERDIR donc ils ne peuvent pas être définis en utilisant ini_set. Vous pouvez utiliser user.ini à la place.

Manjar
la source
38
Dans les versions récentes de PHP, ces paramètres ini sont uniquement PHP_INI_PERDIR , vous ne pouvez donc pas les définir dans votre script. Voir ici pour plus de détails.
Acme
46

Pour localiser le fichier ini, exécutez d'abord

php -i | grep -i "loaded configuration file"

Ouvrez ensuite le fichier et modifiez

upload_max_filesize = 2M
post_max_size = 2M

remplacer le 2M par la taille souhaitée, par exemple 100M.

J'ai aussi un article de blog avec un peu plus d'informations http://www.seanbehan.com/how-to-increase-or-change-the-file-upload-size-in-the-php-ini- fichier-pour-wordpress

seanbehan
la source
5
Il montre le fichier comme /etc/php5/cli/php.inimais mon fichier de configuration l'est /etc/php5/apache2/php.ini. Une sorte de tromperie.
Fredrick Gauss
Il y a 2 fichiers php.ini ... et avec cette commande en réponse, il vous montre lequel utilisez-vous! Vous devez donc apporter des modifications pour prendre effet!
lewis4u
40

J'ai le même problème dans le passé .. et je l'ai résolu via un .htaccessfichier

Lorsque vous apportez des modifications à la configuration de php, .htaccessvous devez mettre les configurations dans la IfModulebalise, à l'exception de l' erreur du serveur interne .

Ceci est un exemple, cela fonctionne bien pour moi:

<IfModule mod_php5.c>
   php_value upload_max_filesize 40M
   php_value post_max_size 40M
</IfModule>

Et c'est la référence php si vous voulez en savoir plus. http://php.net/manual/en/configuration.changes.php

Eyad Farra
la source
5
Pourvu que vous ayez des capacités de substitution.
AbsoluteƵERØ
3
Pour prendre en charge PHP.7, ajoutez le même bloc avec: <IfModule mod_php7.c>
Mostafa
16

J'ai résolu ce problème en créant un fichier appelé .user.inidans le répertoire où résident les scripts de fichiers PHP (cela signifie que tout script PHP dans ce répertoire obtient la nouvelle taille limite de fichier)

Le contenu de .user.iniétait:

upload_max_filesize = 40M
post_max_size = 40M
Pearce
la source
2
C'est la solution pour moi. Fonctionne très bien. Si vous utilisez un framework comme codeignitor, ".user.ini" doit être au même endroit que index.php
The Dude
Merci. Ça marche pour moi. C'est idéal pour l'hébergement mutualisé, où vous n'avez pas accès à php.ini. J'ajouterais simplement qu'il est disponible depuis PHP 5.3
yacsha
6

J'ai eu le même problème. J'ai essayé trois façons qui étaient généralement suggérées:

  1. functions.php
  2. php.ini
  3. .htaccess

aucun si cela a résolu mon problème. J'utilise godaddy et suis tombé sur une solution suggérée qui était:

  1. arrivé à Hébergement Web , puis Gérer
  2. Sous Logiciel, sélectionnez Sélectionner la version PHP
  3. Sélectionnez Switch to PHP Options dans le coin supérieur droit du tableau dans la couleur de la police: bleu
  4. En bas, vous aurez probablement upload_max_filesize = 2M
  5. Maintenant, n'hésitez pas à le changer
  6. Assurez-vous de cliquer sur le bouton Enregistrer !
  7. Allez maintenant dans votre panneau wp-admin, sélectionnez Média puis Ajouter

Voila! Vous avez maintenant une taille de fichier de téléchargement maximale différente :)

nrmb
la source
6

plusieurs fois, j'ai remarqué que le site avec un hébergement partagé ne permet pas de modifier les paramètres des fichiers php.ini. on ne peut même pas du tout créer de fichier .htaaccess. dans une telle situation, on peut essayer de suivre les choses

ini_set('upload_max_filesize', '10M');
ini_set('post_max_size', '10M');
ini_set('max_input_time', 300);
ini_set('max_execution_time', 300);
L'Académie EasyLearn
la source
6

les réponses sont un peu incomplètes, 3 choses à faire

dans php.ini de votre installation php (remarque: selon que vous le souhaitez pour CLI, apache ou nginx, trouvez le bon php.ini à manipuler. Pour nginx, il est généralement situé /etc/php/7.1/fpmlà où 7.1 dépend de votre version. Pour apache généralement /etc/php/7.1/apache2)

post_max_size=500M

upload_max_filesize=500M

memory_limit=900M

ou définissez d'autres valeurs. Redémarrez / rechargez apache si vous avez installé apache ou php-fpm pour nginx si vous utilisez nginx.

Toskan
la source
5

Eh bien, je voudrais ajouter mes 2 cents ici.

J'utilise l'hébergement Web partagé et j'ai résolu ce problème plusieurs fois, j'ai essayé de le résoudre moi-même mais en vain. Enfin, j'ai réussi à le résoudre en vérifiant diverses sources Web et en contactant mon fournisseur de services d'hébergement. Mes questions étaient "Comment puis-je changer la valeur php memory_limitdans l'hébergement web partagé?", "Comment puis-je changer la valeur php upload_max_filesizedans l'hébergement web partagé?", "Comment puis-je changer la valeur php max_input_varsdans l'hébergement web partagé?", "Comment puis-je changer la valeur php max_execution_timedans hébergement Web partagé? "," Comment puis-je modifier la valeur php max_input_timedans l'hébergement Web partagé? " et bien d'autres encore en configurant ou en modifiant php.ini ou .htaccessfichier. J'ai essayé de les changer mais des problèmes sont survenus. Enfin, j'ai contacté mon hébergeur, et il s'avère que j'ai défini mon php en natif, ils l'ont changé en php 5.6,

"Votre PHP a été réglé sur le mode" natif ", ce qui signifie que vous ne pouvez pas remplacer ces valeurs. Je vous ai changé pour" 5.6 "donc vous devriez être prêt à partir."

Après cela, j'ai connecté mon site Web via ftp Filezilla, n'oubliez pas de faire à la fois votre service ftp pour afficher les fichiers cachés et votre ordinateur local pour le faire, car le .htaccessfichier a été caché dans mon ordinateur portable local et sur mon site Web. Il était disponible dans le dossier public_html, je viens de le télécharger et j'ai ajouté les codes suivants à la fin du fichier, puis je l'ai téléchargé à nouveau sur le serveur:

php_value memory_limit 256M
php_value post_max_size 256M
php_value upload_max_filesize 64M
php_value max_input_vars 1800
php_value max_execution_time 300
php_value max_input_time 300

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

entrez la description de l'image ici

Tout fonctionne correctement pour le moment, si vous êtes confronté à des problèmes, veuillez écrire ici et m'avertir afin que je puisse modifier les codes ci-dessus. Soit dit en passant, je télécharge également quelques photos qui montrent le changement.

Une autre chose que j'ai presque oublié de mentionner l'installation de ZipArchive sur votre service d'hébergement Web partagé, j'ai réussi à cocher cette condition en accédant simplement aux paramètres php via mon cpanel, en cliquant sur les extensions du sélecteur php, puis en cochant la section zip, c'est tout.

Merci.

PS: Je suis ouvert aux bonnes pratiques, et si vous voyez des mauvaises pratiques ici, faites-le moi savoir, je vais essayer de les changer. Merci.

garakchy
la source
4

Peut-être que cela devrait être un commentaire à @ seanb123 et @Fredrick Gauss commentant son commentaire, mais pour moi dans Drupal 8.1 avec PHP 7, le fichier que je devais modifier était situé ici:

/etc/php/7.0/apache2/php.ini

J'ai probablement modifié quatre autres fichiers php.ini, y compris celui que mon système a appelé le "fichier de configuration chargé" ( php -i | grep -i "loaded configuration file") et celui trouvé sur la page info.php, mais aucun d'eux n'a aidé. La clé pour découvrir le bon chemin a été trouvée sur un site à partir de 2012. Ils ont dit que le chemin "/etc/php5/apache2/php.ini"était obsolète même EN ARRIÈRE, mais cela m'a donné un indice où le trouver. Pour PHP7, c'est un peu différent de PHP5 mais le concept est le même.

Peut-être que cela aidera certains schmuck autrement impuissants comme moi.

Cela étant dit, la réponse à l'OP dans mon cas serait que quelqu'un avec des privilèges d'administrateur sur la boîte devrait le faire.

Le site qui m'a aidé: http://www.evilbox.ro/linux/remove-ispconfig-maximum-upload-size-of-2m-for-wordpress/

Ceci est également traité ici: Importer la limite de taille de fichier dans PHPMyAdmin

EDIT: le texte intégral de ma note pour moi:

Afin de modifier la taille de téléchargement maximale, modifiez upload_max_filesize et [si nécessaire?] Post_max_size dans /etc/php/7.0/apache2/php.ini (ou dans les anciennes versions: /etc/php5/apache2/php.ini)

/etc/init.d/apache2 redémarrer

MODIFIER ENCORE: puisque vous importez de gros fichiers, vous devrez peut-être modifier le délai d'expiration pour les traiter. Dans mon cas, le fichier nommé "config.default.php" a été trouvé /usr/share/phpmyadmin/libraries/config.default.phpavec la variable $cfg['ExecTimeLimit'] = 300; J'ai changé le mien en 900 pour une importation énorme, par exemple. Ensuite, vous devez redémarrer Apache

saisir la carpe
la source
3

Aucune de ces solutions ne fonctionne pour moi !! (déjà réglé à 32M par défaut). Le problème est dans la plupart des casmax_allowed_packet

Je travaille sur localhost et utilise MAMP.

Voici des solutions;

1. Si vous n'avez pas my.ini

Ajouter

--max_allowed_packet=168435456

À

...\MAMP\bin\startMysql.sh

2. Si vous avez my.ini

En dessous de

[mysqld]

Ajouter

max_allowed_packet=100M

TERMINÉ!

ErcanE
la source
Ajout de max_allowed_packet = 128M à la fois à php.ini et .user.ini et cela l'a fait pour moi!
Molasar
2

Trois choses que vous devez vérifier.

upload_max_filesize, memory_limitEt post_max_sizedans le fichier de configuration php.ini exactement.

Ces trois paramètres limitent la taille maximale des données pouvant être soumises et traitées par PHP.

Typiquement post_max_sizeet memory_limitdoivent être plus grands que upload_max_filesize.


Donc, trois variables au total que vous devez vérifier pour être absolument sûr.

prosti
la source
2

Avec tout WAMPcela est assez facile

WAMP Icône> PHP> Paramètres PHP> upload_max_filesize = nM> n = (2M, 4M, 8M, 16M, 32M, 64M, 128M, 256M, 512M ou Choose (personnalisé)).

Le ou les services se rechargent automatiquement.

Mais, si vous n'avez vraiment pas accès au serveur, vous voudrez peut-être explorer l'écriture d'une chunkingAPI.

SimonB
la source
0

J'ai également eu ce problème et l'ai résolu en définissant ce paramètre dans /etc/nginx/nginx.conf

client_max_body_size 0;

0, comme en illimité.

Et aussi, si vous avez un proxy inverse fonctionnant avec nginx, ce serveur devrait également avoir ce paramètre (c'est ce qui m'a jeté ici)

Typewar
la source
0

Si vous avez modifié le bon fichier php.ini, redémarré Apache ou Nginx et ne fonctionne toujours pas, vous devez également redémarrer php-fpm :

sudo service php-fpm restart 
Adrian Onu
la source
0

Comme changer à l'échelle mondiale est quelque peu risqué, j'essayais d'augmenter la valeur de téléchargement maximale pour un seul script big_file_upload.php . Pour une raison quelconque, cela ini_setn'a pas aidé. Après quelques recherches, j'ai trouvé cela. Mettez-le .htaccess(sauf si le nom a changé via AccessFileName)

<If "%{REQUEST_URI} == '/subfolder/big_file_upload.php'" >
php_value upload_max_filesize 200M
php_value post_max_size 200M
</If>
<Else>
php_value upload_max_filesize 1M
php_value post_max_size 1M
</Else>

A travaillé pour moi.

Hebe
la source