Bonjour à tous,

Je suis développeur assez expérimenté (+ 10 ans) mais malgré moi je n'ai jamais eu à travailler sur l'upload de vidéos, le cas ne s'est jamais présenté et ne m'a pas spécialement intéressé. J'ai cependant bien évidemment eu à uploader des images et les manipuler. Cependant à présent, ma patronne me demande de permettre cela pour des vidéos vraiment lourde, pourvant atteinte 1 Go, du coup c'est plus du tout la même chose il me semble ...

Si je connais bien évidemment les variables PHP pour augmenter les possibilités, je n'ai aucune piste de réflexion pour mettre en place ce genre de choses ... je me dis qu'un simple formulaire PHP + javascript (pour évaluer le % uploadé) n'est probablement pas adapté.

Il y a quelques années, j'ai lu par ci par la que PHP n'était pas adapté pour l'upload de gros fichiers et qu'il valait mieux passer par des Websocket mais la encore, je ne m'y suis pas spécialement intéressé et je ne sais pas si c'est encore valide ... (je me passionne sur plein de choses, les nouveautés des frameworks & co. mais vraiment, l'upload de gros fichiers ne s'est jamais avéré utile pour moi)

Auriez-vous des pistes de réflexion pour réaliser ce genre de choses ? J'utilise Symfony 3.3 mais j'aimerai me passer de Bundle / Script tout fait, ne serait-ce que pour apprendre. Je testerai bien de développer un banal script PHP / Javascript mais j'ai des doutes sur la capacité d'un navigateur + Apache + Php + Js à uploader de tels fichiers ... il doit bien y avoir une solution "idéale" surtout que c'est assez à la mode l'uploads de lourds fichiers (Youtube, dailymotion, tous les clouds qu'ils soient connus ou moins).

Merci d'avance :)

5 réponses


dans la théorie, php peut faire ca...

mais par contre, tu va t'amuser avec la conf de php...

memory_limit = 2048M
upload_max_filesize = 1024M
post_max_size = 2048M
set_timeout = 0

voila en gros les variables auxquelles toucher... (j'en oublie peut etre... je fait ca de tete) tu peux mettre ca directement dans ta fonction d'upload, ou dans un htaccess pour débrider ton serveur uniquement sur l'upload... parce que sinon, c'est la vanne ouverte au grand n'importe quoi.... et donc danger... manquerai plus que des gens te balancent des fichiers txt d'1Go dur un formulaire de contact juste pour te poutrer ton serveur...

Merci de ta réponse :)

Comme indiqué, je connais les variables PHP permettant d'augmenter la limite. C'est plus sur la pertinence de cela que je m'interroge, je me demande si je ne vais pas droit dans le mur ; ces trechnologies sont-elles réellement adaptées à cela ?

Je veux dire ... sur des images et petits fichiers, OK, mais la, 1Go ... entre les micro-coupures et compagnie, est-ce pertinent d'utiliser PHP ? Qu'utilisent tous ces sites, petits et gros, pour proposer cela tout en étant stable ?

Peut-être que mon questionnement est hors-sujet ^^

Bonjour.
Grafikart avait réalisé un tutoriel qui pourrait t'être utile : Tutoriel Vidéo PHP » Téléchargement sécurisé.
En lisant la description du tutoriel tu devrais rapidement comprendre pourquoi il devrait t'être utile.

Salut.

Levons directement les idées reçus, tout les langages serveurs sont apte à gérer l'upload de gros fichier, et ceux de façon complétement performante. La problématique n'est pas le langage mais plutôt la technique à utiliser derrière.

Commençons par la fin, la technique développé juste après peut fonctionner en AJax ou WebSocket. N'importe quel langage acceptera les deux implémentations (et bien-sûr php y compris).

Pour upload un gros fichier, il faut le fragmenter, une fois ça fait, on envoie par packet le dit fichier, celui ci sera reconstruit coté serveur avec chacun des packets. Une fois l'envoie de tout les packets fait, on considère le fichier uploadé.

Pour faire cela coté navigateur, nous devons convertir le gros fichier en blob.

Une fois chose faites, tu auras une chaine de caractère, tu peux donc spit en packet de N charactères ta chaine et enfin l'envoyer au serveur.

Les gros sites que tu sites le font via websocket pour avoir une meilleur réactivité de ton interface (surtout le calcule de progression), éviter des requêtes inutiles etc.

Pour gérer les micro-coupures, cela complexifie grandement le code. Il faut calculer le checksum de ton blob. Dire au serveur que tu vas upload ce fichier là. Il te répond si il le connait et si il a déjà des packets en mémoire, l'upload peut donc reprendre là où ça c'est finis. Une fois tout le blob complet coté serveur il te suffit d'écrire le blob dans un fichier

Enfin coté serveur, tu devras avoir un cron permettant de nétoyer les fichiers incomplet vieu de plus de N temps.

Bonjour,
J'avais déjà réfléchi à un truc du genre mais jamais mis en place.

L'idée est de splitter le fichier en Jquery, générer un identifiant unique (ou le demander au serveur) puis envoyer les différentes parties du fichier avec le uid du fichier, le numéro de partie et tu peux les stocker tels quels en BDD et tu les merges à la lecture.

Pour le js où ton champ fichier a pour ID fichier

var file = new FileReader()
file.readAsArrayBuffer($('#fichier')[0].files[0])
content = new Uint8Array(file.result);

Voila pour le début.

A plus.