données - Sortie d'une image en PHP




creation mysql (9)

Essaye ça:

<?php
  header("Content-type: image/jpeg");
  readfile("/path/to/image.jpg");
  exit(0);
?>

J'ai un $file image $file (par exemple ../image.jpg )

qui a un type mime $type

Comment puis-je le sortir dans le navigateur?


Vous pouvez utiliser finfo (PHP 5.3+) pour obtenir le bon type MIME.

$filePath = 'YOUR_FILE.XYZ';
$finfo = finfo_open(FILEINFO_MIME_TYPE);
$contentType = finfo_file($finfo, $filePath);
finfo_close($finfo);

header('Content-Type: ' . $contentType);
readfile($filePath);

PS : Vous n'avez pas besoin de spécifier Content-Length , Apache le fera pour vous.


Si vous avez la liberté de configurer vous-même votre serveur web, des outils comme mod_xsendfile (pour Apache) sont nettement meilleurs que lire et imprimer le fichier en PHP. Votre code PHP ressemblerait à ceci:

header("Content-type: $type");
header("X-Sendfile: $file"); # make sure $file is the full path, not relative
exit();

mod_xsendfile récupère l'en-tête X-Sendfile et envoie le fichier au navigateur lui-même. Cela peut faire une réelle différence de performance, en particulier pour les gros fichiers. La plupart des solutions proposées lisent le fichier entier en mémoire et l'impriment ensuite. C'est OK pour un fichier image de 20 Ko, mais si vous avez un fichier TIFF de 200 MByte, vous risquez d'avoir des problèmes.


Vous pouvez utiliser l'en- header pour envoyer le bon type de contenu:

header('Content-Type: ' . $type);

Et readfile pour afficher le contenu de l'image:

readfile($file);


Et peut-être (probablement pas nécessaire, mais, au cas où) vous devrez envoyer l'en-tête Content-Length aussi:

header('Content-Length: ' . filesize($file));


Remarque: assurez-vous que vous ne produisez rien d'autre que vos données d'image (pas d'espace blanc, par exemple) , ou que ce ne sera plus une image valide.


header('Content-type: image/jpeg');
readfile($image);

    $file = '../image.jpg';
    $type = 'image/jpeg';
    header('Content-Type:'.$type);
    header('Content-Length: ' . filesize($file));
    $img = file_get_contents($file);
    echo $img;

Ceci fonctionne pour moi! Je l'ai testé sur l'allumeur de code. Si j'utilise readfile, l'image ne s'affichera pas. Parfois, seulement afficher jpg, parfois seulement gros fichier. Mais après je l'ai changé pour "file_get_contents", j'obtiens la saveur, et fonctionne! ceci est le screenshoot: Capture d'écran de "image sécurisée" de la base de données


$file = '../image.jpg';

if (file_exists($file))
{
    $size = getimagesize($file);

    $fp = fopen($file, 'rb');

    if ($size and $fp)
    {
        // Optional never cache
    //  header('Cache-Control: no-cache, no-store, max-age=0, must-revalidate');
    //  header('Expires: Mon, 26 Jul 1997 05:00:00 GMT'); // Date in the past
    //  header('Pragma: no-cache');

        // Optional cache if not changed
    //  header('Last-Modified: '.gmdate('D, d M Y H:i:s', filemtime($file)).' GMT');

        // Optional send not modified
    //  if (isset($_SERVER['HTTP_IF_MODIFIED_SINCE']) and 
    //      filemtime($file) == strtotime($_SERVER['HTTP_IF_MODIFIED_SINCE']))
    //  {
    //      header('HTTP/1.1 304 Not Modified');
    //  }

        header('Content-Type: '.$size['mime']);
        header('Content-Length: '.filesize($file));

        fpassthru($fp);

        exit;
    }
}

http://php.net/manual/en/function.fpassthru.php


$file = '../image.jpg';
$type = 'image/jpeg';
header('Content-Type:'.$type);
header('Content-Length: ' . filesize($file));
readfile($file);

==est utilisé pour vérifier l'égalité sans prendre en compte le type de données variable

===est utilisé pour l' égalité de contrôle pour les deux la variable valeur * et ** type de données

Exemple

$a = 5

  1. if ($a == 5) - évaluera à vrai

  2. if ($a == '5') - sera évalué à true, car en comparant cette valeur, php convertit en interne cette valeur de chaîne en entier, puis compare les deux valeurs

  3. if ($a === 5) - évaluera à vrai

  4. if ($a === '5') - sera évalué à false, car la valeur est 5, mais cette valeur 5 n'est pas un entier.





php image