Télécharger fichiers sur serveur avec php

WRInaute discret
Bonjour,
j'ai un petit problème avec un module que je suis en train de réaliser. J'aimerais pouvoir télécharger (stocker) sur mon serveur Web un image se trouvant sur un serveur distant... Donc pouvoir transférer d'un serveur à un autre un fichier (en l'occurence, un fichier image)...

Comment dois-je procéder? Quels sont les fonctions php à utiliser?

A mon avis, je dois commencer par récupérer l'image avec file_get_contents mais après?

Merci de votre aide...

Bordas
 
WRInaute discret
Oups, apparement il suffit d'utiliser la fonction copy().... Désolé du dérangement....

Ps : Enfin, si vous avez d'autres techniques n'hésitez pas ;)
 
Nouveau WRInaute
e-kiwi a dit:
move_uploaded_file() plutot, copy est obsolète ^^

Il veut pas copier un fichier mais récupérer un fichier sur un serveur distant donc copy est bon et move_uploaded_file non puisque move_uploaded_file ne fonctionne que pour des fichiers chargés par php ;-)
 
WRInaute accro
Merci Dos!

.. apres test, copy marche nickel, moi qui essayais de passer par -ftp avant, comme quoi les fonctions les plus simples.... nul besoin de -ftp

Code:
<?php

$file = 'http://www.site.com/images/1.jpg';
$newfile = '1.jpg';
copy($file, $newfile);

?>
 
WRInaute passionné
edit : oups j'ai été un peu lent

je n'y suis jamais arriver

et pourtant c'est possible :D

le fichier est disponible par HTTP/GET puisqu'il est sur un server WEB

1) solution la + facile mais ça marche pas toujours (entre autres les \0 d'un fichier binaire terminera le fichier)
$file_content = join('',file(le fichier distant mode));
php > fopen nouveau fichier local w+
php > fwrite le contenu de $file_content
php > fclose la ressource

2) solution facile
php > fopen le fichier distant mode rb
php > fread le fichier jusqu'à la fin dans un buffer
php > fopen nouveau fichier local w+
php > fwrite le contenu du buffer
php > fclose la ressource

3) solution moins facile
php > fsockopen le server port 80
php > fwrite dans le socket la methode GET et le nom du fichier
php > parse le retour et detecte un double saut de ligne
php > injection du flux dans un buffer
php > fopen nouveau fichier local w+
php > fwrite le contenu du buffer
php > fclose la ressource

rog

he bordas, tu pourrais share le fone de la fille qui est sur ton avatar ?
 
WRInaute accro
.txt, .dat, .xml... c'est normal, mais on peut fwrite 1 .gif ou .jpg ?? a mon avis elle va etre un peu bizarre l'image apres... :D
 
WRInaute passionné
bah non pas du tout

les problemes de corruptions de fichiers sont dûs aux différences de mode d'exploitation de la ressource ouverte par le pointeur

le mode txt est le responsable si le fichier contient des caractères binaires car il ne pourra pas tous les interpréter (on verra souvent des carrés à la place)

entre autres, le caractères le null (chr(0)) signifie la fin d'une variable char en C
donc si ton fichier est ouvert en mode txt et qu'il contient un null, la fonction qui exploite le pointeur va considérer le null comme la fin du flux et va le stopper

pour la formule avec copy, je pense qu'elle ne va fonctionner avec les fichiers binaires que sur les serveurs linux parce que l'ouverture binaire est le mode par defaut

mais pour les fichiers binaires sur un serveur windows, c'est pas sur

et sur les exemples donnés, il faut remplacer w+ par wb+ car on retrouvera le même probleme avec le null à l'ecriture

rog
 
WRInaute accro
envoi le code avec la creation du fichier .img au passage, pour moi ca reste impossible. fwrite travaille sur une chaine et je vois pas comment tu peux creer un gif avec du php...
 
WRInaute passionné
sans probleme

c'est mon code perso, les return false sont parce que le code fait partie d'une fonction

Code:
if($fp = fopen("http://opendmoz.info/rog.gif","rb"))  # mon avatar
	{
	if($pointer = fopen("./new_rog.gif","wb+"))
		{
		while($buffer = fread($fp, 1024)) 
			{
			if(!fwrite($pointer,$buffer))
				{
				return FALSE;
				}
			}
		}
		fclose($pointer);
	}
	else
	{
	return FALSE;
	}
fclose($fp);

rog
 
WRInaute accro
j'adore grave ton nouvell avatar!!

et ton code fonctionne nickel, Tilt pour moi 8)

Vu que je tourne sous Linux, je garde la fonction copy par contre
 
WRInaute passionné
merci pour l'avatar kOogar

copy est à verifier si l'image est hébergée sur un server windows

rog
 
Discussions similaires
Haut