header('Content-Type: image/png'), scripts en double

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 : header('Content-Type: image/png'), scripts en double

Re: header('Content-Type: image/png'), scripts en double

par Castor Gaspard » 24 mars 2011, 17:11

Bolnjour,

Non, Mazarini, l'image est affichée directement grâce à mon script. Elle ne renvoie pas de code Html, car j'en ai pas besoin ici.

Mais ta remarque est judicieuse. :)

Merci.

Gaspard

Re: header('Content-Type: image/png'), scripts en double

par Mazarini » 24 mars 2011, 14:24

Bonjour,

Le problème se produit uniquement lorsque l'image est affichée dans une page html ou se produit également lorsque l'image directement ?

Il doit y avoir une possibilité de voir les header échangés mais je ne connais pas la manipe. Ca pourrait aider à voir ce qui se passe

Re: header('Content-Type: image/png'), scripts en double

par Castor Gaspard » 24 mars 2011, 12:17

Bonjour,

Merci, Moogli, pour ton aide et ton attention. :)

Finalement, je crois que je vais me passer d'une session en temporisant l'accès à la page avec une petite table Sqlite. :mrgreen:

Cordialement,

Gaspard

Re: header('Content-Type: image/png'), scripts en double

par moogli » 24 mars 2011, 11:40

Yop,


Je ne suis pas familier du begintransaction / commit a tu essayer sans (juste en commentant ces deux lignes). Vu le code je soupçonne un auto commit a verifier !

@+

Re: header('Content-Type: image/png'), scripts en double

par Castor Gaspard » 24 mars 2011, 10:03

Bonjour,

Merci, Mazarine, oui, l'image s'affiche bien.

J'ai simplifié mon code pour reproduire le "bogue"... Le voici...
session_start();
header('Content-Type: image/png');
$ip = $_SERVER['REMOTE_ADDR']; // Uniquement pour reproduire le bogue
$source = 'image.png';
if (empty($_SESSION['reload'])) // Évite le rafraichissement de la page
{
	$_SESSION['reload'] = 1;
} 
else 
{
	$_SESSION['reload']++;
}
if ($_SESSION['reload'] <= 5000) // 5000 pour l'exemple, évidemment!
{
	$image = imagecreatefrompng($source);
	imagepng($image);
	imagedestroy($image);
	try
		{
		$dbh = new PDO('sqlite:/database/cocain_track.sqlite', '', '');
		$dbh->beginTransaction();
		$table_test = $dbh->quote('test');
		$sth = $dbh->prepare('INSERT INTO '.$table_test.' (ip) VALUES (?)');
		$sth->execute(array($ip));
		$dbh->commit();
		$sth->closeCursor();
	}
	catch(PDOException $e)
	{
		echo $e->getMessage(). "\n";
		echo $e->getCode();
	}
}
else
{
	readfile($source); 
}
Le code ci-dessous insère donc deux fois l'adresse Ip dans la table "Test".

Voilà, voilà...

Si vous avez des idées, je les lirai avec intérêt. :mrgreen:

Merci.

Gaspard

Re: header('Content-Type: image/png'), scripts en double

par Mazarini » 24 mars 2011, 09:47

Bonjour,

Une question bête, tu utilises bien une balise <img> pour insérer ton image ?

Autrement, pour l'image, il est plus simple de faire :
header('Content-Type: image/png');
readfile('image.png');

Re: header('Content-Type: image/png'), scripts en double

par Castor Gaspard » 24 mars 2011, 01:30

Bonjour,

Merci, Moogli, mais j'ai peur de t'embêter, ma page fait 700 lignes de code. J'ai décommenté chaque partie, pour en conclure que le problème venait de la session. :)

En fait, justement, le but de la session est d'empêcher le rafraichissement du script par des malotrus. Aussi je me demande si je ne vais pas tout simplement ajouter un appel à la fonction sleep à la fin du script par exemple pour une durée de cinq minutes.

Question bête, cependant... Le sleep ne fera "dormir" que le visiteur en cours, pas les autres ? :mrgreen:

Néanmoins, je crois que sleep ralentit le serveur, car il doit continuer à gérer le processus.

Cordialement,

Gaspard

Re: header('Content-Type: image/png'), scripts en double

par moogli » 24 mars 2011, 00:02

yop,

t'aurais pas le code complet des fois ? :)

@+

Re: header('Content-Type: image/png'), scripts en double

par Castor Gaspard » 23 mars 2011, 23:48

Bonjour,

Bah, j'ai un peu avancé, dans l'éclaircissement du mystère...

En fait, j'appelle une session en haut de page. Si je ne l'appelle pas, l'enregistrement n'est pas doublé. Curieux, non ? :mrgreen:

L'ordre n'influe pas... Appeler header avant ou après session ne change rien.

Ceci posé, je suis preneur de vos idées. Merci.

Cordialement,

Gaspard

header('Content-Type: image/png'), scripts en double

par Castor Gaspard » 23 mars 2011, 20:46

Bonjour,

Je voudrai afficher une image dans une page et insérer dans une table des informations sur le navigateur.

L'appel de l'image est basique...
header('Content-Type: image/png');
$source = 'image.png';
$image = imagecreatefrompng('image.png');
imagepng($image);
imagedestroy($image);
Or, l'appel du header, avec header('Content-Type: image/png'), perturbe le déroulement de mon script : il est effectué deux fois, quand je rajoute un compteur, et ma table compte alors deux enregistrements. En revanche, si je mets en commentaires l'affichage de l'image, mon script se déroule normalement.

J'ai essayé de déporter dans un autre fichier l'ajout de l'image, puis le code d'insertion, mais rien ne change.

J'ai aussi voulu encadrer l'affichage par ob_start() et ob_end_flush(), sans plus de succès.

J'ai aussi modifié le header avant l'insertion dans la table avec header("Content-type: text/html; charset=utf-8"), mais la manipulation ne fonctionne pas non plus. :cry:

Auriez-vous des idées ? :mrgreen:

Merci.

Cordialement,

Gaspard