Consultez la FAQ sur le ZF avant de poster une question
Vous n'êtes pas identifié.
Bonjour j'ai un problème pour trouver le chemin d'une image qui se trouve en dehors du www.
Comment puis je faire ??
Hors ligne
Relis ta phrase, dis nous si tu penses qu'elle est compréhensible par quelqu'un qui n'est pas au courant de la situation
Hors ligne
lol je réexplique : en fait mon problème est que je n'arrive pas à afficher des images qui se trouvent en dehors de mon dossier www
parce exemple une image qui se trouve dans www/images
je faisais $this->baseUrl() ."/images/images.jpg"
mais pour les images qui se trouvent en dehors de ce dossier là je peux faire comment pour les afficher ??
Hors ligne
C'est une impossibilité de HTTP
la référence à une image dans une page web est une adresse qui doit être visible directement par le client donc exposé par le serveur HTTP et les seuls éléments que le serveur HTTP expose se trouve dans le (ou les) dossier(s) exposé(s) donc WWW
le seul cas ou les images ou autres éléments que voit le client qui n'est pas dans WWW c'est la définition d'alias dans le serveur HTTP
mais dans ce cas il n'y a aucun pb de chemin puisque c'est l'alias qui le défini
pour rappel les image ne sont pas dans la page web mais ce sont des référence à ses images qui sont dans la page.
c'est le navigateur qui va les chercher et qui les y affiche (d'ailleurs les navigateur pour aveugles ne les affiche pas)
par mesure de sécurité les serveur HTTP n'expose sur le web que le contenu d'un ou plusieurs dossier et seul les élément présent dans ce dossier sont accessible.
Pour faire taire ceux qui seraient tenté de dire que les lib PHP sont accessible c'est FAUX seul les scripts des uRL des pages le sont dans ZF seul index.php l'est le reste n'est pas accessible par le navigateur et c'est tant mieux.
A+JYT
Hors ligne
Ben c'est possible avec readfile() puis des headers pour préparer à recevoir l'image . Mais bon je n'arrive pas à le faire sur mon petit site fait en ZF
Hors ligne
Et c'est par "curiosité" ? ou une raison réelle t'empêche de placer ces images autre part ?
Hors ligne
Ben c'est une sécurité je pense, comme cela personne n'accède aux documents d'autres personnes. Et maintenant que j'arrive à les inclure dans des pdf je n'ai pas trop envie de les changer de place.
Hors ligne
Dans ton controller, il faut :
- désactiver le viewRenderer
$this->_helper->viewRenderer->setNoRender();
- ensuite tu fais comme en PHP simple dans ton controller ($file nom physique de ton fichier et $ctype le mime)
header('Content-type: '.$ctype); header('Content-length: '.filesize($file)); readfile($file);
A+, Philippe
PS : et il faut bien faire attention à en rien envoyer d'autre, si tu as des messages de débug qui s'affichent quelque part, ça corrompt ton fichier
Hors ligne
Merci ça marche plus ou moins on va dire ^^ , le hic maintenant c'est que quand j'affiche la page dans une thickbox ça me fait ça alors que dans le navigateur ça marche nickel
����JFIFHH��C ��C ��d�"�� ���}!1AQa"q2���#B��R
dois je abandonner l'idée de la thickbox ??
Hors ligne
Pour ton navigateur, une image envoyée en dynamique ou en statique, c'est exactement pareil (ton navigateur ne peut pas voir la différence, il reçoit exactement la même chose).
Je pense qu'il y a un problème dans ton code :
- soit tes headers ne sont pas bons dans ton code PHP
- soit il y a une erreur dans ton code JS
A+, Philippe
Hors ligne
Ben je ne pense pas
dans mon fichier html je n'ai que ça
<?php
$image="images/banmail.jpg";
$name='dd';
$info = getimagesize($image);
$fs = filesize($image);
header ("Content-Type: {$info['mime']}\n");
header ("Content-Disposition: inline; filename=\"$name\"\n");
header ("Content-Length: $fs\n");
readfile($image);
?>
et dans mon controlleur j'ai ajouté ça
:
$this->view->jQuery()->addJavascriptFile($this->view->BaseUrl().'/js/thickbox-compressed.js')
->addStylesheet($this->view->BaseUrl().'/css/thickbox.css')
->enable();
et je n'ai pas compris si mon code marche dans le navigateur, mais affiche un code bizarre dans la thickbox c'est que mon code est faux ?? :s Est ce que ce ne serait pas la thickbox :p qui ne lit pas les headers ??
je pense que je vais mettre mon dossier dans le www comme ça j'evite de faire ça .
Dernière modification par lassoya (01-03-2010 14:17:01)
Hors ligne
ça marche nickel avec une shadowbox MERCI DE VOTRE AIDE ^^
Hors ligne
lassoya a écrit:
Ben c'est possible avec readfile() puis des headers pour préparer à recevoir l'image . Mais bon je n'arrive pas à le faire sur mon petit site fait en ZF
dans ce cas là l'url de l'image est celle du script qui fait le read et est donc dans l'espace public
A+JYT
Hors ligne
image se trouve en dehors du www dans un dossier
et le readfile je le fais dans un controller
Hors ligne
@sekaijin :
effectivement c'est l'adresse du script qui s'affiche, après en général, je me débrouille pour que mon script ait une adresse en /xxx/toto.gif (avec le nom réeel du fichier) pour que l'internaute ne sache pas que c'est dynamique (et parce que les analyseurs de logs prennent en compte correctement l'image )
A+, Philippe
Hors ligne