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

ghFrankfurt Messages postés 227 Statut Membre -  
ghFrankfurt Messages postés 227 Statut Membre -
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

  1. ghFrankfurt Messages postés 227 Statut Membre 23
     
    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
  2. ghFrankfurt Messages postés 227 Statut Membre 23
     
    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
  3. tartefion Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   7
     
    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
  4. ghFrankfurt Messages postés 227 Statut Membre 23
     
    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