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

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. 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
    1. 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
      1. 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
        1. 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

          Discussions similaires

          question pix mot caché

          7 réponses