2010-07-29 8 views
2

comment puis-je vérifier en utilisant php dom, si un fichier xml existe, et sinon le créer.vérifier si le fichier existe, sinon, créer

<?php 
    header("Location: index.php"); 

    $xmldoc = new DOMDocument(); 
    $xmldoc->load('sample.xml'); 
    $newAct = $_POST['activity']; 

    $root = $xmldoc->firstChild; 
    $newElement = $xmldoc->createElement('activity'); 
    $root->appendChild($newElement); 
    $newText = $xmldoc->createTextNode($newAct); 
    $newElement->appendChild($newText); 
    $xmldoc->save('sample.xml'); 

?> 

en ce moment, car il n'existe pas, il me donne cette erreur:

DOMDocument::load(): I/O warning : failed to load external entity 

Répondre

10

Ne pas faire avec dom, vérifiez vous-même:

if(file_exists('sample.xml')){ 
    $xmldoc->load('sample.xml'); 
} else { 
    $xmldoc->loadXML('<root/>');//or any other rootnode name which strikes your fancy. 
} 

L'enregistrement dans le fichier se ferait automatiquement avec le $xmldoc->save(); plus loin.

+2

Vous pouvez également vérifier que le chemin pointe vers un fichier ('is_file()'), que le fichier est lisible (s'il existe, 'is_readable()') et est accessible en écriture ('is_writable()'). – salathe

+1

@salathe: en effet, ceux-ci seraient les prochains obstacles que l'on emploierait en écrivant un code approprié capable de reconnaître et de signaler les conditions d'erreur. – Wrikken

+0

merci beaucoup. – input

2

utilisant file_exists('sample.xml')

+1

Permettez-moi simplement cette fonction 'file_exists()' ne fonctionne pas toujours (à savoir si vous avez besoin de toucher fichier sur le serveur distant ** **). Dans ce cas, vous pouvez utiliser: 'if (@fopen ('http://www.somedomain.com/sample.xml', 'r')) // faire quelque chose;' Cette fonction est un peu plus lente que ' file_exists() 'mais fonctionne comme un charme dans tous les scénarios. Je me suis heurté à ce problème tout à l'heure et je voulais partager mes découvertes. – Dejv