fopen et xml distant

WRInaute impliqué
Bonjour,

Voici un code qui peut etre utile, il permet de stocker un flux xml dans une bdd.
Cependant je n'arrive pas à ouvrir un fichier distant avec la commande fopen en PHP.
En effet, si j'ouvre un fichier en local
Voir fin du programme:
if (($arrRequetes = insertXml ($arrElem, $arrSql, 'vvch4', 'adresselocale.xml'))!== false) {

, le fichier s'ouvre sans problème, mais si à présent je mets :

if (($arrRequetes = insertXml ($arrElem, $arrSql, 'vvch4', 'http://linuxfr.org/backend.rss'))!== false) {

probleme d'ouverture

Peut-être quelqu'un a déjà eu ce problème, comment l'avez-vous contourné ?
Merci bien et bonne journée !

ludo




Code:
<?php 

function insertXml ($arrElem, $arrChamps, $table, $fichierXml) 
{
$xml_parseur = xml_parser_create();
$fp = fopen($fichierXml, "r") or die("Fichier introuvable. L'analyse a ete suspendue");
while ($fdata = fread($fp, filesize ($fichierXml))){
xml_parse_into_struct ($xml_parseur, $fdata, $arrOutput) or die (sprintf("Erreur XML : %s à la ligne %d\n",
xml_error_string(xml_get_error_code($xml_parseur)),
xml_get_current_line_number($xml_parseur))
);
}

foreach ($arrOutput as $elem) {
if (in_array ($elem['tag'], $arrElem)) {
$arrReq[$elem['tag']][] = $elem['value'];
if (is_array ($elem['attributes'])){
foreach ($elem['attributes'] as $clef => $attr) {
if (in_array ($clef, $arrElem)) {
$arrReq[$clef][] = $attr;
}
}
if (is_array ($arrReq)) {
$cpt = count ($arrReq[$arrElem[0]]);
$strChamps = '';
foreach ($arrChamps as $champ) {
$strChamps .= ''.$champ.',';
}
$strChamps = rtrim ($strChamps, ',');
$i = 0;
while ($i < $cpt) {
$strTmp = '';
foreach ($arrReq as $clef => $dump) {
$arrReq[$clef][$i] = mysql_real_escape_string ($arrReq[$clef][$i]); 
$strTmp .= '"'.$arrReq[$clef][$i].'",';
}
$strTmp = rtrim ($strTmp, ',');
$requeteTmp[] = $strTmp;
$i ++;
}
$i = 0;
while ($i < $cpt) {
$requete[] = 'INSERT INTO '.$table.' ('.$strChamps.') VALUES ('.$requeteTmp[$i].')';
$i ++;
}
return $requete;
}
return false;
}
  
?>

 
<?php 

$arrElem = array ('TITLE', 'LINK', 'DESCRIPTION'); 
$arrSql = array ('title', 'link', 'description'); 

if (($arrRequetes = insertXml ($arrElem, $arrSql, 'vvch4', 'adresselocale.xml'))!== false) { 

echo '<pre>';
// print_r($arrRequetes);
foreach ($arrRequetes as $key => $requete) {
echo $key, ' => ', $requete, ' ';
if (mysql_query ($requete)) {
echo 'OK <br />';
}
else {
echo 'PAS OK <br />';
}
}
echo '</pre>';
}
else
echo '<br /><br />Erreur, false retourne';

?>
 
WRInaute discret
il te faut allow_url_fopen = On dans php.ini.

si ca n'est pas activé, tente un
Code:
ini_set('allow_url_fopen',1);
 
WRInaute impliqué
Tu peux regarder du côté de l'extension curl qui est généralement installée, elle est plus fiable et plus rapide que fopen.
 
WRInaute impliqué
chantra a dit:
il te faut allow_url_fopen = On dans php.ini.

si ca n'est pas activé, tente un
Code:
ini_set('allow_url_fopen',1);


En ce qui concerne le allow_url_fopen, il est bien sur on.

ludo
 
Discussions similaires
Haut