Dysfonctionnement d'un script php (avec codes)
Fermé
clend
Messages postés
21
Date d'inscription
jeudi 2 février 2017
Statut
Membre
Dernière intervention
1 avril 2020
-
20 déc. 2019 à 07:21
clend Messages postés 21 Date d'inscription jeudi 2 février 2017 Statut Membre Dernière intervention 1 avril 2020 - 20 déc. 2019 à 16:55
clend Messages postés 21 Date d'inscription jeudi 2 février 2017 Statut Membre Dernière intervention 1 avril 2020 - 20 déc. 2019 à 16:55
A voir également:
- Dysfonctionnement d'un script php (avec codes)
- Script vidéo youtube - Guide
- Codes ascii - Guide
- Easy php - Télécharger - Divers Web & Internet
- Spotify codes - Guide
- Mes codes personnels - Guide
7 réponses
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
20 déc. 2019 à 09:57
20 déc. 2019 à 09:57
Bonjour,
À première vue, tout semble normal (à part un petit bug ligne 35 ou tu ne refermes pas la balise, mais c'est dans le fichier généré et n'a donc aucune incidence sur ton problème)
As-tu vérifié que tu n'avais pas un caractère bizarre caché quelque part dans le code ?
Xavier
À première vue, tout semble normal (à part un petit bug ligne 35 ou tu ne refermes pas la balise, mais c'est dans le fichier généré et n'a donc aucune incidence sur ton problème)
As-tu vérifié que tu n'avais pas un caractère bizarre caché quelque part dans le code ?
Xavier
clend
Messages postés
21
Date d'inscription
jeudi 2 février 2017
Statut
Membre
Dernière intervention
1 avril 2020
Modifié le 20 déc. 2019 à 10:08
Modifié le 20 déc. 2019 à 10:08
Bonjour et merci,
1. ligne 35, je ne vois pas de balise non refermée (les lignes 33 à 35 n'en font qu'une),
2. s'il y a "un caractère bizarre caché", comment le détecter ?
J'ai analysé n fois depuis plusieurs heures ... et je ne vois rien !
1. ligne 35, je ne vois pas de balise non refermée (les lignes 33 à 35 n'en font qu'une),
2. s'il y a "un caractère bizarre caché", comment le détecter ?
J'ai analysé n fois depuis plusieurs heures ... et je ne vois rien !
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
1 011
20 déc. 2019 à 14:40
20 déc. 2019 à 14:40
1- Et pourtant il te manque bien le '>' de ta balise :)
Mais encore une fois, c'est à l'intérieur de la chaîne de caractère et n'est donc pas lié à ton problème.
2- Ce n'est pas toujours facile... Ouvre ton fichier avec Notepad++, affiche les caractères cachés (Affichage -> Symboles spéciaux -> Afficher tous les caractères). Et regarde bien ton code pour voir s'il y a autre chose que des CR/LF.
Une autre méthode : tu peux aussi essayer de copier-coller des blocs cohérents de ce code dans un nouveau fichier. Tu mets 5 lignes, tu essaies de jouer le fichier. Si ça marche, tu rajoutes les 5 lignes suivantes, jusqu'à arriver au bout. Ça te permettra de voir plus précisément où se situe le problème.
Xavier
Mais encore une fois, c'est à l'intérieur de la chaîne de caractère et n'est donc pas lié à ton problème.
2- Ce n'est pas toujours facile... Ouvre ton fichier avec Notepad++, affiche les caractères cachés (Affichage -> Symboles spéciaux -> Afficher tous les caractères). Et regarde bien ton code pour voir s'il y a autre chose que des CR/LF.
Une autre méthode : tu peux aussi essayer de copier-coller des blocs cohérents de ce code dans un nouveau fichier. Tu mets 5 lignes, tu essaies de jouer le fichier. Si ça marche, tu rajoutes les 5 lignes suivantes, jusqu'à arriver au bout. Ça te permettra de voir plus précisément où se situe le problème.
Xavier
clend
Messages postés
21
Date d'inscription
jeudi 2 février 2017
Statut
Membre
Dernière intervention
1 avril 2020
>
Reivax962
Messages postés
3672
Date d'inscription
jeudi 16 juin 2005
Statut
Membre
Dernière intervention
11 février 2021
Modifié le 20 déc. 2019 à 15:08
Modifié le 20 déc. 2019 à 15:08
Re,
Mais bien sûr: tu as totalement raison. Mais j'ai commis cette erreur en simplifiant le script que j'ai montré ici (elle n'est pas présente dans mon source de site). Elle est corrigée dans la version indentée que j'ai publié plus bas.
Je fonctionne sous Linux et j'utilise "Geany" qui fait très exactement la même chose que Notepad++.
"Geany" indique les fins de ligne par "LF", et c'est ok pour outes les lignes.
Merci pour ton aide !
Mais bien sûr: tu as totalement raison. Mais j'ai commis cette erreur en simplifiant le script que j'ai montré ici (elle n'est pas présente dans mon source de site). Elle est corrigée dans la version indentée que j'ai publié plus bas.
Je fonctionne sous Linux et j'utilise "Geany" qui fait très exactement la même chose que Notepad++.
"Geany" indique les fins de ligne par "LF", et c'est ok pour outes les lignes.
Merci pour ton aide !
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
20 déc. 2019 à 13:58
20 déc. 2019 à 13:58
Bonjour,
Comme je te l'avais indiqué dans ta précédente question,
merci de vérifier que ton fichier est bien encodé en utf8 sans bom
Voir chapitre 1 de ce lien pour savoir comment faire :
https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8
.
PS: A l'avenir, merci de mettre de l'indentation dans ton code..... là c'est illisible.
Comme je te l'avais indiqué dans ta précédente question,
merci de vérifier que ton fichier est bien encodé en utf8 sans bom
Voir chapitre 1 de ce lien pour savoir comment faire :
https://forums.commentcamarche.net/forum/affich-37584944-php-html-caracteres-accentues-et-l-utf8
.
PS: A l'avenir, merci de mettre de l'indentation dans ton code..... là c'est illisible.
clend
Messages postés
21
Date d'inscription
jeudi 2 février 2017
Statut
Membre
Dernière intervention
1 avril 2020
Modifié le 20 déc. 2019 à 14:37
Modifié le 20 déc. 2019 à 14:37
Re,
Je ne comprends pas une telle insistance :
1. pour l'indentation : ok,
2. mais pour l'encodage : je suis bien en UTF-8 sans bom.
Pourquoi me le redemander ?
Je fonctionne toujours en UTF-8 sous Joomla.
Ne pouvant modifier le fichier, j'ai posté une version corrigée avec indentation (cf. plus bas).
Je ne comprends pas une telle insistance :
1. pour l'indentation : ok,
2. mais pour l'encodage : je suis bien en UTF-8 sans bom.
Pourquoi me le redemander ?
Je fonctionne toujours en UTF-8 sous Joomla.
Ne pouvant modifier le fichier, j'ai posté une version corrigée avec indentation (cf. plus bas).
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
20 déc. 2019 à 15:13
20 déc. 2019 à 15:13
Ne confond pas l'encodage "déclaré" dans les fichiers (via les balises <meta du html par exemple ) et l'encodage DU fichier lui même.
Si tu as regardé le lien que je t'ai donné, tu as donc, dans ton éditeur de code, été vérifié l'encodage du fichier.....
maintenant, pour ce qui est de ton souci, si ton fichier est donc bien en utf8 SANS BOM, dans ce cas on va se pencher sur le code lui même.
Mets en commentaire tout ton code et affiche ta page.
Si pas d'erreur, décommentes une partie de ton code et réaffiche la page ... etc jusqu'à trouver quelle partie du code génère ton souci.
Si tu as regardé le lien que je t'ai donné, tu as donc, dans ton éditeur de code, été vérifié l'encodage du fichier.....
maintenant, pour ce qui est de ton souci, si ton fichier est donc bien en utf8 SANS BOM, dans ce cas on va se pencher sur le code lui même.
Mets en commentaire tout ton code et affiche ta page.
Si pas d'erreur, décommentes une partie de ton code et réaffiche la page ... etc jusqu'à trouver quelle partie du code génère ton souci.
clend
Messages postés
21
Date d'inscription
jeudi 2 février 2017
Statut
Membre
Dernière intervention
1 avril 2020
>
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
20 déc. 2019 à 15:25
20 déc. 2019 à 15:25
Re,
Mais je ne confonds pas du tout l'encodage déclaré dans les fichiers (cf. meta) et l'encodage lui-même du fichier : j'ai bien compris qu'on parlait de l'encodage du fichier lui-même.
J'utilise "Geany" sous Linux, et toujours en UTF-8 sans bom.
Par contre, je ne comprends pas tes conseils suivants. À moins que tu signifies :
1. commente chaque ligne du script, et teste,
2. décommente la 1ère ligne, et teste,
3. décommente le 2ème ligne, et teste,
4. etc... jusqu'à trouver la ligne qui bloque !
Je vais essayer cette méthode.
Mais je ne confonds pas du tout l'encodage déclaré dans les fichiers (cf. meta) et l'encodage lui-même du fichier : j'ai bien compris qu'on parlait de l'encodage du fichier lui-même.
J'utilise "Geany" sous Linux, et toujours en UTF-8 sans bom.
Par contre, je ne comprends pas tes conseils suivants. À moins que tu signifies :
1. commente chaque ligne du script, et teste,
2. décommente la 1ère ligne, et teste,
3. décommente le 2ème ligne, et teste,
4. etc... jusqu'à trouver la ligne qui bloque !
Je vais essayer cette méthode.
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
4 717
>
clend
Messages postés
21
Date d'inscription
jeudi 2 février 2017
Statut
Membre
Dernière intervention
1 avril 2020
20 déc. 2019 à 16:28
20 déc. 2019 à 16:28
Tu peux faire ligne par ligne.... ou par bloc.
A toi de voir.
Faut juste penser aux accolades fermantes dans le cas des conditions et des boucles
A toi de voir.
Faut juste penser aux accolades fermantes dans le cas des conditions et des boucles
clend
Messages postés
21
Date d'inscription
jeudi 2 février 2017
Statut
Membre
Dernière intervention
1 avril 2020
>
jordane45
Messages postés
38346
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
16 décembre 2024
20 déc. 2019 à 16:30
20 déc. 2019 à 16:30
Ta méthode porte ses fruits. Regarde mon dernier post : j'ai trouvé l'instruction qui bloque !
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
Les chaines php entre guillements sont évaluées, le <? a une signification particulière en php, tout du moins il y a une histoire de short tags.
Ce ne serait pas ça le problème ?
"<?xml version='1.0' encoding='UTF-8'?>\n"
Les chaines php entre guillements sont évaluées, le <? a une signification particulière en php, tout du moins il y a une histoire de short tags.
Ce ne serait pas ça le problème ?
clend
Messages postés
21
Date d'inscription
jeudi 2 février 2017
Statut
Membre
Dernière intervention
1 avril 2020
20 déc. 2019 à 14:34
20 déc. 2019 à 14:34
Bonjour,
Je me suis fait en temps utile la même remarque. Mais j'ai pris pour modèle un script de génération de sitemap qui fonctionne très bien, et dont voici le modèle de rédaction :
J'ai simplement préféré -à l'intérieur de la chaîne- utiliser des quotes plutôt que les guillemets déjà utilisés pour l'encadrement et qu'il faut donc ici échapper.
nb: j'ai testé cette même écriture, mais avec la même erreur système.
Merci de m'aider.
Je me suis fait en temps utile la même remarque. Mais j'ai pris pour modèle un script de génération de sitemap qui fonctionne très bien, et dont voici le modèle de rédaction :
fwrite ($pf, "<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n" . "<urlset xmlns=\"http://www.sitemaps.org/schemas/sitemap/0.9\"\n" . " xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\"\n" . " xsi:schemaLocation=\"http://www.sitemaps.org/schemas/sitemap/0.9\n" . " http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd\">\n" . " <url>\n" . " <loc>" . SITE . "/</loc>\n" . " <changefreq>" . FREQUENCY . "</changefreq>\n" . " </url>\n");
J'ai simplement préféré -à l'intérieur de la chaîne- utiliser des quotes plutôt que les guillemets déjà utilisés pour l'encadrement et qu'il faut donc ici échapper.
nb: j'ai testé cette même écriture, mais avec la même erreur système.
Merci de m'aider.
trifou
>
clend
Messages postés
21
Date d'inscription
jeudi 2 février 2017
Statut
Membre
Dernière intervention
1 avril 2020
20 déc. 2019 à 15:14
20 déc. 2019 à 15:14
Faudrait quand même à utiliser une bonne structure de façon à rendre ton code lisible.
J'aurais fait (il y a sans doute des erreurs)
Beaucoup plus lisible, d'ailleurs pour faire ça, j'aurais même créé des gabarits xml dans divers fichiers avec les marqueurs de remplacements à faire, aucune idée de comment le faire avec php (lib xml ?), de façon à charger ces fichiers et de faire les remplacements dedans.
J'aurais fait (il y a sans doute des erreurs)
$xml_array = array( '<?xml version="1.0" encoding="UTF-8"?>', '<urlset xmlns="http://www.sitemaps.org/schemas/sitemap/0.9', ' xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"', ' xsi:schemaLocation="http://www.sitemaps.org/schemas/sitemap/0.9', ' http://www.sitemaps.org/schemas/sitemap/0.9/sitemap.xsd">', ' <url>', '<loc>' . SITE . '</loc>', '<changefreq>' . FREQUENCY . '</changefreq>', '</url>', ) fwrite($pf, implode("\n", $xm_arrayl)
Beaucoup plus lisible, d'ailleurs pour faire ça, j'aurais même créé des gabarits xml dans divers fichiers avec les marqueurs de remplacements à faire, aucune idée de comment le faire avec php (lib xml ?), de façon à charger ces fichiers et de faire les remplacements dedans.
clend
Messages postés
21
Date d'inscription
jeudi 2 février 2017
Statut
Membre
Dernière intervention
1 avril 2020
>
trifou
Modifié le 20 déc. 2019 à 17:21
Modifié le 20 déc. 2019 à 17:21
C'est bien ce type d'instruction qui met mon script en défaut ! La cause de l'erreur est ici.
Je viens d'appliquer ta règle d'écriture avec un array() : l'erreur est strictement la même.
Je viens d'appliquer ta règle d'écriture avec un array() : l'erreur est strictement la même.
clend
Messages postés
21
Date d'inscription
jeudi 2 février 2017
Statut
Membre
Dernière intervention
1 avril 2020
Modifié le 20 déc. 2019 à 14:47
Modifié le 20 déc. 2019 à 14:47
Voici une version indentée de mon script :
<?php $conn = mysqli_connect('...'); $req = "SELECT ..."; $resultat = $conn->query("SET NAMES utf8"); $resultat = $conn->query($req) or die('Erreur SQL !'. $req .'' . $conn->connect_error()); $num = 0; $nb = 1; $nbt = 1; $traitement = true; // effacement préalable des éventuels fichiers "sitemap-*" préexistants if ( file_exists('sitemap-1.xml') ) { // '@' will stop displaying "Resource Unavailable" error because of file is open some where. if( @unlink('sitemap-*') !== true ) { $traitement = false; } } if ($traitement) { // préparation du fichier "sitemap-index.xml" $xml1 = fopen('sitemap-index.xml',"w"); fwrite($xml1, "<?xml version='1.0' encoding='UTF-8'?>\n" . "<sitemapindex xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>\n" . "<sitemap>\n" . "<loc>https://... url du site .../sitemap.xml</loc>\n" . "</sitemap>\n"); while($arr = mysqli_fetch_array($resultat)) { if ($nb == 1) { // on crée un nouveau fichier sitemap-x.xml $num = $num + 1; $fich = 'sitemap-' .$num. '.xml'; echo "<br />création du fichier " . $fich; $xml2 = fopen($fich, 'w'); fwrite($xml2, "<?xml version='1.0' encoding='UTF-8'?>\n" . "<!-- Date: " . date ('Y-m-d H:i:s') . " -->\n" . "<urlset xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>\n"); // on complète le fichier sitemap index fwrite($xml1, "<sitemap>\n" . "<loc>https://... url du site .../sitemap-" .$num. ".xml</loc>\n" . "</sitemap>\n"); } // on complète le fichier sitemap-x.xml if ($arr[3] == '') { $spec = trim($arr[2]); }else{ $spec = trim($arr[3]); } $ville = trim(substr($arr[7],7)); // on supprime le code postal devant le nom de ville $ville2 = strtoupper($ville); $pos = strpos($ville2, "CEDEX"); if ($pos === false) { // cette ville n'est pas suivie du Cedex $vil = $ville; }else{ // on va supprimer 'CEDEX ...' après le nom de ville $ll = strlen($ville) - $pos; $vil = substr($ville, -$ll); } $prat = trim($arr[1]). '-' .trim($arr[0]); fwrite($xml2, "<url>\n" . "<loc>https://... url du site .../" .$spec. "/" .$vil. "/" .$prat. "</loc>\n" . "</url>\n"); $nb = $nb + 1; $nbt = $nbt + 1; if ($nb > 10) { // pour les tests (mettre 1000 ensuite) fwrite($xml2, "</urlset>\n"); fclose($xml2); $nb = 1; } if ($nbt > 25) { // pour les tests (à enlever ensuite) break; } } // fin du traitement fwrite($xml2, "</urlset>\n"); fclose($xml2); fwrite($xml1, "</sitemapindex>\n"); fclose($xml1); }else{ echo "<br />Les fichiers de travail 'sitemap-*.xml' ne peuvent pas être effacés (traitement impossible) !"; } mysqli_close($conn); ?>
clend
Messages postés
21
Date d'inscription
jeudi 2 février 2017
Statut
Membre
Dernière intervention
1 avril 2020
Modifié le 20 déc. 2019 à 16:42
Modifié le 20 déc. 2019 à 16:42
Voici une piste de travail plus précise . C'est la ligne 21 extraite ci-dessous qui génère l'erreur :
Mais pourquoi ???
fwrite($xml1, "<?xml version='1.0' encoding='UTF-8'?>\n" . "<sitemapindex xmlns='http://www.sitemaps.org/schemas/sitemap/0.9'>\n" . "<sitemap>\n" . "<loc>https://... url du site .../sitemap.xml</loc>\n" . "</sitemap>\n");
Mais pourquoi ???