Twitter iPhone pliant OnePlus 11 PS5 Disney+ Orange Livebox Windows 11

problème curieux, php s'arrête ???

21 réponses
Avatar
Une Bévue
j'ai un script php très simple :
<?php
error_reporting(E_ALL);
date_default_timezone_set('Europe/Paris');
setlocale(LC_CTYPE, 'fr_FR.utf-8');
if(isset($_GET['json'])) {
echo "HAVE \$_GET...<br />";
print_r($_GET['json']);
echo "<pre id='pasteboard>";
$pasteboard = json_decode($_GET['json'], true);
foreach($pasteboard as $key => $value) {
echo "$key => $value \n";
}
echo "</pre>";
} else {
echo "NO \$_GET...<br />";
}
?>

ce script php est dans une iframe côté html/js :
<iframe id="send_JS_2_php" name="send_JS_2_php"
src="send_JS_2_php.php"></iframe><br />

avec JS je change le src de cette iframe par :
iframe.src = "send_JS_2_php.php?json=" + JSON.stringify(pasteboard);

là, dans mon iframe, je vois bien que le php reçoit le 'pasteboard car
print_r($_GET['json']); me donne :
{"firstname":"Alfred","lastname":"Hitchcock"}
ce qui correspond tout à fait à l'objet js 'pasteboard :
pasteboard = {firstname: 'Alfred', lastname: 'Hitchcock'};

MAIS, et c'est là que je ne comprends plus tout se passe "comme si"
l'éxécution du script php s'arrêtait là (càd après le
print_r($_GET['json'])).

Un moment j'ai pensé que mon json_decode($_GET['json'] plantait mais le :
echo json_last_error_msg() ...
ne donne rien

donc même en supprimant ce $pasteboard = json_decode($_GET['json'], true);

simplement en laissant donc :
echo "<pre id='pasteboard>";
echo "</pre>";

je ne vois pas du tout le "<pre id='pasteboard></pre>" dans le html
résultant.

c'est pourquoi je dis que tout se passe "comme si" l'éxécution du script
s'arrêtait après le print_r.

bon, bien sûr, j'ai essayé en direct ce script par qqc comme :

<url_du_script>?json=<le json en question>

ça donne exactement là même chose...

10 réponses

1 2 3
Avatar
Olivier Miakinen
Le 18/10/2014 15:21, Une Bévue a écrit :
Le 17/10/14 12:08, Olivier Miakinen a écrit :
Tant qu'une chaîne de caractères ouverte par ' n'est pas refermée par
un autre ' je ne vois pas comment il pourrait détecter qu'on est censé
être sorti de la chaîne.



euh, côté php je peux très bien faire :

echo "Il n'est pas... <br />";



Oui, bien sûr, la chaîne PHP commence et finit par " et peut
contenir autant de ' que tu veux avant le " qui la ferme.

Je répondais à ton étonnement à propos de HTML, alors que justement
c'est exactement comme pour PHP : si une chaîne commence par ' elle
peut contenir autant de > et de sauts de ligne que tu veux avant le
' qui la ferme.

Tu dois apprendre à ne pas faire d'hypothèse avant d'avoir*vu* le
HTML (code source) plutôt que ses effets.



mais, je l'ai bien regardé, seulement il n'y avait rien, le body du
document iframe est vide dans ce cas.



Tu as regardé le source HTML du code qui fait appel à l'iframe.

Tu n'as pas regardé le source HTML du contenu de l'iframe.

Or c'est ce contenu qui importe.

>euh je regarde toujours ce qui se passe à la console et au niveau des
>éléments html.


Je ne suis pas sûr qu'on ait la même notion de « regarder au niveau des
éléments HTML ». Ou plutôt, il faudrait que tu puisses « regarder au
niveau des caractères composant le code HTML ».



rien de suspect côté html.



Je n'avais pas réalisé au début de cette discussion que tu as *deux*
codes HTML. C'est évidemment celui qui est généré par le PHP fautif
qu'il fallait regarder, et pas l'autre !

