problème avec readfile et header

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : problème avec readfile et header

par titerm » 12 juil. 2007, 15:33

Puis-je te suggérer foxit reader, il est moins gourmant que acrobat reader et fonctionne bien avec la pluspart des pdf.

Et sous firefox, une astuce qui permet de lire un pdf en ramant moins quelque soit le reader que tu utlise consite a ne pas utliser le plugins pdf au sein de firefox. Pour cela, tu vas dans
outils/options/contenu
Type de fichier [gérer], tu cherche pdf, et tu modifies l'action. Au lieu de utiliser le plugins, tu fais ouvrir avec l'application par default.
L'inconvénient, c'est que ca télécharge le pdf avant de l'ouvrir, mais une fois ouvert, ca ne rame pas (ou en tt cas, ca rame moins), et en plus tu peux du coup utiliser un pdf viewer alternatif comme foxit qui ne dispose pas de plugins.

par bubuche » 12 juil. 2007, 15:23

tr-s interessant comme lien.
Comme je ne parle pas très bien anglais, j'ai plutôt survolé, mais bon, j'ai appris un truc ou deux.

Pour le ? : et le if(){}else{}, je le savais déjà.
Pour le @ j'était aussi au courant.

D'ailleur, a ce propos, arretez moi si je me trompe mais est-ce que le @ peut être utilisé ailleur que dans une ouverture de flux? (dont on ne peut pas déterminer avant si elle va s'ouvrir ou pas).

J'ai été surpris par la page 50.

Et encore plus pour les constantes J'ai toujour cru qu'une constante, du fait qu'elle ne peut pas être modifiées était plus lgère qu'une variable, mais ce n'est visiblement pas le cas.

Pour les regex, je le savais déjà

(je n'utilise jamais de regex. Par exemple, pour récuperer dans une adresse contenant potentiellement des valeurs passées en get, les gens utilisent généralement une regex.

Il est beaucoup plus simple de
1) rajouter un '?' a la fin de la chaine.
2) récuperer tout le code se trouvant avant le premier '?'.

C'est super simple, et ça marche très bien.)

Pour les boucles for avec un strlen dans la condition, j'avais entendu parler que certaine personne faisait ça.

De toute façon, j'essai d'optimiser mes scripts, mais c'est plus pour la forme, car comme je suis sur un hébergeur gratuit (ifrance, pour ne pas le nommer) , je pourrais faire tout ce que je veux, ça ne chanera rien, n'est-ce pas?

Enfin, ça me fait prendre l'habitude.

Sinon, je me pose une question sur le (int)

en php, on ne peut pas déclarer une variable entière puisque dès qu'une valeur a virgule lui est attribuée, elle change.
Par contre la notation
$var = (int) 5/2;
retourne 2.

D'après mes boucle, cela est plus rapide que floor. Maintenant, reste a savoir pourquoi :)

En tout cas, merci pour le lien (j'y aurais sans doute passé plus de temps, mais c'est un pdf, et j'aime pas ça (ça fait ramer mon ordi comme pas possible, et c'est pas très beau visuellement).

par titerm » 12 juil. 2007, 15:23

Nan, je suis pas un fan de bench :)
Quand bien meme, je ne ferais pas d'echo de 50 lignes... Ca n'a pas de sens. Si tu echo 50 lignes, c'est probablement du HTML, et si c'est du HTML, y a pas a faire d'écho.

Les bonne pratiques d'écritures, y a pas de problème, je suis pour. Je travaille aussi sur un très gros site et on est plusieurs dev dessus, il faut donc un minimum de rigueur.

Ma réaction était plus sur le coté performance a récupérer sur l'utilisation des ' au lieu des ". C'est un mythe qui a la peau dur mais c'est un mythe. J'ai eu l'occasion de discuter avec Shahar lorque que Zend est venu faire un audit de notre code. C'est est un des mecs qui bosse le Zend_Engine. Je pense qu'on peut le considérer comme une source fiable. Il m'a confirmé que c'était du vent.

Nous perso, on utilise les ' quand il n'y a pas d'interprétation a faire. En revanche,
quand on fait un echo qui contient déjà des ', on utilise les " pour éviter d'avoir a faire des echap sur toute les quote car je trouve que la chaine devient beaucoup plus dur a lire.
genre ce mauvaise exemble qui n'a rien a faire un php :)
echo '<div class=\'red\' style=\'float:left\' onclick=\'alert("test")\'>audjour\'hui</div>';
vs
echo "<div class='red' style='float:left' onclick='alert(\"test\")'>aujourd'hui</div>";
Mais de tte facon, c'est une question de convenance personnelle ou de normes que l'on souhaite suivre afin de dev en communauté dans un bonheur partagé mais y a rien d'absolu. :lol:

par zeus » 12 juil. 2007, 15:01

Il ne faut pas voir une optimisation juste avec une chaine de 6 caractères et 6 echo.
Une optimisation, c'est une rigueur de développement pour toute les pages.

Idem, quand je parle de conseils, c'est une suite de bonnes pratiques qui, misent bout à bout permettent d'avoir un code plus souple, plus lisible, plus performant.

Certains de mes collègues préfèrent faire un echo de leur code HTML alors que je préfère faire un max de traitement avant l'affichage et de fermer les balises HTML pendant. Sur une page, je suis d'accord, c'est rien.
Sur mon projet d'affichage de publicité, qui gère des milliers de requêtes simultanées, mêmes avec 10 echo en moins par page, c'est autre chose ;)

Si tu es fan de bench, essaye sur des chaines de 50 lignes dans un seul echo, tu verras déjà le changement. ;)

Je suis d'accord avec toi sur le fait que c'est pas de remplacer les " par des ' dans un projet qui va révolutionner les performances.
Mais, par contre, se forger une série de bonnes habitudes, c'est bon pour ton code, tes futurs retours dans le code, les autres personnes susceptibles de mettre leur nez dans ton code et pour ton serveur.

par titerm » 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.

par zeus » 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é ;)

par bubuche » 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.

par zeus » 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 ;)

par bubuche » 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

par titerm » 04 juil. 2007, 11:50

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

par javas » 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.

par titerm » 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.

par javas » 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 ^^,

par AB » 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 = "" />

par Sékiltoyai » 03 juil. 2007, 20:42

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