Attente du chargement du fichier xml

Résolu/Fermé
nanaval31 Messages postés 20 Date d'inscription jeudi 12 juin 2014 Statut Membre Dernière intervention 23 juin 2014 - Modifié par nanaval31 le 23/06/2014 à 11:24
nanaval31 Messages postés 20 Date d'inscription jeudi 12 juin 2014 Statut Membre Dernière intervention 23 juin 2014 - 23 juin 2014 à 17:24
Bonjour à tous !

Je génère un fichier xml avec un code php. Tout fonctionne, seulement je souhaiterai que mon fichier xml soit chargé complètement avant d'afficher la page.
Comment je dois faire ?? J'ai regardé sur internet , mais je n'ai pas réussi à faire fonctionner ce que j'avais trouvé

Une idée ? merci :)
A voir également:

7 réponses

Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
23 juin 2014 à 11:35
Salut,

Comment affiches-tu le contenu de ta page ?

Si tu utilises une série de commande 'echo', tu pourrais utiliser les fonctions de bufferisation de sortie : https://www.php.net/manual/fr/ref.outcontrol.php

Une autre solution est de concaténer tout le contenu dans une variable puis d'afficher cette variable à la fin de ton traitement.

Bonne journée
0
nanaval31 Messages postés 20 Date d'inscription jeudi 12 juin 2014 Statut Membre Dernière intervention 23 juin 2014
23 juin 2014 à 11:43
salut Pitet,

Merci de ta réponse

Pour afficher le cnotenu de ma page, j'utilise le dom

$fichier = 'http://wcf.tourinsoft.com/Syndication/cdt65/b1155573-8443-49fb-a3d0-bb05526278e6/Objects?$filter=ListingCOMMUNE eq\'heches\'';

$dom = new DOMDocument('utf-8');
if (!$dom->load($fichier))
{
    die('Impossible de charger le fichier XML');
}

$recupproperties = $dom->getElementsByTagName('properties');
foreach ($recupproperties as $properties)
               
{
    //Cherche les éléments ListingCOMMUNE  
    $nom = $properties->getElementsByTagName('ListingCOMMUNE');
$nom1 = $nom->item(0)->nodeValue;
 echo $nom1; 
}


J'ai regardé les fonctions de bufferisation de sortie.. mais je ne sais pas torp quoi utiliser.. ni comment dans mon code.. peux tu m'en dire un peu plus ?
Merci à toi
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
23 juin 2014 à 12:01
Voici un exemple représentant ton code :
// exemple 1

echo 'debut contenu';
echo 'blabla';
echo 'fin contenu';

// ... traitement ...

echo 'fin du traitement';

C'est simplement une série de 'echo'.

Si on veut afficher tout le contenu après la fin du traitement en utilisant le buffer de sortie, voici comment utiliser ces fonctions :
// exemple 2

// on démarre l'enregistrement du buffer
ob_start();

// les 'echo' après le ob_start sont enregistrés dans le buffer et non affichés
echo 'début contenu2';
echo 'blabla2';
echo 'fin contenu2';

// on récupère le contenu du buffer
$contenu = ob_get_contents();
ob_end_clean();

// ... traitement ...

echo 'fin du traitement2';

// on affiche le contenu
echo $contenu;


L'autre solution sans utiliser le buffer de sortie est quasiment identique :
// exemple 3

// on utilise une variable php à la place du buffer
$contenu = '';

$contenu .= 'debut contenu3';
$contenu .= 'blabla3';
$contenu .= 'fin contenu3';

// ... traitement ...

echo 'fin du traitement3';

echo $contenu;
0
nanaval31 Messages postés 20 Date d'inscription jeudi 12 juin 2014 Statut Membre Dernière intervention 23 juin 2014
Modifié par nanaval31 le 23/06/2014 à 14:29
Ok pitet je te remercie pour tes explications très détaillées!

J'ai testé ça dans mon code, bon rien ne se passe le fichier se charge comme avant, j'imagine que c'est normal , mais comment savoir si cela fonctionne ?

Autre chose, on m'a également dit que par défaut, le fichier se charge entièrement , et la page s'affiche après. Et si jamais le fichier est trop lourd, il faut utiliser set_time_limit(0); au début du code, qu'en penses tu ?

Merci :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
nanaval31 Messages postés 20 Date d'inscription jeudi 12 juin 2014 Statut Membre Dernière intervention 23 juin 2014
23 juin 2014 à 14:48
Autre chose, qu'est ce que je dois mettre après // traitement ?
Le code qui génère mon xml ?
0
Pitet Messages postés 2826 Date d'inscription lundi 11 février 2013 Statut Membre Dernière intervention 21 juillet 2022 525
23 juin 2014 à 17:22
Concernant le chargement de ta page, ton script php sera effectivement exécuté entièrement avant d'afficher le moindre résultat, sauf si tu utilises la fonction ob_flush pour vider le buffer et commencer l'affichage avant la fin du script (il faut que la directive php output_buffering soit également désactivée).
Mais les serveurs web et les navigateurs client ont parfois leurs propres buffers sur lesquels tu ne pourras de toute façon pas intervenir.

PHP impose par défaut une limite de 30s d'exécution pour tout les scripts et arrête l'exécution si ce délai est dépassé.
Si ton script ne peux pas être exécuté en moins de 30s, tu peux augmenter cette limite avec set_time_limit(délai_en_seconde);
En écrivant set_time_limit(0) tu enlèves complétement la limite. Tu n'as donc pas à te soucier du délai mais attention aux boucles infinies, ton script ne s'arrêtera jamais. Par prudence il vaut mieux définir une limite haute que pas de limite du tout.

Enfin tu n'as rien à mettre après // traitement. C'était uniquement pour l'exemple et il semble que tu n'es pas besoin de changer ton code : ta page s'affiche lorsque ton xml est complétement chargé.
0
nanaval31 Messages postés 20 Date d'inscription jeudi 12 juin 2014 Statut Membre Dernière intervention 23 juin 2014
23 juin 2014 à 17:24
Ok je te remercie !
Tes explications sont très claires :) Merco
0