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!
Vous avez besoin d'une valeur appropriée pour les paramètres php.ini suivants:
et peut-être
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 fichiersupload_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 demandeLimitRequestBody
Limite la taille totale du corps de la requête HTTP envoyé par le client.Il y en a probablement plus que cela.
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.
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 ().
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.
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
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.
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.
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.
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é.