cs_richardjul
Messages postés7Date d'inscriptionlundi 16 octobre 2006StatutMembreDernière intervention24 janvier 2008
-
23 janv. 2008 à 13:33
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 2009
-
24 janv. 2008 à 16:33
Bonjour,
j'ai réalisé un script qui doit récupérer des annonces de job sur un flux xml, et me les injecter dans ma BDD Mysql pour ensuite les afficher sur notre site. Je fais des tests sur un serveurs de dev. et la tout se passe pour le mieux, les infos sont bien récupérées, et insérée dans la base comme il se doit.
Problème! dès que je met en prod. mon script sur l'hébergeur (Nexenservices), il se passe qqe chose d'étonnant, qqs uns des contenus des variables que je dois stocker se trouve couper, par exemple je dois stocker Luxembourg sur une annonce, et sur 10 au total dans le flux il va me couper la première lettre pour un "uxembourg" et les 2 premières pour une autre "embourg", alors que les 8 autres sont traitées normalement! le plus étonnant c que sur le dev. ça fonctionne très bien! Il me fait la même sur des ref que 'ai hyper besoin pour faire des tries et des tests.
J'ai fait des echo des valeurs que je veux insérer et ça donne ça :
Comment puis-je faire pour régler ce problème ou je me prend la tête depuis plusieurs jours?
Mon script php :
<?php
mysql_connect("monhebergeur.com", "monlogin, "MDP") or die("Impossible de se connecter");
//mysql_connect("localhost", "root", "") or die("Impossible de se connecter");
mysql_select_db("farvest") or die("pas possible de trouver la base");
/** fonction startElement, déclenchée lorsque le parseur rencontre une balise XML du type **/
function startElement($parser, $name, $attrs) {
global $curtag, $date, $titre, $lieu, $url, $entreprise, $ref ;
$curtag = $name;
if ($name "DATE") $date "";if ($name "TITRE") $titre "";if ($name "URL") $url "";if ($name "ENTREPRISE") $entreprise "";if ($name "ref") $ref "";if ($name "Lieu") $lieu "";
}
/** fonction endElement, déclenchée lorsque le parseur rencontre une balise XML du type **/
function endElement($parser, $name) {
global $curtag, $date, $titre, $lieu, $url, $entreprise, $ref, $fournisseur ;
$curtag = "";
if ($name == "LIEU") {
//Formatage des entrées pour la BDD
$date = addslashes($date);
$date2 = explode("/",$date);
$date_finale = $date2[2]."-".$date2[1]."-".$date2[0];
//Affichage des entrées titre et entreprise enregistré dans la base
echo $date_finale;
echo "
";
echo " ".$ref." ";
echo "
";
echo $titre1;
echo "
";
echo $lieu1;
echo "
";
echo $entreprise1;
echo "
";
echo $url1;
echo "
";
echo $fournisseur;
echo "
";
// on regarde si la ref existe déjà
$req_ref = "SELECT ref_xml FROM itone_jl_jobposting WHERE ref_xml= '$ref'";
$rech_ref = mysql_query($req_ref) or die('Erreur SQL !'.$req_ref.'
'.mysql_error());
//on selectionne la ref la plus petite
$req_ref_min = "SELECT Min(ref_xml) AS RefMin FROM itone_jl_jobposting";
$rech_ref_min = mysql_query($req_ref_min) or die('Erreur SQL !'.$req_ref_min.'
'.mysql_error());
$res_ref_min = mysql_fetch_array($rech_ref_min);
$ref_min = $res_ref_min["RefMin"];
//Mise à jour des fournisseurs existants
$itone = ITOne;
$req_ref_maj = "UPDATE itone_jl_jobposting SET fournisseur_flux='$itone' WHERE fournisseur_flux=''";
$req_maj_query = mysql_query($req_ref_maj) or die('Erreur SQL ! '.$req_ref_maj.'
'.mysql_error());
//echo " ".$fournisseur." ";
//Si la nouvelle ref est plus grande que les dernières on l'insere
if($ref > $ref_min && (strlen($ref))> =6)
{
echo "Plus grand que la plus petite, et ref supérieur à 6";
// on compte le nombre de résultats
$nb_ref = mysql_num_rows($rech_ref);
if($nb_ref==0) // la ref n'existe pas, on l'insere
{ //echo " Plus grand que la plus petite, et ref supérieur à 6, INSEREE
";
/$query = "INSERT INTO itone_jl_jobposting(created,title,location,URL_flux,company,ref_xml,fournisseur_flux) VALUES('".$date_finale."','".$titre1."','".$lieu1."','".$url1."','".$entreprise1."','".$ref."','".$fournisseur."')";
$result = mysql_query($query) or die('Erreur SQL !'.$query.'
'.mysql_error());
}
}
}
}
/** fonction characterData, déclenchée lorsque le parseur rencontre des caractères, à l'intérieur d'un noeud XML **/
function characterData($parser, $data) {
global $curtag, $date, $titre, $lieu, $url, $entreprise, $ref, $tab_ref, $last_ref ;
if ($curtag == "DATE")
$date .= $data;
//echo $date;
if ($curtag == "TITRE")
$titre .= $data;
//echo $url;
if ($curtag == "LIEU")
$lieu = $data;
//echo $lieu;
if ($curtag == "URL")
$url .= $data;
//echo $titre;
if ($curtag == "ENTREPRISE")
$entreprise .= $data;
//echo $entreprise;
if ($curtag == "REF"){
$ref = $data;
}
}
/** crée un nouveau parseur **/
$xml_parser = xml_parser_create();
/** enregistre les trois fonctions ci dessus **/
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = fopen($file, "r"))) {
die("Impossible d'ouvrir l'URL...");
}
while ($data = fread($fp, 50)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("erreur XML: %s à la ligne %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));
}
}
xml_parser_free($xml_parser);
mysql_close();
}
?>
MERCI tout plein si qq'un a la solution... THANKS
PS: je ne suis pas encore un boss en dev mais j'espère le devenir!
cs_richardjul
Messages postés7Date d'inscriptionlundi 16 octobre 2006StatutMembreDernière intervention24 janvier 2008 24 janv. 2008 à 09:43
Salut codefalse,
sur mon dev : PHP Version 5.2.1
et online ils nexen est sur PHP Version 4.4.7-0.nexen.0,
Je sais pas trop pourquoi il y a .nexen.0...
Sinon je ne sais pas si il y a un rapport mais il y a la même libXML Version 2.6.27...
Ce serait dommage que je ne puisse pas trouver une petite astuce pour l'utiliser, quelle serait le moyen de l'adapter pour php4?
Quelle partie du code PHP5 interpreterait-il mieux ?
Je vais regarder simple_xml, je te remercie codefalse..
codefalse
Messages postés1123Date d'inscriptionmardi 8 janvier 2002StatutModérateurDernière intervention21 avril 20091 24 janv. 2008 à 10:56
Je suppose que .nexen.0 signifie qu'ils ont fait des modifications sur le code php pour l'adapter à leur usage, voila pourquoi.
Peut-être que dans ton usage, tu utilise des fonctions faite à partir de php5 (ou implémentant des propriété mise à partir de php5) ce qui peux causer ce bogue. Vu que chez toi ca marche et pas chez eux !
Fait attention aux fonctions que tu utilise ! :)
Vous n’avez pas trouvé la réponse que vous recherchez ?
cs_richardjul
Messages postés7Date d'inscriptionlundi 16 octobre 2006StatutMembreDernière intervention24 janvier 2008 24 janv. 2008 à 16:22
Voilà j'ai trouvé,
il fallait respecter l'ordre des balises et dans la conditions de la fonction endElement tester le dernier item parcouru, donc bien faire gaffe à l'ordre des items du xml!!
le script fonctionnel est le suivant :
<?php
mysql_connect("adress", "login", "MDP") or die("Impossible de se connecter");
//mysql_connect("localhost", "root", "") or die("Impossible de se connecter");
mysql_select_db("DB") or die("pas possible de trouver la base");
//ORDRE item FLUX : titre DATE lieu URL entreprise ref
if(isset($file)) {
$titre = "";
$ref = "";
$curtag = "";
/** fonction startElement, déclenchée lorsque le parseur rencontre une balise XML du type **/
function startElement($parser, $name, $attrs) {
global $curtag, $titre, $date, $lieu, $url, $entreprise, $ref;
$curtag = $name;
if ($name "TITRE") $titre "";if ($name "DATE") $date "";if ($name "LIEU") $lieu "";if ($name "URL") $url "";if ($name "ENTREPRISE") $entreprise "";if ($name "REF") $ref "";
}
/** fonction endElement, déclenchée lorsque le parseur rencontre une balise XML du type **/
function endElement($parser, $name) {
global $curtag, $titre, $date, $lieu, $url, $entreprise, $ref, $fournisseur ;
$curtag = "";
if ($name == "REF") {
//Formatage des entrées pour la BDD
$titre1 = addslashes($titre);
//$titre1=utf8_decode($titre);
//Affichage des entrées titre et entreprise enregistré dans la base
/* echo $titre1;
echo "
";
echo $date_finale;
echo "
";
echo $lieu1;
echo "
";
echo $url1;
echo "
";
echo $entreprise1;
echo "
";
echo " ".$ref." ";
echo "
";
echo $fournisseur;
echo "
"; */
$query = "INSERT INTO matable(created,title,location,URL_flux,company,ref_xml,fournisseur_flux) VALUES('".$date_finale."','".$titre1."','".$lieu1."','".$url1."','".$entreprise1."','".$ref."','".$fournisseur."')";
$result = mysql_query($query) or die('Erreur SQL !'.$query.'
'.mysql_error());
}
/** fonction characterData, déclenchée lorsque le parseur rencontre des caractères, à l'intérieur d'un noeud XML **/
function characterData($parser, $data) {
global $curtag, $titre, $date, $lieu, $url, $entreprise, $ref;
if ($curtag == "TITRE")
$titre .= $data;
if ($curtag == "DATE")
$date .= $data;
if ($curtag == "LIEU")
$lieu .= $data;
if ($curtag == "URL")
$url .= $data;
if ($curtag == "ENTREPRISE")
$entreprise .= $data;
if ($curtag == "REF"){
$ref .= $data;
}
}
/** crée un nouveau parseur **/
$xml_parser = xml_parser_create();
/** enregistre les trois fonctions ci dessus **/
xml_set_element_handler($xml_parser, "startElement", "endElement");
xml_set_character_data_handler($xml_parser, "characterData");
if (!($fp = fopen($file, "r"))) {
die("Impossible d'ouvrir l'URL...");
}
while ($data = fread($fp, 50)) {
if (!xml_parse($xml_parser, $data, feof($fp))) {
die(sprintf("erreur XML: %s à la ligne %d", xml_error_string(xml_get_error_code($xml_parser)), xml_get_current_line_number($xml_parser)));
}
}