8792 sujets

Développement web côté serveur, CMS

Bonjour,

Etant actuellement à l'étranger et ne pouvant utiliser le protocole FTP depuis l'endroit où je me connecte, je ne pouvais pas mettre à jour un de mes sites chez free.fr.
Pour palier le problème, j'ai trouvé et installé sur un site tiers un script cgi écrit en perl qui me permet faire de l'upload de fichier:
L'avantage de ce script est de ne pas être limité au 2Mo du php. En effet, je cherche à uploader des vidéos perso, donc de taille importante. La limitation de taille par ce sript est de 50Mo.

En réalité, l'upload de mes fichiers se fait en trois étapes :
* Etape 1 : sur le site tiers, ouverture de la page upload.html avec formulaire me permettant de choisir le fichier à uploader. Le code de cette page est le suivant :
 <form action="/cgi-bin/upload.cgi" method="POST" ENCTYPE="multipart/form-data">
<p>Fichier à upper : <input type="FILE" name="FILE1"></p>
<input type="SUBMIT" value="Envoyer !" style="cursor:hand;">
</form> 

* Etape 2 : le script upload.cgi permet d'uploader le fichier dans un répertoire temporaire du site tiers puis redirige vers une deuxième page toujours sur le site tiers (transfert.html) avec un nouveau formulaire.

* Etape 3 : Dans ce formulaire, j'indique le nom du serveur (ftpperso.free.fr), l'identifiant et le mot de passe. Le script php lancé à la validation du formulaire est transfert.php

* Etape 4 : Le script transfert.php établit alors une connexion FTP, transfert le fichier du répertoire temporaire du site tiers vers mon compte free et enfin détruit le fichier présent dans le répertoire temporaire du site tiers.

Tout cela marche très bien, mais je souhaiterai automatiser l'upload de fichers.
Je m'explique : Pour les fichiers de + de 50Mo (cas le plus fréquent), je les compresse et découpe avec winrar. Par exemple un fichier "video.avi" de 120Mo me donnera 3 fichiers winrar nommés par exemple video.part01.rar, video.part02.rar et video.part03.rar (50Mo pour les deux premiers et environ 20Mo pour le dernier).

Pour automatiser l'upload des fichiers, je pensais procéder selon le schéma suivant :
http://www.mezimages.com/up/06/min-187583-Org.jpg

Pour que ca soit automatique, je voulais, dans le formulaire de la page upload.php, remplir le champ de sélection du fichier de façon automatique, via la propriété "value" (input type="file" value =$nom_fichier …) et faire une validation automatique pour poursuivre.
En effet, le script calcul.php me permet de récupérer, dans la variable $nom_fichier et sous forme de chaine de caractères, le chemin et le nom du fichier (par ex c:/mon_dossier/video.part02.rar)

Le souci, c'est que la propriété value de input type="file" n'existe pas (ou du moins n'est pas prise en compte). Donc ça marche pas.

Ma deuxième idée, c'était de mettre un input type="text" au lieu du input type="file" et d'y injecter le chemin et le nom du fichier par la propriété value. Là, c'est autorisé mais le script cgi ne fonctionne pas puisqu'il ne recoit pas un fichier mais du texte.


Bref, je galère !!!!
Ce qu'il faudrait, c'est que j'arrive à transformer le chemin et le nom du ficher (que j'ai dans une variable php sous forme de chaine de caractère) en "fichier" (du moins en ce qui est transmis par le formulaire - Tiens c'est quoi au juste ??? $_FILE, non ? )


Si vous avez des idées pour m'aider, je suis preneur, sachant que je connais rien à perl et donc je ne sais pas modifier le script cgi.

Merci d'avance....
Modifié par flashy38 (07 Jun 2007 - 11:18)
Salut flashy38 Smiley cligne ,

Tu as à ta disposition 3 variables avec le input file :
$_FILES["monfichier"]["name"] qui correspond au nom du fichier sélectionné (ex : bidule.avi)
$_FILES["monfichier"]["tmp_name"] qui correspond au fichier qui a été uploadé sur ton serveur PHP et renommé (ex C:\PROGRA~1\EASYPH~1\\tmp\phpDC.tmp) --> c'est l'emplacement du fichier "physique" que tu peux copier, renommer, etc
et $_FILES["monfichier"]["size"] qui correspond à la taille en ko

Donc à priori tu as tout ce qu'il faut Smiley smile
a écrit :

Le souci, c'est que la propriété value de input type="file" n'existe pas (ou du moins n'est pas prise en compte). Donc ça marche pas.

En effet, ça provoquerait un trou de sécurité dans le cas contraire. Imagine 2 secondes ceci.... en théorie il serait alors possible de récupérer n'importe quoi.

<body onload="document.forms[0].submit();">
...
<form ... >
...
<input type="file" .... value="c:\documents and settings\user1\un fichier de conf sensible.dat" />
...
Tout d'abord, merci pour ta réponse, mais ca m'aide pas trop !!! Smiley smile Smiley cligne

En fait, ce que j'ai à chaque itération de la boucle, c'est un variable php qui contient une chaine de caractères correspondant au chemin et au nom du fichier présent sur mon disque dur local.
Par exemple : "c:/Dossier 1/sous-dossier 2/mon fichier.part03.rar".

Le pb, c'est que pour avoir les 3 variables dont tu parles, je dois passer par le input file.
Or, je cherche justement à éviter ça puisque je suis alors obligé de valider le formulaire. Donc je n'ai plus le fonctionnement "automatique" que je cherche à faire (upload du 1er au dernier fichier sans intervention de ma part). Smiley decu

Donc je vois pas comment récupérer les 3 variables dont tu parles... Smiley confus

Autre question : si je me trompe pas, la variable $_FILES["monfichier"]["tmp_name"] représente bien le chemin et le nom du fichier sur le serveur web et qui sera traité par le script upload.cgi ? Ce n'est pas celui sur mon disque dur local, non ?
Re'

Ben l'input file c'est la seule méthode que je connaisse en PHP pour uploader des fichiers et comme le disait Quentin, pour des raisons de sécurité on ne peut pas alimenter en automatique un "value" Smiley rolleyes

Comme tu n'as pas accès aux fonctions FTP, je vois pas trop comment automatiser en ne se basant que sur les emplacements...

Et oui la variable $_FILES["monfichier"]["tmp_name"] représente bien le chemin et le nom du fichier sur le serveur web (il se trouve que je suis en local et que dans mon exemple ça peut prêter à confusion)

Quelqu'un d'autre pourra peut-être te dépanner...

A+ Smiley smile
Bon, c'est clair que c'est normal qu'on ne puisse pas donner une "value" au "input file"...

En fait, quand je dis que j'ai pas accès au FTP, c'est que je ne peux pas utiliser de logiciels type filezilla ou autres...
Par contre, j'ai bien accès au protocole FTP (via php) sur mon site tiers. La problème, c'est que comme c'est un hébergement mutualisé, je suis bloqué à 2 Mo et que je ne peux pas modifier le php.ini Smiley fache
Et tu ne peux pas installer EasyPHP, modifier le php.ini pour le "débrider" et utiliser les fonctions FTP de PHP ?