PHP - en tete HTTP pour des images - Y a un truc qui méchappe

Bonjour,

Je me suis fait un script qui permet de protéger mes images.
Ces images sont dans un répertoires "cachés" et ne sont accessibles que via un mot de passe

Voici le bout de code qui me pose problème


// il y pleins d'autres lignes avant celles-ci...

$id_doc=$pwd[0];            // password du document

    $ok=file("http://www.gemitel.com/ccheck_quick_verif.php?id_doc=$id_doc&pwd=$pwd[1]");
    

    // le password utilisé n'est pas valide
    if ($ok[0] =="nok")
    {
       header("location:http://www.gemitel.com/doc_error.php?err=4");
       exit;
    }


$nf=split("\/",$datas);  // nom fichier
$file = $site.$nom_rep."/".$nf[0]."/".$hidden_rep."/".$nf[1];   // url fichier
//print "file=$file";


// téléchargement du fichier
// -------------------------

   // extension du fichier
   $extfichier=substr($file[1],0,-4);

   // Fichiers PHP : Ne pas télécharger !!!
   If($extfichier != "jpg" && $extfichier != "gif" && $extfichier != "htaccess")
   {
    // Juste le nom du fichier
    $lefichier = $nf[1];
    
    ob_start();
    // Envoi des Headers HTTP : recharge / type image / taille du fichier
    //header('Content-Type: image/'.$extfichier);
    //header("Expires: 0");
    //header("Cache-Control: no-cache, must-revalidate");
    //header("Pragma: no-cache");
    //header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
    //header("Content-Disposition: attachment; filename=".$lefichier);
    $open = fopen($file, 'r');
    $line=fpassthru($open);
    fclose($open);
    print $line;
    ob_end_flush();

Donc si je laisse ce code tel que je vous le donne, l’image s’affiche correctement.

Par contre si j’enlève les // devant les header pour le téléchargement, le script retourne à la premiere ligne de ce bout de code et donc me renvoie une erreur intercepté par la ligne if ($ok[0] ==“nok”) car le password est supprimé de la BDD au premier passage.

Bref, si vous m’avez suivi, je ne trouve pas l’erreur pour faire fonctionner les en têtes HTTP.

Merci de votre aide…

$ok=file("http://www.gemitel.com/ccheck_quick_verif.php?id_doc=$id_doc&pwd=$pwd[1]");

// le password utilisé n'est pas valide
    if ($ok[0] =="nok")
    {
       header("location:http://www.gemitel.com/doc_error.php?err=4");
       exit;
    }

Je comprends pas tout là, $ok[0] correspond à la première ligne de ton fichier http://www.gemitel.com/ccheck_quick_verif…c&pwd=$pwd[1] . C’est elle qui est égale ou non à “nok”, c’est ça qui est à l’origine de l’erreur non ?

Non ! En fait il y a tout un traitement avant cette ligne.

Le problème que je ne comprends pas c’est que lors du déroulement du script, il y a un retour arrière sur cette ligne si et seulement si je décommente les en têtes HTTP, ce qui produit l’erreur => le $ok à ce moment là prend la valeur de NOK car c’est le deuxième passage…

Alors que le script fonctionne très bien tel que je l’ai copier (avec les en tête HTTP commentées)

Bref ! c’est un truc de dingue !

Ce message n’était pas conforme aux règles d’utilisation du nouveau forum :

.

Alors déjà, je m’excuse, j’ai pas pris le temps de lire tout le post, mais je pense que tes header() sont mal placés. Supprime tout ce qui est gestion de tampon (ob_*) et mets simplement après tes header() : readfile($file);