2010-09-25 4 views
2

Je veux un PHP pour pouvoir envoyer 1 des 3 images, en fonction d'un paramètre $_GET[]. J'ai les images en tant que trois PNG séparés en ce moment, et voudrait que le manuscrit de PHP ait ceux incorporés dedans, alors renvoient l'image indiquée. Donc, je veux un script PHP au lieu de 3 images. Est-ce possible? Je n'ai pas besoin de créer des images spéciales à la volée, il suffit d'en imprimer une. Merci!Avoir une page PHP en sortie une image statique

Répondre

4

Si vos images sont dans des fichiers, utilisez la fonction de PHP readfile(), et envoyer un en-tête de type de contenu avant la sortie du résultat:

<?php 
$imagePaths = array(
    '1' => 'file1.png', 
    '2' => 'file2.png', 
    '3' => 'file3.png', 
); 

$type = $_GET['img']; 

if (isset($imagePaths[$type])) { 
    $imagePath = $imagePaths[$type]; 
    header('Content-Type: image/png'); 
    readfile($imagePath); 
} else { 
    header('HTTP/1.1 404 File Not Found'); 
    echo 'File not found.'; 
} 
?> 

EDIT:
Vous pouvez également intégrer vos images dans le script en les encodant par exemple comme Base64, puis les intégrer sous forme de chaînes en PHP, puis décodent là avec base64_decode pour les livrer:

<?php 
$imageData = array(
    '1' => '...', // Base64-encoded data as string 
    ... 
); 

$type = $_GET['img']; 

if (isset($imageData[$type])) { 
    header('Content-Type: image/png'); 
    echo base64_decode($imageData[$type]); 
} else { 
    header('HTTP/1.1 404 File Not Found'); 
    echo 'File not found.'; 
} 
?> 

Vous pouvez également utiliser PHP pour coder l'image sur la ligne de commande. Il suffit d'exécuter ce script PHP dans la ligne de commande (php script.php image1.png image2.png image3.png > output.php) et enregistrer sa sortie, et l'intégrer dans votre script:

<?php 
$imageData = array(); 

foreach ($argv as $index => $imagePath) 
    $imageData[(string)($index + 1)] = base64_encode(file_get_contents($imagePath)); 

echo '$imageData = '.var_export($imageData, true).';'; 
?> 
+0

Merci beaucoup Archimedix !! Je vais jeter un coup d'œil à ça, c'est juste ce dont j'ai besoin! –

+0

Cela a fonctionné! Merci! –

+0

Avec une approche comme celle-ci ('header()' sort l'attente de type Content et l'utilisation de 'readfile'), IE9 par défaut à Quirks comme mode Document. Peut-on faire quelque chose pour dire à IE de ne pas paniquer, c'est juste une image? [Exemple] (http://www.homeeducatormom.com/wp-content/uploads/2012/11/orange-scarf1.jpg) (Ce n'est pas mon site) – veeTrain

1

Oui, c'est possible.

Faites ceci:

  1. écrire un script php décider quelle image à la sortie.
  2. Définissez les en-têtes appropriés avec la fonction header() (par exemple, Content-type)
  3. Ouvrez le fichier, lisez-le et envoyez-le au flux de sortie.

Rappelez-vous que vous perdrez probablement tous les avantages de la mémoire cache du navigateur avec cette approche ...

+0

Cela ne nécessiterait-il pas toujours que les images soient des fichiers séparés?Est-il possible de les intégrer dans le script? –

+0

pourquoi va-t-il perdre le cache du navigateur? Les images sont toujours localisées par URL unique avec des paramètres GET. – doc

+0

Pourquoi voudriez-vous intégrer une image dans un script? –

0

Une façon rapide mais pas vraiment sûre, ni élégante de le faire ...

<?php 
switch($_GET['type']){ 
case "1": 
    $image = "image1.png"; 
    break; 
case "2": 
    $image = "image2.png"; 
    break; 
case "3": 
    $image = "image3.png"; 
    break; 
} 
header('Content-Type: image/png'); 
readfile($image); 
?> 

la morale de l'histoire: tête d'utilisation() et readfile() = D

2

Je ne l'ai pas testé les éléments suivants, mais il devrait fonctionner. Utilisez ce script pour obtenir du code PHP qui contiendra les données d'image.

Pour obtenir l'image:

$image = base64_encode(file_get_contents("image.png")); 
// The string $image now contains your image data. 

Obtenir cette chaîne (potentiellement grande) dans votre code où vous voulez que l'image, pour chaque image. Imprimez-le et copiez-le puis collez-le. Importez-le en tant que fichier texte sur le Web. C'est à toi de voir.

Ensuite, pour imprimer l'image (seule l'image comme si le script PHP était l'image), faites:

header("content-type: image/png"); 
print base64_decode($image); 

Bien sûr, vous mettriez chaque donnée d'image dans un tableau ou quelque chose comme ça.

Faites-moi savoir si cela fonctionne.

+0

Cela fonctionne. D'abord je l'ai essayé avec la syntaxe newdoc et ça a marché, mais cette solution est meilleure. – doc

+0

Merci, doc. Je suis content que ça a marché. – eje211

Questions connexes