fopen() et demander le téléchargement

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : fopen() et demander le téléchargement

Re: fopen() et demander le téléchargement

par moogli » 10 déc. 2012, 23:30

Distant : c'est pas ce qu'indique ton code ^^

Cela ne change rien si tu veux envoyer ton fichier au navigateur utilise header après l'avoir récupéré dans une variable (la méthode retourne une chaîne donc tu peux l'avoir dans une variable sans problème).



@+

Re: fopen() et demander le téléchargement

par ABodyWithAHead » 10 déc. 2012, 22:55

nope! le fichier est distant!

Re: fopen() et demander le téléchargement

par moogli » 10 déc. 2012, 22:38

salut,

Tu demande l'affichage (echo $r->DownloadToString(); )

Si tu veux envoyer le fichier au navigateur tu n'as pas besoin de tous cela, le fichier est sur ton serveur, tu utilise simplement readfile et la fonction header.

Tu as un exemple dans la doc de la fonction header :mrgreen:


@+

fopen() et demander le téléchargement

par ABodyWithAHead » 10 déc. 2012, 19:02

Bonjour,

J'ai trouvé cet exemple de script sur la doc PHP :
<?php 
#usage: 
$r = new HTTPRequest('notrefichier.com/test.zip'); 
echo $r->DownloadToString(); 

class HTTPRequest 
{ 
    var $_fp;        // HTTP socket 
    var $_url;        // full URL 
    var $_host;        // HTTP host 
    var $_protocol;    // protocol (HTTP/HTTPS) 
    var $_uri;        // request URI 
    var $_port;        // port 
    
    // scan url 
    function _scan_url() 
    { 
        $req = $this->_url; 
        
        $pos = strpos($req, '://'); 
        $this->_protocol = strtolower(substr($req, 0, $pos)); 
        
        $req = substr($req, $pos+3); 
        $pos = strpos($req, '/'); 
        if($pos === false) 
            $pos = strlen($req); 
        $host = substr($req, 0, $pos); 
        
        if(strpos($host, ':') !== false) 
        { 
            list($this->_host, $this->_port) = explode(':', $host); 
        } 
        else 
        { 
            $this->_host = $host; 
            $this->_port = ($this->_protocol == 'https') ? 443 : 80; 
        } 
        
        $this->_uri = substr($req, $pos); 
        if($this->_uri == '') 
            $this->_uri = '/'; 
    } 
    
    // constructor 
    function HTTPRequest($url) 
    { 
        $this->_url = $url; 
        $this->_scan_url(); 
    } 
    
    // download URL to string 
    function DownloadToString() 
    { 
        $crlf = "\r\n"; 
        
        // generate request 
        $req = 'GET ' . $this->_uri . ' HTTP/1.0' . $crlf 
            .    'Host: ' . $this->_host . $crlf 
            .    $crlf; 
        
        // fetch 
        $this->_fp = fsockopen(($this->_protocol == 'https' ? 'ssl://' : '') . $this->_host, $this->_port); 
        fwrite($this->_fp, $req); 
        while(is_resource($this->_fp) && $this->_fp && !feof($this->_fp)) 
            $response .= fread($this->_fp, 1024); 
        fclose($this->_fp); 
        
        // split header and body 
        $pos = strpos($response, $crlf . $crlf); 
        if($pos === false) 
            return($response); 
        $header = substr($response, 0, $pos); 
        $body = substr($response, $pos + 2 * strlen($crlf)); 
        
        // parse headers 
        $headers = array(); 
        $lines = explode($crlf, $header); 
        foreach($lines as $line) 
            if(($pos = strpos($line, ':')) !== false) 
                $headers[strtolower(trim(substr($line, 0, $pos)))] = trim(substr($line, $pos+1)); 
        
        // redirection? 
        if(isset($headers['location'])) 
        { 
            $http = new HTTPRequest($headers['location']); 
            return($http->DownloadToString($http)); 
        } 
        else 
        { 
            return($body); 
        } 
    } 
} 
?>
Le script fonctionne : malheureusement, il m'affiche le contenu du zip ( enfin, le même contenu que si on l'ouvrait avec notepad par exemple ) dans le navigateur.
Comment le modifier afin qu'il me propose de télécharger le fichier "notrefichier.com/test.zip" en utilisant mon serveur ( via l'IP du serveur, et pas la mienne ) ?

Cordialement,