1 pièce(s) jointe(s)
résolution impossible d'un bug
Bonjour,
Je viens solliciter votre aide car je suis bloqué sur un problème délicat en PHP et dont j'arrive pas à résoudre .
Avant toutes choses, j'expose les faits. j'ai repris un projet, dont je dois assurer la maintenance, l'objectif de la maintenance est simple, c'est-à-dire, permettre au webmaster de rédiger et valider des articles.
Et pour cela mon prédécesseur, utilise à sa sauce du XML pour sauvegarder temporairement les données, pour une validation avant publication.
Son mécanisme fonctionnait parfaitement jusqu'au jour où il est impossible au webmaster de consulter la liste des articles en attente de validation ( les fichiers existent sur le serveur mais il est impossible de les chargés, on peut modifier, complété les fichiers en question mais impossible de récupérer le contenus "format du fichier art_id.xml" ) et quant aux utilisateurs impossibles de modifier les documents ou articles bref.
J'ai cherché du côté serveur pour savoir si cela venait pas d'une mise à jour du serveur notamment la "LibXMl" mais aucun résultat, je me suis penché alors sur le fait d'un non-accès au répertoire temporaire de validation il n'en est rien; de ce fait, j'ai pensé à tricher sur le code en forçons la récupération des données de celle-ci pareil je suis partiellement bloquer alors, si vous avez une idée une suggestion pour m'aider à résoudre ce dilmne je serais très ravie.
Vous comprendrez que pour certaines raisons, je ne peux malheureusement pas divulguer la totalité du code sources sur le forum.
je tiens également à dire que le domaine du web ( PHP ) n'est pas mon point fort mais, je le fais pour m'exercer et m'y intéresser davantage.
Merci d'avance pour vos réponse et à bientôt.
Pièces joints quelques sources partie défaillante
Résolution impossible d'un bug
le PC locale que j'utilise est un Mac et comme serveur local j'ai MAMP ( j'ai oublié de préciser le programme fonctionne très bien sur Mac)
Apache 2.2.26 , pythons 2.7.6, Phpmyadmin 4.1.9, libxmls2 2.8.0 et Zend
Quant à l'hébergeur je ne peux pas savoir grand-chose car ces informations sur la configuration n'ont pas été transmises mais, par déduction je sais que c'est que
Phpmyadmin ( version antérieure à vérifier demain) libxml2 2.8.0 et deux modules Zend présent :(
[PHP 5.2] résolution impossible d'un bug
Bonjour à tous,
Effectivement je n'ai pas spécifié ces détails alors voilà, il est impossible sur le serveur de production (hébergeur) par les actions que je vais énoncer plus bas de lister l'ensemble des articles en attentes de validations après création ou modification de celle-ci et qui existe bel et bien sur le serveur sous le format XML.
Le problème vient du chargement de l'ensemble des articles disponible dans le répertoire temporaires "temps". le principe de validation de l'article est simple, au départ un membre crée sont article ou l'édite puis quand celui-ci à terminer en le validant, le contenus de son article est sauvegardés dans un fichier XML ( avec un nom défini comme tels "articles_ numero_session_encrypté_md5. XML". ) => article_3f167e6ed6dcb06bed2c68b3801fd723.xml
voici comment est représenté le fichier XML
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26
|
<?xml version="1.0" encoding="ISO-8859-1"?>
<articles>
<article1>
<ref_categorie>4</ref_categorie>
<titre>RBP sur la Protection personnelle anti-vectorielle</titre>
<contenu>Le texte court au format pdf des 31 recommandations est directement accessible à partir du lien suivant (36 pages - 1,2 Mo): <a href="http://www.medecine-voyages.fr/publications/ppavtextecourt.pdf|texte court des recommandations" target="_blank">http://www.medecine-voyages.fr/publi...ecommandations</a>
</contenu>
<resume>La decine des Voyages (SMV) et la Société française de Parasitologie ont coordonné l'élaboration de ces recommandations pour la bonne pratique (RBP) concernant la protection personnelle antivectorielle.
</resume>
<type_article>196610</type_article>
<droits>1</droits>
<ref_auteur>-1</ref_auteur>
<id_article>188</id_article>
<date_debut_affichage></date_debut_affichage>
<date_fin_affichage>2147468400</date_fin_affichage>
<date_debut></date_debut>
<date_fin></date_fin>
<nom_contact></nom_contact>
<email_contact></email_contact>
<lieux></lieux>
<ref_inscrit>-1</ref_inscrit>
<date_soumission>1406707558</date_soumission>
</article1>
</articles> |
Le webmaster n'a plus qu'à cliquer sur le lien suivi de publication qui liste tous les articles en attente de validation puis choisie une pour la validé ou pas , il a également la possibilité de le rectifier. Après cela, si l'article est publier le créateur peut également la modifier à nouveau, mais le processus recommencera, c'est-à-dire il sera à nouveau soumis à une autre validation du webmaster etc.
Depuis, je ne sais quel incident, il est devenus impossible même après création d'un nouvel article de le lister, par déduction en peut dire que cela vient du chargement des articles en attente, mais non, car sur un poste local cela fonctionne correctement, j'ai causé un bug similaire sur la fonction qui charge la liste, j'ai obtenu le même résultat que sur le serveur de production, mais ça ne veut pas forcément dire que ça viens de là, j'ai fait des essayer afin de voire d'où peut également venir cet incident je tombe très vite sur pas mal de cas multiples et possibilités qui peuvent causer ce bug, exemple tableaux de données qui récupèrent pas les contenus et renvoie un tableau vide, impossibilité d'accès sur le article, perte de session, impossibilité de lire le fichier, etc. ( raison pour laquelle j'ai mis les fonctions essentiel en partis dans le fichier ZIP ).
Alors pour résumé la démarche, après la connexion du webmaster sur le site il clique sur le lien "suivi de publication" dans son panneau administration, puis tombe sur une page "suivie_de_publication.php5" qui liste les publications en attente de validation, par la suite il peut cliqué sur un des nombreux articles pour sa consultation avec la possibilité d'apporté des correctifs après quoi il valide ou refuse la publication.
Dans le cas où la publication est acceptée l'article est consultable en ligne, dans le cas contraire un courriel est automatiquement expédier à l'éditeur de l'article en lui précisant pourquoi sont article n'a pas été publier ou pas.
le problème est le listage des articles avant validation car il n'y a rien, aucun article en attente même après création d'un article et sans cette phase, impossible de publier n'importe quels articles, on peut toujours tricher sur le procéder de validation en inscrivant directement le contenus dans la base de donnée mais là encore cela nécessite une modification en profondeur de la partie gestion des articles.
j'espère que mon explication a apporté plus d'informations sur l'incident tout en espérons que vous pourriez éclairer ma lanterne, je vous remercie d'avance et à bientôt.
[PHP 5.2] résolution impossible d'un bug
Je suis d'accord avec toi et c'est ce qui revient à ma solution analyse, une mise à jour du coté hébergeurs qui a pu causer cet incident, car en testant l'ensemble du site en locale dans un autre environnement simulé aussi bien que sur PC où Mac il s'avère qu'il est aucune erreur, enfin sauf quelques détails minimes qui n'ont rien à avoir au problème.
Il se peut que cela ne vienne pas d'une mise à jour, les hypothèses sont nombreuses. La Seule solution actuelle que je peux éventuellement essayer d'en appliquer est de valider les contenus sans passer par la case attente mais, là encore, il faut modifier en profondeur certains mécanismes (sans oublier que le code n'est pas vraiment commenté) ou crée un autre mécanisme de gestion et ainsi gère l'application autrement et je n'ai pas le temps nécessaire pour réaliser ce travail tant bien même que mon domaine à moi n'est pas la programmation web.
Je me vois mal en à peine une semaine modifier très en profondeur tout un mécanisme ou certaines zones me son obscure, j'ai fait quelque fonction mais en se rend bien compte que je ne suis pas un pro du langage Php. :aie:
[PHP 5.2] résolution impossible d'un bug
Bonjour voici la fonction concernée, celle qui charge les fichiers d'articles temporaires.
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127
|
<?php
/***
* Include Fichier
* Articles
***/
//include("f_Articles.php");
// Retourne l'intégralité des fichiers temporaires en cours, triés par session et catégorie
function list_temporary_submit(session $session, $verif = true) {
// Hacking attempt
if (!is_membre_ca($session) && $verif) {
return false;
}
if (!$temp_dh = @opendir(TEMPORARY_DIR)) {
return false;
}
$retour = array();
$pattern_temp = "/^(.+)_([a-zA-Z0-9]{32})\.xml$/";
while (($file = readdir($temp_dh)) !== false) {
switch ($file) {
case "." :
continue;
case "..":
continue;
case ".htaccess":
continue;
}
$results = array();
if (preg_match($pattern_temp, $file, $results)) {
// Type de fichier temporaire
$type_of_file = $results[1];
// Id de session
$id_session = $results[2];
// Création d'une "fausse" session
$s_factice = new session_factice($id_session);
// On définit is_inscription à false si il n'existe pas déjà pour cette session
if (!isset($retour[$s_factice->id_session]['inscription']['is_inscription'])) {
$retour[$s_factice->id_session]['inscription']['is_inscription'] = false;
$retour[$s_factice->id_session]['inscription']['finalized'] = false;
$retour[$s_factice->id_session]['inscription']['pre_finalized'] = false;
}
// On définit article_ok à false si il n'existe pas déjà pour cette session
if (!isset($retour[$s_factice->id_session]['article']['finalized'])) {
$retour[$s_factice->id_session]['article']['finalized'] = false;
}
switch($type_of_file) {
// Inscription / Infos personnelles
case "inscrit":
$inscrit = get_inscrit($s_factice);
// Dans le cas de l'inscription, on le précise
if ($inscrit && !$inscrit['inscrit']['id_inscrit']) {
$retour[$s_factice->id_session]['inscription']['is_inscription'] = true;
}
$retour[$s_factice->id_session]['inscription']['inscrit'] = $inscrit;
break;
case "structures":
$retour[$s_factice->id_session]['inscription']['structures'] = get_structures($s_factice);
break;
case "fonctions":
$retour[$s_factice->id_session]['inscription']['fonctions'] = get_fonctions($s_factice);
break;
case "adresses":
$retour[$s_factice->id_session]['inscription']['adresses'] = get_adresses($s_factice);
break;
case "telephones":
$retour[$s_factice->id_session]['inscription']['telephones'] = get_telephones($s_factice);
break;
case "emails":
$retour[$s_factice->id_session]['inscription']['emails'] = get_emails($s_factice);
break;
case "pre_inscription_ok":
$retour[$s_factice->id_session]['inscription']['pre_finalized'] = true;
break;
case "inscription_ok":
$retour[$s_factice->id_session]['inscription']['finalized'] = true;
break;
case "adresse_principale_ok":
break;
case "email_principal_ok":
break;
case "telephone_principal_ok":
break;
// Articles
case "articles":
$retour[$s_factice->id_session]['article']['articles'] = get_articles($s_factice);
break;
// CVIs
case "fiche_cvi":
$retour[$s_factice->id_session]['cvi']['cvi'] = get_cvi($s_factice);
break;
}
}
}
return $retour;
}
?> |
La seconde est celle qui traite le résultat fourni par la fonction "list_temporary_submit(.....)".
Comme résultat des données j'ai ça sur le serveur de production
Code:
1 2
|
Array ( [709ae458cc3b6d404d1ce193b7b626ed] => Array ( [inscription] => Array ( [is_inscription] => [finalized] => [pre_finalized] => ) [article] => Array ( [finalized] => ) ) [daa76cc18a5da9f6e4436ac142efb072] => Array ( [inscription] => Array ( [is_inscription] => [finalized] => [pre_finalized] => ) [article] => Array ( [finalized] => ) ) [ccc45e7d231add251ab2cfb5eef34ee5] => Array ( [inscription] => Array ( [is_inscription] => [finalized] => [pre_finalized] => ) [article] => Array ( [finalized] => ) ) [c34a364801b94560307f5a741eedcca6] => Array ( [inscription] => Array ( [is_inscription] => [finalized] => [pre_finalized] => ) [article] => Array ( [finalized] => ) ) [a7353836a3d95cad6132c251078e1418] => Array ( [inscription] => Array ( [is_inscription] => [finalized] => [pre_finalized] => ) [article] => Array ( [finalized] => ) ) [6f29536b17914a91555af60b21cbca46] => Array ( [inscription] => Array ( [is_inscription] => [finalized] => [pre_finalized] => ) [article] => Array ( [finalized] => ) ) [627029e9db301915aff34ea0aece8010] => Array ( [inscription] => Array ( [is_inscription] => [finalized] => [pre_finalized] => ) [article] => Array ( [finalized] => ) ) [9f15ca54df7d09b8fc6778755f794d9c] => Array ( [inscription] => Array ( [is_inscription] => [finalized] => [pre_finalized] => ) [article] => Array ( [finalized] => ) ) [38ac2965ffd7c6d430eee20d3c5b0c34] => Array ( [inscription] => Array ( [is_inscription] => [finalized] => [pre_finalized] => ) [article] => Array ( [finalized] => ) ) [130a86456d8dac6759682a52fa18b5a0] => Array ( [inscription] => Array ( [is_inscription] => [finalized] => [pre_finalized] => ) [article] => Array ( [finalized] => ) ) |
le même code sûr en locale j'obtiens ceci.
Code:
1 2
|
Array ( [f50123a44d9886eae7a8749b22e9211c] => Array ( [inscription] => Array ( [is_inscription] => 1 [finalized] => [pre_finalized] => 1 [adresses] => Array ( [adresses] => Array ( [adr1] => Array ( [ref_fonction_temp] => 2 [ref_fonction] => [num_voie] => [num_voie_plus] => [type_voie] => [adresse] => Quartier Nautique [adresse2] => [CP] => **** [ville] =>****[cedex] => [BP] => [pays] => France [type_adresse] => 0 [id_adresse] => 855 [ref_structure] => [ref_inscrit] => [date_soumission] => 1403507597 ) [adr2] => Array ( [ref_fonction_temp] => 4 [ref_fonction] => [num_voie] => 45 [num_voie_plus] => [type_voie] => rue [adresse] => de Paris [adresse2] => [CP] => 9*** [ville] => Roissy**[cedex] => Cedex [BP] => BP 10** [pays] => France [type_adresse] => 0 [id_adresse] => 1865 [ref_structure] => [ref_inscrit] => [date_soumission] => 1403507597 ) [adr3] => Array ( [ref_fonction_temp] => 5 [ref_fonction] => [num_voie] => 4 [num_voie_plus] => [type_voie] => rue [adresse] => Claude **** [adresse2] => [CP] => 28*** [ville] => Le Coudray [cedex] => [BP] => [pays] => France [type_adresse] => 0 [id_adresse] => 846 [ref_structure] => [ref_inscrit] => [date_soumission] => 1403507597 ) [adr4] => Array ( [ref_fonction_temp] => 7 [ref_fonction] => [num_voie] => 5 [num_voie_plus] => [type_voie] => [adresse] => PLACE DE **** [adresse2] => [CP] => 92*** [ville] => LA **** [cedex] => CEDEX [BP] => [pays] => [type_adresse] => 3 |
les * ont été mise par moi pour caché les informations
Merci à tous à bientôt
[PHP 5.2] résolution impossible d'un bug
j'obtiens
Code:
1 2 3 4
|
début
première passe
deuxième passe |
donc je présume que ce sont ces fonction qui bloque ?
[PHP 5.2] résolution impossible d'un bug
[PHP 5.2] résolution impossible d'un bug
il liste bien l'ensemble du répertoire
et m'affiche patern valide