6
votes

Téléchargement de fichier de 1 Go à l'aide de PHP

J'essaie de télécharger un fichier de taille 1 Go à l'aide du script PHP et fonctionne parfaitement si la taille du fichier est inférieure à 20 Mo, mais lorsque j'augmente la taille du fichier qu'après avoir appuyé sur le bouton de téléchargement sur site Web, il télécharge le fichier (je suppose Comme il faut quelques minutes) et après cela, pour exécuter upload.php, mon firefox me demande de télécharger upload.php, donc je suppose que le fichier est en cours de téléchargement, mais mon script PHP ne parvient pas à exécuter.

Aussi après la recherche dans Google, j'ai trouvé des paramètres suivants pour php.ini que j'ai fabriqués et ma fonction php_info () me montre que les paramètres ont été modifiés.

/ * php.ini commence * /

memory_limit = 512m

post_max_size = 15000m

fichier_uploads = sur

upload_max_filesize = 15000m

max_input_time = 20000

max_execution_time = 20000

session.gc_maxlifetime = 20000

/ * php.ini fin * /


3 commentaires

En fait, je fais un site Web qui peut télécharger des fichiers et que l'utilisateur peut partager le lien de fichier avec d'autres utilisateurs ...


En tant que note latérale: Si vous téléchargez un fichier 1 Go, vous devez utiliser un téléchargeur de flash (quel Gmail / YouTube / etc UTILISER pour le téléchargement avancé) car il permet une traînée et une perte faciles, mais surtout, une barre de progrès attrayante visuellement .


@Kranu, votre idée est très bonne, elle augmentera certainement la convivialité .. Je vais le faire une fois que j'ai trouvé la solution de ma problématique ...


3 Réponses :


1
votes

Vérifiez que votre serveur Web permet également de tels téléchargements importants. Sur Apache, le réglage est LimileRequestbody . Cette limite est appliquée bien avant que PHP ne pénètre jamais dans l'image et ne peut pas être modifié / envahi de la PHP.


0 commentaires

7
votes

La limite des téléchargements de taille de fichier est limitée par beaucoup plus que PHP. PHP a ses limites, Apache a ses limites, de nombreux services Web ont leurs propres limites, puis vous avez la limite de la taille du répertoire TMP qui pourrait être définie par des autorisations utilisateur sur un hôte partagé. Sans parler de ne pas manquer d'espace disque!

Votre php.ini a l'air bien, mais comme on l'a déjà suggéré - Vérifiez le fonctionnement limiteRequest à Apache et assurez-vous que votre service Web le permet.

Une solution commune Lorsque vous devez télécharger de très gros fichiers consiste à utiliser Flash ou Java sur le côté client, car ils ont accès au système de fichiers actuel du client. Le flash / Java peut ensuite casser le fichier en petits morceaux qui sont envoyés un à la fois et réassemblés du côté serveur. Cela a de multiples avantages. Tout d'abord, vous pouvez reprendre des téléchargements brisés. Deuxièmement, vous n'avez pas à vous soucier des scripts chronométrés. Troisièmement, il contourne toutes les limites de système de fichiers éventuelles pouvant être en jeu à partir de PHP, Apache, des services Web ou d'autres sources.


2 commentaires

Steven, maintenant je suis capable de télécharger un fichier 100MB en ajoutant un fichier .htaccess dans mon dossier de site Web, c'est comme ci-dessous: rewriteEngine sur rewriteCond% {Server_Port} 80 réécriteconde% {requier_uri} myUploadFolder Rewriterule ^ (. *) $ mywebsite.com/index.html [r, l] php_value max_int_time 0 Je pense que votre suggestion peut m'aider à télécharger autour de 1 Go de fichier 1 Go, mais lorsque j'essaie d'ajouter de la limiteRequesse dans ce fichier .htaccess, je reçois une erreur de serveur interne 500, alors pouvez-vous me dire où je devrait faire des changements et comment pour la silencieuse.


httpd.apache.org/docs/current/mod/core.html# LimiteRequestbody Assurez-vous de spécifier en octets limitRequestbody 1073741824 et assurez-vous également que votre serveur Web permet à cette commande. Certains serveurs Web ont un contrôle externe en place pour vous assurer que trop de données ne sont pas envoyées dans une seule demande. Cela sauve leur bande passante et les sauve finalement de l'argent. Si cela le permet, vous devriez pouvoir le placer à la fin de votre fichier .htaccess. Je recommande de la mettre dans le même dossier que votre script de téléchargement pour empêcher les attaques de DOS sur votre WeBroot.



1
votes

post_max_size = 15000m devrait être supérieur à celui upload_max_filesize = 15000m . Il peut être soit post_max_size = 15001m . J'ai augmenté pour 1 plus.


0 commentaires