web-dev-qa-db-fra.com

Les envois de fichiers peuvent-ils expirer en PHP?

Salut, je suis assez nouveau en PHP, j'ai créé un formulaire pour les très gros fichiers csv à télécharger sur mon serveur. Quelqu'un m'a mentionné que le navigateur peut expirer en raison du fichier trop gros, est-ce vrai? et si oui, peut-il être empêché?

Merci de votre aide!

33
Ben McRae

Vous avez besoin d'une valeur appropriée pour les paramètres php.ini suivants:

  1. max_input_time (pas max_execution_time!)
  2. upload_max_filesize
  3. post_max_size

et peut-être

  1. memory_limit
56
Ionuț G. Stan

Certaines directives de configuration peuvent entraîner l'échec d'importants téléchargements si leurs valeurs sont trop petites:

PHP

  • max_input_time Durée maximale, en secondes, d'un script permettant d'analyser les données d'entrée, telles que les transferts POST, GET et de fichiers
  • upload_max_filesize Taille maximale d'un fichier téléchargé.
  • post_max_size Taille maximale des données de publication autorisée.

Apache

  • TimeOut Durée pendant laquelle le serveur attend certains événements avant de faire échouer une demande
  • LimitRequestBody Limite la taille totale du corps de la requête HTTP envoyé par le client.

Il y en a probablement plus que cela.

30
Gumbo

Un bon moyen de contourner la mauvaise gestion des envois de fichiers volumineux en php consiste à utiliser un outil de téléchargement tel que JUpload , qui scindera le fichier en morceaux avant de les envoyer. Cela offre également à vos utilisateurs l’avantage de recevoir un bon retour d’avancement lors du téléchargement et de télécharger plusieurs fichiers en une fois.

5
Ronny Vindenes

Lors du téléchargement de très gros fichiers, vous devez modifier 4 variables de configuration:

  • upload_max_filesize
  • post_max_size
  • memory_limit
  • time_limit

La limite de temps peut être augmentée à l'exécution avec set_time_limit ().

3
vartec

Un script est autorisé à s'exécuter, par défaut, pendant environ 30 secondes. Vous pouvez utiliser la fonction set_time_limit () pour modifier cela. De plus, si votre utilisateur doit télécharger des fichiers volumineux, vous devrez modifier les valeurs post_max_size et/ou upload_max_filesize dans votre fichier php.ini.

En outre, si vous souhaitez simplement prolonger votre délai d'expiration globalement, vous pouvez modifier le temps d'exécution maximal dans php.ini.

2
Beep beep

J'ai pu résoudre ce problème en utilisant les paramètres suivants, vous pouvez utiliser différentes valeurs mais vous avez l'idée:

Pour mon serveur, je mets ces lignes dans un fichier ".user.ini" dans le répertoire du script, votre serveur peut rechercher un fichier différent. Si vous faites un phpinfo ("user_ini.filename") sur le serveur, il sera recraché. le fichier dont vous avez besoin pour mettre vos valeurs dans

max_execution_time = 1800
max_input_time = -1
post_max_size = 100M
upload_max_filesize = 100M
memory_limit = 256M
1
Jim B

Oui c'est vrai. Le téléchargement de fichier est effectué via une demande POST] et les demandes en général sont soumises à un délai d'expiration. Vous devriez pouvoir reconfigurer votre environnement pour un délai d'attente plus long.

1
Ates Goral

Ma réponse n’est pas directement liée à votre question initiale, mais si vous avez un équilibreur de charge par proxy inverse devant votre script PHP, il peut expirer ou bloquer les transferts volumineux. Vérifiez toujours la configuration de votre équilibreur de charge si vous prenez en charge le téléchargement de fichiers. Tout comme PHP, la plupart des paramètres par défaut des équilibreurs de charge pour les téléchargements sont plutôt petits.

1
Cory R. King

Ce ne sont pas seulement les délais d'attente qui peuvent causer des problèmes. La taille maximale des fichiers pouvant être téléchargés est limitée. Ces limites peuvent être modifiées dans le fichier php.ini:

post_max_size
upload_max_filesize limite_mémoire

Consultez http://fr.php.net/ini.core pour plus de détails.

1
macleojw

Si la modification de l'un des paramètres ci-dessus ne semble pas faire de différence, il est possible qu'un formulaire HTML contienne le nom MAX_FILE_SIZE sous forme de champ masqué.

<input type="hidden" name="MAX_FILE_SIZE" value="10000000">

Dans l'exemple ci-dessus, aucun fichier de plus de 10 Mo ne sera téléchargé.

0
David Robertson