problème avec readfile et header

Petit nouveau ! | 4 Messages

03 juil. 2007, 14:27

salut à tous,
voilà j'ai un problème avec les headers, celui-ci en particulier
header("Content-type: image/jpeg") je ne sais pas le placer.
Si je le place au tout debut du code html. La page me renvoie une page blanche avec l'adresse de la page en cours.
Si je place dans le même script que mon appel de la fonction readfile
header("Content-type: image/jpeg");
function affichage($ty) {
while($res = mysql_fetch_row($req)) {
echo "<span class='soustexte_Menu'>modèle<br>$res[0]</span>";
$fichier = "sectionAdmin/sectionMeuble/".$res[3];
echo "<div class='img_Menu'>readfile($fichier) </div>";
} 
On m'affiche que le header est déjà envoyer :

Code : Tout sélectionner

Cannot modify header information - headers already sent by (output started at C:\wamp\www\ambianceboisV2\contact.php:12.
Si quelq'un peut m'aider ou placer le header pour afficher l'image, je le remercie d'avance :)

Mammouth du PHP | 505 Messages

03 juil. 2007, 14:54

Tu ne peux pas afficher a la fois du html et le binaire d'une image dans la meme réponse. La réponse est soit du html soit du jpeg, pas les 2 a la fois.
Il faut faire 2 fichiers.

Un qui fera ton echo span etc et a l'endroit ou tu veux afficher ton image
tu fais un echo '<img src=monImage.php>'

et dans ton fichier monImage.php, tu fais ton header et ton readfile sans aucun autre echo.

Petit nouveau ! | 4 Messages

03 juil. 2007, 19:23

salut, merci de ta réponse j'ai fait comme tu me l'as dis
<?php
header("Content-type: image/jpeg"); 
$fichier = "../sectionAdmin/sectionMeuble/mini/DSC00961.jpg";
readfile($fichier);
?>
pour le ficher image.php
<?php echo "<img src=image.php>"; ?>
Cela a résolu le problème d'envoie déjà effectué de header mais le seul problème vient du fait que l'image ne s'affiche pas. Le problème vient du fait que image.php n'est pas considéré comme un lien vers ce fichier. Est ce que je me suis mal pris ?

ViPHP
AB
ViPHP | 5818 Messages

03 juil. 2007, 20:18

Le principe est bon, tu dois avoir simplement une erreur dans le chemin de $fichier

ViPHP
ViPHP | 5924 Messages

03 juil. 2007, 20:42

Déjà mets des quotes, c'est mieux :
<?php echo "<img src=\"image.php\">"; ?>

ViPHP
AB
ViPHP | 5818 Messages

03 juil. 2007, 23:24

Oui, et pendant que tu y es, dans la mesure du possible -c'est très souvent possible- évites de faire afficher tes balises html par un echo. C'est plus facile à lire et t'évites de devoir utiliser des \ d'échappement.

HTML

Code : Tout sélectionner

<img src="<?php echo "image.php" ?>" alt = "" />

Petit nouveau ! | 4 Messages

04 juil. 2007, 08:12

Oui c'est les quotes qui manquant :langue: . Par contre j'ai encore une dernière question,c'est vrai :oops: . Etant donnée que la sortie ne doit être que de l'image, est ce qu'il y a un moyen pour que je fasse appel à une requete SQL pour je recupère le dernier lien de ma BD et ensuite je le trasnmet au readfile comme dans l'exemple du 1er post.
Merci d'avance ^^,

Mammouth du PHP | 505 Messages

04 juil. 2007, 08:38

Pour répondre a ta question, c'est tout simple, tu passe en parametre a image.php l'image a afficher
dans ton echo, au lieu de faire image.php, tu met image.php?image=$fichier
dans dans image.php tu recuperes ton parametre dans $_GET['image']



Ceci étant dit, j'ai du mal a saisir l'interret de ce que tu fais.

Dans la mesure ou ton image est accessible par le serveur web, pourquoi ne pas laisser faire apache pour servir l'image. Il est concu pour servir les ressources static et le fait bien plus efficacement que php.

Pour moi, ton code devrait etre,
function affichage($ty) {
while($res = mysql_fetch_row($req)) {
echo "<span class='soustexte_Menu'>modèle<br>$res[0]</span>";
$fichier = "path_vers_image_depuis_script_d'appel_http/".$res[3];
echo "<div class='img_Menu'><img src='$fichier'></div>";
}
en t'arrangeant pour le que path vers l'image soit correct vis a vis de ton serveur http. Soit en relatif, soit en absolu, mais l'image doit s'afficher si tu tape directement l'url dans ton browser.

Petit nouveau ! | 4 Messages

04 juil. 2007, 09:50

ben en fait, j'ai lu pas mal de tuto et de forum concernant l'insertion d'image par move upload. Je suis parti de ce principe en stockant mes images dans un répertoire au lieu de le faire dans une BD et il fallait protéger le répertoire. Du coup, j'étais obligé de passer par readfile pour afficher mon image.

Mammouth du PHP | 505 Messages

04 juil. 2007, 11:50

Ah effectivement, si le but est de protéger l'image, je comprend mieux.

Eléphanteau du PHP | 33 Messages

12 juil. 2007, 12:22

j'ajoute mon grains de sel complètement inutile mais bon ^^:
on n'utilise pas des double quote en php en général.

Et on n'utilise JAMAIS de double quote quand on fait un echo sans variable a l'intérieur.

Les simple quote sont beaucoup plus rapides :P

Voila, c'est tout pour les infos :P
J'aurai aimé aimer aimé.
J'aurai aimé être aimé.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

12 juil. 2007, 13:06

... on n'utilise JAMAIS de double quote quand on fait un echo sans variable a l'intérieur....
Pour détailler un peu plus, la présence de double quote fait que PHP va parser le contenu pour détecter les variable, d'où la légère différence de performance.

Par contre, je serais moins catégorique. C'est du domaine du conseil ... pas de l'obligation ;)
De plus, si tu fait
echo '\n';
pour sauter une ligne dans un batch, PHP écrit \n au lieu d'insérer un saut de ligne ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Eléphanteau du PHP | 33 Messages

12 juil. 2007, 13:33

wé, tu m'as cassé là.

En effet, c'est plus du domaine du conseil.
mais alors il est toujours possible d'écrire plutôt echo '
'; :P

quand même, mettre le symbole $ dans des chaine contenant des doubles quotes les ralentits considérablement.

petit lien pour d'en persuader
http://www.estvideo.com/dew/pages/phpbench/
(ce n'est pas moi qui ai fait ces tests comparatifs, mais je me réfère souvent a cette page, notamment pour la supériorité du === par rapport au ==).

ça me rappels de vieux souvenirs ^^

Zeus, tu marques quand même un point.
J'aurai aimé aimer aimé.
J'aurai aimé être aimé.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

12 juil. 2007, 14:00

Mais je ne remet pas en cause l'utilisation des simples quotes. Moi pour le 1er, j'encourage à les utiliser ... ;)

Je voulais juste te faire remarquer qu'il ne fait pas dire "il ne faut JAMAIS les utiliser".
Non seulement, le besoin de les utiliser peut apparaitre, mais, de plus, il n'est pas interdit de les utiliser mais déconseillé ;)
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

Mammouth du PHP | 505 Messages

12 juil. 2007, 14:40

Le coup du ' est plus performant que " est une vielle casserolle que l'on voit régulièrement ressurgir...

Il ne coute rien de faire quelque tests et de reflechir un peu aux résultats avant de colporter ce genre de chose.

Déjà, en faisant 4 ou 5 passes, vous allez constater que c'est extrement fluctuant. Limite exploitable, un coup le bench 1 est plus lent, un coup, le bench 2 est plus lent.
Je ne sais pas sur quoi il fait son bench, mais pour avoir 70ms sur une itération de 1000 echo, ca doit etre un vrai coucou. Moi, meme avec une itération de 100 000 j'ai pas encore 35ms.

Quand bien meme, admettons l'hypothese ou le ' est plus rapide que ".
Maitenant, ramenons ca a des cas concrets. J'arrondi puisque meme avec 100 000 itération j'ai pas les 35ms, supposont que je les ait. Ca fait donc 0,35micro seconde par echo. Comme la version ' est 2 fois plus rapide que la version ", j'ai donc un gain de 0,175 micro secondes a chaque echo.
Youpi !!!

Maintenant, essayez de voir combien vous avez d'echo dans l'affichage d'une page en moyenne. Soyons fou. Admettons qu'il y en ait 100 (moi ca me semble enorme mais comme je l'ai dit, soyons fou), et bien on gagne 17,5 micro secondes... C'est pas beau ca ?
Serieusement, si y a un problème de perf sur votre site, c'est pas avec ce genre de chose que vous allez le résoudre.


Si les perfs vous interesse, je vous suggère d'aller sur le blog d'ilia, c'est un acteur connu et reconnu du monde php, il y a meme un pdf d'une conférence qu'il a donné en mai 2007 sur les performances en php. La vous allez trouver matière à optimiser.

Bubuche, Je te recommande la page 67.