Cordialement,
--
Olivier Miakinen
Avatar
Olivier Miakinen
Le 18/10/2014 15:23, Une Bévue a écrit :
Le 18/10/14 15:16, Une Bévue a écrit :
Oui et non, enfin, je veux dire que je regarde plutôt que le code
source, ce qui est une erreur dans ce cas, je regarde à "Inspecter
l'élément", qui ne me donne pas la même chose que le code source.



je me corrige, il vaut mieux faire comme j'ai l'habitude de faire,
regarder à Menu Contextuel > Inspecter l'élément > Élément.

car là je vois tous les résultats d'un seul coup :

- le code généré par le JS
- le code généré par le php.



Tu ne vois le code généré par le PHP qu'à travers le filtre de
l'interprétation de l'iframe, il peut donc être modifié à ton insu.
Avatar
Une Bévue
Le 18/10/2014 18:01, Olivier Miakinen a écrit :
mais, je l'ai bien regardé, seulement il n'y avait rien, le body du
>document iframe est vide dans ce cas.


Tu as regardé le source HTML du code qui fait appel à l'iframe.

Tu n'as pas regardé le source HTML du contenu de l'iframe.

Or c'est ce contenu qui importe.



ben si mais malheureusement moi je n'avais vu le manque de ', c'est tout.


>>> >euh je regarde toujours ce qui se passe à la console et au niveau des
>>> >éléments html.




>>Je ne suis pas sûr qu'on ait la même notion de « regarder au niveau des
>>éléments HTML ». Ou plutôt, il faudrait que tu puisses « regarder au
>>niveau des caractères composant le code HTML ».


>
>rien de suspect côté html.


Je n'avais pas réalisé au début de cette discussion que tu as*deux*
codes HTML. C'est évidemment celui qui est généré par le PHP fautif
qu'il fallait regarder, et pas l'autre !



ben c'est ce que j'ai fait mais bon, comme je ne voyais le ' manquant...
j'ai cherché vainement )))

Cordialement
Avatar
Olivier Miakinen
Bonjour,

Je suis désolé d'insister, mais ça mesemble important.

Le 18/10/2014 18:18, Une Bévue a écrit :
Le 18/10/2014 18:01, Olivier Miakinen a écrit :
mais, je l'ai bien regardé, seulement il n'y avait rien, le body du
>document iframe est vide dans ce cas.


Tu as regardé le source HTML du code qui fait appel à l'iframe.

Tu n'as pas regardé le source HTML du contenu de l'iframe.

Or c'est ce contenu qui importe.



ben si mais malheureusement moi je n'avais vu le manque de ', c'est tout.



Si tu l'avais fait, tu aurais vu que, contrairement à ce que tu as
écrit en titre de ce fil, php *ne s'arrête pas*.

