Cgi-html

Fermé
kate - 14 mai 2012 à 18:08
 Utilisateur anonyme - 16 mai 2012 à 14:19
Bonjour,

ça fait dejà 4 jours que je suis bloqué alors que j'ai l'impression que c'est juste un petit truc qui me bloc.
voilà:
j'ai un programme qui prend comme argument des elements texte "des données genomique expATCGGTACCTAGCAA" et qui renvoi en sortie une image qui contient un graphe
mon probleme c'est d'afficher l'image en sortie j'ain essayer avec le code si dessous mais ça m'affiche une page noir:


print "Content-type: image/gif\n\n";
print '<img src="/usr/lib/cgi-bin/test.gif">';


merci pour votre aide
A voir également:

20 réponses

Bonjour

Tu mélanges plusieurs manières d'afficher une image :
. Soit tu mets un lien vers cette image, dans une page HTML classique :
c'est la version print '<img src="/usr/lib/cgi-bin/test.gif">'; (mais SANS Content-type avant)
. Soit tu envoies une vraie image (sans HTML) et là :
1 - tu dois indiquer le Content-type, mais dans un header, pas dans un print
2 - tu dois ensuite envoyer le contenu du fichier image, et pas un lien sur l'image :
header('Content-type: image/gif');
readfile('/usr/lib/cgi-bin/test.gif');

Dans ce dernier cas, ton script ne doit rien envoyer d'autre que l'image
0
breutone Messages postés 10 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 15 mai 2012
15 mai 2012 à 14:45
Bonjour le père et merci pour ta réponse c'et très gentil.
sauf que ça marche toujours pas pour moi.
etant donnée que je dois renvoyer plusieurs resultats je me suis donc orienté vers la 1ere possibilitée.
voila le code que j'ai mis
print "Content-type: text/html\n\n";
print '<img src="/usr/lib/cgi-bin/test.jpeg">';
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">', "\n";
print "<html><head><title>CGI-Feedback</title></head>\n";
print "<body><h1>avis CGI du programme <i>comments.pl</i></h1>\n";
print "<p><b>commentaire:</b> $formulaire{commentaire}</p>\n";
print "</body></html>\n";

cela m'affiche juste un petit carré aulieu de l'image voulu
si j'enleve cette ligne: print "Content-type: text/html\n\n";
j'ai un message d'erreur qui s'affiche
0
Utilisateur anonyme
15 mai 2012 à 15:06
Quel message d'erreur ?
Et dans tous les cas, tu ne devrais rien avoir avant <!DOCTYPE.

Si tu dois avoir plusieurs images dans ta page, il faut effectivement les mettre sous forme de balise <img (j'ai eu tort de parler de 'lien' dans ma première réponse.)

Mais dans cette balise img, il faut une url qui corresponde à une adresse effectivement accessible sur internet. Or ton adresse '/usr/lib/cgi-bin/test.gif' correspond à une adresse dans un système de fichiers, et de plus le dossier cgi-bin n'est probablement pas accessible.
Tes images devraient être dans un dossier accessible. Crée un sous-dossier de celui où se trouve ton script, appelons-le images par exemple :


print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">', "\n";
print "<html><head><title>CGI-Feedback</title></head>\n";
print "<body><h1>avis CGI du programme <i>comments.pl</i></h1>\n";
print "<p><b>commentaire:</b> $formulaire{commentaire}</p>\n";
print '<img src="images/test.jpeg">';
print "</body></html>\n";
0
breutone Messages postés 10 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 15 mai 2012
15 mai 2012 à 15:33
bonjour le père et merci pour ton aide précieuse
voila le message d'erreur
malformed header from script. Bad header=<!DOCTYPE HTML PUBLIC "-//W3C/: test.pl
j'ai changé les droits du cgi-bin en 777 mais comme meme pour etre sur j'ai essayé avec un répertoire accéssible mais ça marche toujours pas
en plus je suis pas sur de faire appel avec cgi a des image qui ne se trouve pas dans le cgi-bin
merci
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
Utilisateur anonyme
15 mai 2012 à 15:52
J'ai l'impression d'être allé trop vite en besogne en supposant que tu écrivais en PHP. Quel langage utilises-tu en fait ?

Les droits du cgi-bin en 777 n'ont aucun rapport avec le sujet : il s'agit de droit d'accès du système de fichiers, alors qu'il faut des droits d'accès par le serveur http.

Pour l'appel des images, ce n'est pas ton script qui y fait directement appel. Ton script place une balise <img > dans la page qu'il envoie au visiteur, et c'est le navigateur du visiteur qui va venir demander la page. C'est pour ça qu'il faut une adresse qui soit accessible par http.
0
breutone Messages postés 10 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 15 mai 2012
15 mai 2012 à 16:08
bonjour
alors j'utilise perl en faisant appel a cgi
j'ai pas très bien compris par une adresse accecible par http
j'ai essayé avec cgi-bin et le home directory!!
merci beaucoup
0
Utilisateur anonyme
15 mai 2012 à 16:16
Donc je t'ai dit une bêtise en disant "surtout rien avant <!DOCTYPE". Toutes mes excuses.
Je re-deviens d'accord avec
print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">', "\n"; 

Par contre, perl ou pas perl, la balise <img> ne peut pas être, elle, avent <!DOCTYPE. C'est le html qui l'impose.

S'agit-il d'un script que tu lances directement (je ne sais pas trop comment, je ne connais pas perl) , ou bien est-ce un script que tu lances dans la barre d'adresse d'un navigateur ?
0
bg62 Messages postés 23590 Date d'inscription samedi 22 octobre 2005 Statut Modérateur Dernière intervention 15 avril 2024 2 362
15 mai 2012 à 16:18
bienvenue ;)
0
Utilisateur anonyme
15 mai 2012 à 16:29
Bonjour bg62
Je me doutais que tu n'allais pas tarder :)
0
breutone Messages postés 10 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 15 mai 2012
15 mai 2012 à 16:28
j'ai un fichier test.htm qui permet de parcourir un fichier .txt et l'envoi au script perl test.pl qui fait appel lui a un progamme qui génere des graphes des images donc.
jusqu'ici c'est bon pour moi.
maintenant je veux mettre en sortie html ces fameux graphes.
merci
0
Si tu crées un fichier toto.htm qui contient simplement :
<img src="/usr/lib/cgi-bin/test.gif">
Est-ce que ça affiche bien l'image ?
0
breutone Messages postés 10 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 15 mai 2012
15 mai 2012 à 16:41
oui
0
Utilisateur anonyme
15 mai 2012 à 16:47
Alors ça devrait marcher :

