PHP: télécharger un fichier à partir de ftp-serveur de disque dur?
j'ai vraiment vraiment besoin de votre aide. Je suis avec succès configuration d'une connexion à mon serveur ftp. Cependant, je ne peux pas comprendre comment je peux télécharger une dynamique de fichier à partir de mon serveur. Je suppose que cela aiderait beaucoup de personnes parce que je n'arrivais pas à trouver un tuto ou explication n'importe où sur le web.
Je suis tout simplement une liste de tous mes fichiers sur mon ftp. Si je clique sur celui que j'appelle download.php qui se connecte à nouveau sur le serveur et doit télécharger le fichier sur mon disque dur. J'ai été en mesure de s'auto-invite une fenêtre de téléchargement et un fichier est téléchargé de mon disque dur. cependant, seul un fichier endommagé où aucun en-tête sont fixés.
/* path to files on ftp server … e.g. /folder/folder/name_of_file.jpg */
$p_arr = explode("/", $path);
/* the file name … e.g name_of_file.jpg */
$file = end($p_arr);
//$finfo = finfo_open(FILEINFO_MIME_TYPE); //returns a fatal error - function not found
//$mimetype = finfo_file($finfo, $file);
//finfo_close($finfo);
//filetype($file)
/* creating a temporyry file to save to */
$tempFile = tempnam("/tmp", "FOO");
if(ftp_get($conn_id, $tempFile, $file, FTP_BINARY)){
/*header Content-type: must be dynamic*/
//header('Content-type:' . $mimetype);
/*header to auto_prompt download window*/
header('Content-Disposition: attachment; filename="'. $file .'"');
readfile($tempFile);
} else {
echo "There was a problem <br>";
echo $file . "<br>"; //e.g. image.jpg
}
/* deleting the file after the process */
//unlink($tempFile);
1.) je ne peux pas comprendre pourquoi ftp_get renvoie la valeur false. La connexion est en place et que le fichier existe dans le répertoire adéquat.
2.) je ne sais pas comment je peux trouver le type mime du fichier sur le serveur et de lui donner le fichier téléchargé, il n'est pas endommagé.
s'il vous plaît aidez-moi ici, je suis vraiment coincé. je vous remercie à l'avance
Vous devez vous connecter pour publier un commentaire.
Essayez de l'enregistrer localement d'abord, puis le pousser à revenir au navigateur.
Utiliser ce code pour enregistrer votre fichier localement.
J'ai aussi trouvé ceci, peut-être il pourrait vous aider à
tempnam()
Lorsque j'ai utilisé
tempnam()
il a changé l'extension de fichier.tmp
. Cela peut provoquer des problèmes, donc je ne recommande pas de faire de cette façon. À tout le moins, vous devriez changer l'extension en arrière à ce qu'il était dans le nom de fichier d'origine.Vous pouvez atteindre cet objectif en utilisant
pathinfo()
en conjonction avec regexp etrename()
, après vous avez ftp ed le fichier.type mime
Concernant le type mime: Vous avez seulement besoin de cette information si vous souhaitez que le navigateur affichage le fichier que vous envoyez à l'utilisateur. Pour les téléchargements, le navigateur ne doit connaître que c'est un fichier binaire, et le navigateur ou l'utilisateur peut le deviner à partir de l'extension.
Si vous voulez toujours vérifier le type mime, vous aurez à attendre jusqu'à ce que le fichier est sur votre serveur, le mime code de vérification va aller à l'intérieur de la
if(ftp_get())
bloc.ftp
Vous n'avez pas indiqué votre code de connexion (donc je suppose), mais vous aurez besoin de la chemin d'accès complet pour le fichier que vous êtes en tirant à partir de FTP. Si le
ftp_get()
étape consiste à défaut, vous êtes probablement demander un fichier non valide.Sinon, vous aurez à
ftp_chdir()
après connecter en sorte que vous êtes dans le bon dossier distant.code
Ce code a fonctionné pour moi:
Si ce code ne fonctionne pas pour vous, vous pouvez avoir un problème avec les autorisations, la configuration, ou un autre environnement spécifique à la question.
Cela fonctionne pour moi:
De cette façon, vous n'avez pas à enregistrer le fichier localement première