J'essaie d'afficher une image dans une fenêtre contextuelle à l'aide de la fonction file_get_contents et d'une instruction echo.
Voici le code que j'ai dans la première vue
<a href='javascript:window.open("index.php?option=com_jsmdownload&view=request&tmpl=component&layout=showimage&img=icon-36-ldpi.png", "Image View", "toolbar=no, location=no, width=400, height=400")'>Click</a>
Ci-dessous le code de ma deuxième mise en page dans la même vue
$image = JURI::base().DS.'files'.DS.'images'.DS.'icon.png';
//echo $image;
$content = file_get_contents($image);
header('Content-Type: image/png');
echo $content; exit();
Lorsque je clique sur l'ancre 'Cliquez' dans la première vue, la fenêtre contextuelle s'ouvre et les ordures à l'intérieur s'affichent.
Le chemin de l'image est correct. Si je navigue dans une autre URL du navigateur, il affiche l'image.
Je ne sais pas ce qui me manque. Quelqu'un peut-il s'il vous plaît aider sur ce point?
Je suis d'accord avec Jeremy, vous pouvez simplement utiliser une balise <img>
Et insérer le nom du fichier en utilisant PHP.
Toutefois, si, pour une raison quelconque, vous souhaitez lire le fichier à l'aide de PHP, essayez d'utiliser readfile()
. En outre, vous pouvez utiliser getimagesize () pour obtenir le type MIME correct et l'insérer de manière dynamique. De cette façon, vous n'êtes pas limité à utiliser un seul type de fichier:
$image = JURI::base().DS.'files'.DS.'images'.DS.'icon.png';
$imginfo = getimagesize($image);
header("Content-type: ".$imginfo['mime']);
readfile($image);
J'espère que ça t'as aidé.
Définir l'en-tête et essayer de traiter directement l'image est vraiment inutile. Cela produira le résultat que vous recherchez:
Votre deuxième bloc de code devrait être comme suit
$input = JFactory::getApplication()->input;
$layout = $input->get('layout');
If (isset($layout) && $layout == 'show image') {
$image = JURI::base().'files/images/icon.png';
printf('<img src="%s" />', $images);
}