print "Content-type: text/html\n\n";
print '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">', "\n";
print "<html><head><title>CGI-Feedback</title></head>\n";
print "<body>";
print '<img src="/usr/lib/cgi-bin/test.jpeg">';
print "</body></html>\n";

Les ' et " sont interchangeables en perl ?
0
breutone Messages postés 10 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 15 mai 2012
15 mai 2012 à 17:12
ça marche toujours pas
ça m'affiche une page blanche
j'ai essayé de modifier
print "Content-type: text/html\n\n"; par : print " Content-type:image/jpeg\n\n";
et la j'ai une page noir avec un message d'erreur :
l'image "http://adresse ip/cgi-bin/test.pl" ne peut etre afficher car elle contient des erreur
voila je suis perdu : test.pl n'a jamais été une image!!
merci beaucoup pour ton aide le père
0
Ce que tu vois en changeant le content-type est normal, car tu n'envoies pas une image mais une page html.
Le problème est très probablement uniquement dans la balise <img> qui n'a pas le bon chemin.
Comment fais-tu pour ouvrir le fichier test.htm ? L'ouvres-tu avec le protocole file: ou http: ?
0
breutone Messages postés 10 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 15 mai 2012
15 mai 2012 à 17:21
le protocole file:
0
Utilisateur anonyme
15 mai 2012 à 17:30
Quand tu lances le script de mon messege de 16h47, tu obtiens une page blanche. Peux-tu vérifier le code source (avec control-U) de la page obtenue ? Correspond-il bien à ce qu'on attend ?
0
breutone Messages postés 10 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 15 mai 2012
Modifié par breutone le 15/05/2012 à 17:52
voila ce que ça m'affiche
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN">
<html><head><title>CGI-Feedback</title></head>
<body><img src="/usr/lib/cgi-bin/test.gif"></body></html>

et puis quand je clic sur le chemin de l'image voila ce que j'obtiens :

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>404 Not Found</title>
</head><body>
<h1>Not Found</h1>
<p>The requested URL /usr/lib/cgi-bin/test.gif was not found on this server.</p>
<hr>
<address>Apache/2.2.14 (Ubuntu) Server at ad ip Port 80</address>
</body></html>

donc voila le probleme se précise il n'arrive pas a lire l'image
mais où faut il la mettre pour qu'il la reconnaisse car quand je mais <img src="/usr/lib/cgi-bin/test.gif"> dans test.htm l'image s'affiche normalement
merci beaucoup le père
0
breutone Messages postés 10 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 15 mai 2012
15 mai 2012 à 17:57
comment faut il changer les droit d'accé du serveur ?
j'utilise apache
merci
0
Utilisateur anonyme
15 mai 2012 à 18:02
(tiens, le jpeg est devenu png...)

Malheureusement, j'ignore comment le perl interragit avec le serveur http (c'est bien du http et non pas du file...). Ce qui m'étonne, c'est de voir uen adresse IP qui n'a pas l'air d'être locale. Tu fais tes essais en ligne ? Alors que ton nom de fichier /usr/lib/cgi-bin/test4.png correspond à un nom local.
0
breutone Messages postés 10 Date d'inscription lundi 14 mai 2012 Statut Membre Dernière intervention 15 mai 2012
15 mai 2012 à 18:22
(tiens, le jpeg est devenu png...)
oui car j'ai pensé a un moment que c'est peut etre l'extention qui n'est pas accepter
!!!
0
Utilisateur anonyme
16 mai 2012 à 14:19
L'extension, il n'y a aucune raison, tant qu'on reste dans des choses standard. Ce qu'il faut surtout, c'est bien indiquer la bonne.
Il ne faut pas changer les droits d'accès au serveur, il faut mettre l'image dans la partie accessible via le serveur, ce qui n'est sûrement pas le cas de cgi-bin.
0