J'ai une application Web qui accepte les téléchargements de fichiers allant jusqu'à 4 Mo. Le script côté serveur est PHP et le serveur Web est NGINX. De nombreux utilisateurs ont demandé d'augmenter considérablement cette limite afin de permettre le téléchargement de vidéos, etc.
Cependant, il semble qu'il n'y ait pas de solution facile à ce problème avec PHP. Premièrement, du côté du client, je recherche quelque chose qui me permettrait de couper des fichiers pendant le transfert. SWFUpload ne semble pas faire cela. Je suppose que je peux diffuser du contenu en utilisant Java FX ( http://blogs.Oracle.com/rakeshmenonp/entry/javafx_upload_file ) mais je ne trouve aucun équivalent de request.getInputStream en PHP.
Augmenter les limites du navigateur client_post ou le téléchargement php.ini ou max_execution
fois n'est pas vraiment une solution pour les fichiers très volumineux (~ 1 Go) car le navigateur va peut-être expirer et penser à toutes les blobs stockées en mémoire.
Existe-t-il un moyen de résoudre ce problème en utilisant PHP côté serveur? J'apprécierais vos réponses.
plupload est une bibliothèque javascript/php, très facile à utiliser et qui permet le chunking.
Il utilise HTML5 si.
J'ai créé un client JavaFX pour envoyer des fichiers volumineux en morceaux de taille maximale (j'utilise 2 Mo) et un script récepteur PHP pour assembler les morceaux en fichier d'origine. Je publie le code sous licence Apache ici: http://code.google.com/p/gigaupload/ N'hésitez pas à utiliser/modifier/distribuer.
"mais je ne trouve aucun équivalent de request.getInputStream en PHP."
fopen('php://input');
peut-être?
Essayez d’utiliser la variable bigupload
script. Il est très facile à intégrer et peut télécharger jusqu'à 2 Gb en morceaux. La taille du bloc est personnalisable.
Jetez un coup d'œil à tus protocol qui est un protocole basé sur HTTP pour les téléchargements de fichiers pouvant être repris afin que vous puissiez continuer là où vous l'avez laissé sans re-télécharger à nouveau des données entières en cas d'interruption. Ce protocole a également été adopté par vimeo à partir de mai 2017.
Vous pouvez trouver différentes implémentations du protocole dans différentes langues ici . Dans votre cas, vous pouvez utiliser son client javascript appelé uppy et utiliser golang ou php basé sur un serveur.
Pourquoi ne pas utiliser un applet Java pour le téléchargement et PHP pour le traitement ..
Vous pouvez trouver ici un exemple pour Jupload: http://sourceforge.net/apps/mediawiki/jupload/index.php?title=PHP_Example
vous pouvez utiliser ce paquet
il prend en charge le téléchargement de morceaux pouvant être repris.
dans l'exemple exemples/js-exemples/resumable-chunk-upload, vous pouvez fermer et rouvrir le navigateur, puis reprendre les téléchargements non terminés.