[PHP] nom du fichier à télécharger avec cURL

Fermé
ghFrankfurt Messages postés 207 Date d'inscription mardi 16 novembre 2010 Statut Membre Dernière intervention 10 décembre 2014 - Modifié par ghFrankfurt le 4/01/2011 à 08:56
ghFrankfurt Messages postés 207 Date d'inscription mardi 16 novembre 2010 Statut Membre Dernière intervention 10 décembre 2014 - 6 janv. 2011 à 08:47
Bonjour,

Je viens de découvrir cURL et je voudrais savoir s'il y a un un moyen de récupérer le nom du fichier à télécharger.


$ch = curl_init();  
curl_setopt($ch, CURLOPT_URL, $_POST['url']);  

$fp = fopen('fichier.ext', 'w');  

curl_setopt($ch, CURLOPT_FILE, $fp);  
curl_exec ($ch);  

curl_close ($ch);  
fclose($fp);



Merci :)


4 réponses

ghFrankfurt Messages postés 207 Date d'inscription mardi 16 novembre 2010 Statut Membre Dernière intervention 10 décembre 2014 23
4 janv. 2011 à 14:24
Avec un
CURLOPT_HEADERFUNCTION
j'arrive à récupérer "Content-Type: video/quicktime "
Donc je présume qu'il doit au moins y avoir un moyen de récupérer l'extension et à la limite ça m'irais mais avec quoi ?
0
ghFrankfurt Messages postés 207 Date d'inscription mardi 16 novembre 2010 Statut Membre Dernière intervention 10 décembre 2014 23
5 janv. 2011 à 16:29
Bon, avec
curl_setopt($ch, CURLOPT_HEADERFUNCTION, "readHeader");
j'appelle la fonction ;

function readHeader($ch, $header)
 {
     //echo "Read header: ", $header."<br />"; //Affiche les informations générale
	
     //Récupère la taille en octets du fichier à télécharger
     if (preg_match("/Content-Length: (\d*)/",$header,$matches)) 
     {
          $size = $matches[1];
          echo $size."<br />";
     }

     // Récupère le nom de fichier 
     if (preg_match("/Content-Disposition:.*?filename=\"(.*)\"/",$header,$matches)) 
     {
          $filename = $matches[1];
          echo $filename."<br />";
     } 

     //Récupère le type de fichier (à traduire ensuite avec la bonne extension)
     elseif (preg_match('#Content-Type\: video/[x\-]*([a-z]+)[\s]+#i', $header, $matches)) 
     {
          $type = $matches[1];
          echo $type."<br />";
     }

     return strlen($header);
}


Maintenant, le hic c'est de pouvoir sortir $size, $filename et $type de cette fonction. J'ai pensé à le faire avec un tableau, mais le problème c'est que si j'enlève "return strlen($header);" il ne me lit plus le contenu du header...
0
tartefion Messages postés 31 Date d'inscription vendredi 21 mai 2010 Statut Membre Dernière intervention 21 janvier 2011 7
5 janv. 2011 à 17:14
Bonjour, pour "sortir" ces valeurs, utilisé un tableau est une bonne idée. Essai de terminer ta fonction par
$tableau = array($size,$filename,$type);
return $tableau;

Il faut savoir que ta fonction retournait à la base la taille de la chaine $header, du coup elle ne fera plus la même chose.
0
ghFrankfurt Messages postés 207 Date d'inscription mardi 16 novembre 2010 Statut Membre Dernière intervention 10 décembre 2014 23
6 janv. 2011 à 08:47
Le problème c'est que ça ne marche pas, car si j'enlève ce return strlen ($header);, la ligne echo "Read header: ", $header."<br />"; m'affiche uniquement "Read header: HTTP/1.1 200 OK " et du coup mes variables sont vide.

Alors que si je le laisse il me retourne :

Read header: HTTP/1.1 200 OK
Read header: Server: Apache
Read header: Last-Modified: Mon, 08 Nov 2010 20:24:26 GMT
Read header: Accept-Ranges: bytes
Read header: Content-Length: 19862325
19862325 <- contenu de la variable $size
Read header: Content-Type: video/quicktime
quicktime <- contenu de la variable $type
Read header: Expires: Thu, 06 Jan 2011 07:40:16 GMT
Read header: Cache-Control: max-age=0, no-cache, no-store
Read header: Pragma: no-cache
Read header: Date: Thu, 06 Jan 2011 07:40:16 GMT
Read header: Connection: keep-alive
Read header:

Et bien sur ça ne marche pas non plus avec

$tableau = array($size,$filename,$type, strlen($header));
return $tableau;
0