| auteurs : Cyberzoide, Guillaume Rossolini, kankrelune | Il existe des types de fichiers qui sont normalement interprétés par le navigateur comme étant spécifiques à une application. La dite application va s'exécuter et ouvrir le fichier.
On souhaite ne pas ouvrir cette application et forcer l'enregistrement du fichier sur le disque du client. Pour forcer l'apparition de la boîte de dialogue "Enregistrer...", il faut envoyer les entêtes HTTP adéquats au navigateur.
Exemple :
 |
Il faut impérativement précéder ce code de vérifications sur la légitimité de la demande : le fichier est-il d'un type MIME que l'on autorise au téléchargement, est-il dans un dossier accessible par les visiteurs... Sans ces vérifications, vous exposeriez votre serveur entier au téléchargement par des internautes astucieux !
|
|
lien : Comment récupérer le type d'un fichier ?
|
| auteur : Cyberzoide | Il existe dans le fichier de configuration php.ini trois directives qui limitent la taille des fichiers que le serveur est capable de charger depuis le client :
- upload_max_filesize fixe la taille maximum des fichiers chargés par les méthodes POST et PUT
- post_max_size (supérieur à upload_max_filesize) fixe la taille maximum des fichiers chargés par la méthode POST
- memory_limit (supérieur à post_max_size) fixe la taille de la mémoire du script
qui s'expriment en octets.
De plus, côté client, le formulaire HTML peut contenir le champ caché (input type=hidden) suivant : MAX_FILE_SIZE qui s'exprime lui aussi en octets. Ce dernier interdit au navigateur d'envoyer au serveur un fichier plus gros que MAX_FILE_SIZE octets.
Il existe enfin la directive max_input_time qui définit le temps maximal, en secondes, au script pour recevoir les données ; cela inclut le téléchargement du fichier. Pour de multiples fichiers, ou de gros fichiers, ou pour les utilisateurs sur de faibles connexions, la valeur par défaut de 60 secondes peut être dépassée.
Dans le cas où vous n'avez pas accès au php.ini, optez pour une connexion FTP...
|
| auteurs : Cyberzoide, stephaneey | Imaginons que vous créez un espace membre dont l'accès est sécurisé par login et mot de passe, et que vous proposiez à vos visteurs inscrits de télécharger des documents, par exemple :
http://www.monsite.fr/docs/unfichier.pdf
|
Il suffit que cette URL soit diffusée sur le Net pour que n'importe qui accède à votre fichier sans avoir à s'identifier. Une solution serait d'utiliser des fichiers de directives de configuration du serveur Apache : .htaccess et .htpasswd, mais vous vous retrouveriez avec deux systèmes d'authentification !
La solution passe par le stockage des chemins réels de vos fichiers dans une base de données et de passer un identifiant numérique à un script de téléchargement afin que celui-ci récupère le contenu du fichier en question.
Par exemple, l'URL devient :
http://www.monsite.fr/download.php?id=31
|
Le script download.php va chercher le chemin du fichier correspondant :
SELECT `path` FROM `file ` WHERE `id`= $id
|
Et en retourne le contenu au navigateur :
|
| auteur : BiD0uille | Il n'est pas possible pour des raisons évidentes de sécurité de faire ce genre d'opération. PHP s'exécute côté serveur et rien ne peut être tenté côte client sans son accord.
Autrement dit, il n'est pas possible de mettre une valeur par défaut dans un champ HTML de type FILE.
|
| auteur : BiD0uille | Il vous faut d'abord un fichier HTML pour le formulaire d'envoi.
< html >
< body >
< p >
< form method = " post " enctype = " multipart/form-data " action = " uploadfile.php " >
< input type = " file " name = " userfile " size = " 50 " >
< br >
< input type = " submit " value = " Envoi " >
< / form >
< / p >
< / body >
< / html >
|
Après avoir pressé sur le bouton "submit", le fichier est envoyé par le navigateur via le protocole HTTP et enregistré par le serveur dans le dossier des éléments temporaires (paramétrable dans le fichier de configuration php.ini).
Et maintenant le script PHP qui récupère le fichier pour le stockage dans le répertoire voulu.
< html >
< body >
<?php
$ stock = ' mettre ici le chemin où on va stocker le fichier ' ;
if (move_uploaded_file($ _FILES [ ' userfile ' ] [ ' tmp_name ' ] , $ stock . $ _FILES [ ' userfile ' ] [ ' name ' ] ))
{
echo " Le fichier " . $ _FILES [ ' userfile ' ] [ ' name ' ] .
" a été téléchargé avec succès dans " . $ stock ;
}
?>
< / body >
< / html >
|
N'oubliez pas de vérifier les droits d'écriture sur le répertoire où on a stocké le fichier.
Attention également à la fonction move_uploaded_file : si le fichier de destination existe déjà, il sera écrasé
Le client ne peut pas sélectionner plusieurs fichiers dans la boîte de dialogue du navigateur. Pour cela, on utilise une astuce : plusieurs champs <INPUT FILE> :
Fichier 1 : < input type = " file " name = " userfile[] " > < br >
Fichier 2 : < input type = " file " name = " userfile[] " > < br >
Fichier 3 : < input type = " file " name = " userfile[] " > < br >
etc
|
Dans votre script de récupération, vous aurez tout simplement l'index du fichier (démarrant à zéro) en troisième argument de tableau.
$ _FILES [ ' userfile ' ] [ ' name ' ] [ 0]
|
|
Consultez les autres F.A.Q.
Les sources présentés sur cette page sont libres de droits,
et vous pouvez les utiliser à votre convenance. Par contre cette page de présentation de ces sources constitue une oeuvre intellectuelle protégée par les droits d'auteurs.
Copyright ©2003
Developpez LLC. Tous droits réservés Developpez LLC.
Aucune reproduction, même partielle, ne peut être faite de ce site et de
l'ensemble de son contenu : textes, documents et images sans l'autorisation
expresse de Developpez LLC. Sinon vous encourez selon la loi jusqu'à 3 ans
de prison et jusqu'à 300 000 E de dommages et intérêts.
Cette page est déposée à la SACD.
|