Du coup, au lieu de poser la question sur ce forum, avec le code
source php, pour un prétendu bug php, tu aurais publié le code
source html en disant « j'ai ça dans mon iframe mais pourtant ça
fait comme s'il n'y avait rien », et on se serait concentrés sur
la recherche du bug html (l'absence de quote fermante).

Je n'avais pas réalisé au début de cette discussion que tu as*deux*
codes HTML. C'est évidemment celui qui est généré par le PHP fautif
qu'il fallait regarder, et pas l'autre !



ben c'est ce que j'ai fait mais bon, comme je ne voyais le ' manquant...
j'ai cherché vainement )))



Oui, tu cherchais un bug php, c'était normal que tu ne trouves rien.

Cordialement,
--
Olivier Miakinen
Avatar
Une Bévue
Le 19/10/2014 10:54, Olivier Miakinen a écrit :
Si tu l'avais fait, tu aurais vu que, contrairement à ce que tu as
écrit en titre de ce fil, php*ne s'arrête pas*.


ben, désolé,c'est pas ce que j'ai compris et ce que je vois.
avec le simple cote manquant,plus rien côté html...
Avatar
Olivier Miakinen
Le 19/10/2014 18:15, Une Bévue a écrit :

Si tu l'avais fait, tu aurais vu que, contrairement à ce que tu as
écrit en titre de ce fil, php*ne s'arrête pas*.


ben, désolé,c'est pas ce que j'ai compris et ce que je vois.
avec le simple cote manquant,plus rien côté html...



Ça me semble tout simplement impossible. On peut accéder au html en
direct ou bien c'est privé ?
Avatar
Une Bévue
Le 20/10/14 01:15, Olivier Miakinen a écrit :
Ça me semble tout simplement impossible. On peut accéder au html en
direct ou bien c'est privé ?


c'est privé mais je peux le mettre en ligne.

bon côté html, le code source de la page, il n'y a quasiment rien vu que
c'est le js qui produit les noeuds.

je comprends ce que tu veux dire, le php doit passer dessus mon erreur
puisque pour lui un seul simple cote pris entre deux doubles cotes, ce
devrait être valide.

dans mon html produit par du js (fabrication de l'iframe) j'ai le src de
l'iframe mis à :

</Ruby_ws/map_html_js/send_JS_2_php.php?json={"firstname":"Alfred","lastname":"Hitchcock"}>

donc je peux très bien faire dans un butineur (ce que j'ai fait pendant
mes tests) :
<http://localhost/Socket/Ruby_ws/map_html_js/send_JS_2_php.php?json={"firstname":"Alfred","lastname":"Hitchcock"}>


*** bon en fait c'est toi qui a raison ***

donc si j'examine la réponse de php en direct (sans le html), j'obtiens
dans :

Menu Contextuel > Inspecter l'élément > Elements :
<!DOCTYPE html>
<html lang="en"><head>
<meta charset="UTF-8">
<title>send_JS_2_php</title>
</head>
<body>
</body></html>

donc absolument rien dans le body.

par contre si j'examine cette réponse par :
Menu Contextuel > Afficher le code source de la page, j'obtiens :

<!doctype html>
<html lang="en">
<head>
<meta charset="UTF-8" />
<title>send_JS_2_php</title>
</head>
<body>
<pre id='pasteboard>firstname => Alfred
lastname => Hitchcock
</pre> </body>
</html>

c'est-à-dire tout ce que renvoie le php qui ne s'arrête donc pas.
d'ailleurs la partie :
<pre id='pasteboard>firstname => Alfred
lastname => Hitchcock
</pre> </body>
</html>

est affichée en rouge...
Avatar
Olivier Miakinen
Le 20/10/2014 06:49, Une Bévue a écrit :

[...]
*** bon en fait c'est toi qui as raison ***



J'en étais sûr, ça ne pouvait pas en être autrement. Merci d'avoir
regardé.

[...]
d'ailleurs la partie :
<pre id='pasteboard>firstname => Alfred
lastname => Hitchcock
</pre> </body>
</html>

est affichée en rouge...



Et donc, la prochaine fois que tu auras un bug dans un iframe, tu
commenceras par regarder si par hasard il n'y aurait pas un truc en
rouge dans le source HTML *de l'iframe*, ça te fera gagner beaucoup
de temps ! :-)

Cordialement,
-
Olivier Miakinen
Avatar
Une Bévue
Le 20/10/14 14:38, Olivier Miakinen a écrit :
Et donc, la prochaine fois que tu auras un bug dans un iframe, tu
commenceras par regarder si par hasard il n'y aurait pas un truc en
rouge dans le source HTML*de l'iframe*, ça te fera gagner beaucoup
de temps !:-)



C'est sûr !

Merci encore de ce thread assez long pour un '.
Avatar
Olivier Miakinen
Le 20/10/2014 16:06, Une Bévue a écrit :

Merci encore de ce thread assez long pour un '.



Ça en valait la peine !
1 2 3