Précédent   Forum des professionnels en informatique > PHP > Bibliothèques et frameworks > XML > DOMXML
DOMXML Forum d'entraide pour l'extension DOMXML permettant de manipuler des documents XML en PHP 4 (approche DOM). Avant de poster -> tutoriels DOMXML
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 11/09/2007, 17h05   #1
Membre confirmé
 
Inscription : janvier 2006
Messages : 215
Détails du profil
Informations personnelles :
Localisation : France, Territoire de Belfort (Franche Comté)

Informations forums :
Inscription : janvier 2006
Messages : 215
Points : 211
Points : 211
Par défaut [DOMXML] Enregistrer un fichier XML sur un serveur ftp

Bonjour à tous

Suite à mon post ICI, j'utilise le code que julp m'a si gentiment communiqué (que je remercie encore une fois)

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
<?php
define('DEBUG', TRUE);
define('FICHIER_XML', 'mm_bans.xml');
 
$dom = new DomDocument();
$dom->preserveWhiteSpace = FALSE;
$dom->formatOutput = TRUE;
$dom->load(FICHIER_XML);
$xpath = new DOMXPath($dom);
 
if (defined('DEBUG') && DEBUG) {
    echo '<pre>';
    print_r($_POST);
    echo '</pre>';
}
 
/**
 * Première étape : lister les nick
 * Deuxième étape : proposer un formulaire pour modifier cette partie du ban
 * Troisième étape : modifier le fichier XML
 *
 * Bug (?) : les double quotes ne passent pas dans l'expression XPath
 **/
 
if (!isset($_POST['nick'])) {
    $nicks = $xpath->query('/banlist/ban/nick');
    echo '<form method="POST">';
    echo '<select name="nick">';
    foreach ($nicks as $nick) {
       printf('<option>%s</option>', utf8_decode($nick->nodeValue));
    }
    echo '</select>';
    echo '<input type="submit" value="Valider"/>';
    echo '</form>';
} else if (isset($_POST['nick']) && count($_POST) == 1) { // Mode fainéant
    $ban = $xpath->query(sprintf('/banlist/ban[nick = "%s"]', utf8_encode($_POST['nick'])));
    echo '<form method="POST">';
    foreach ($ban->item(0)->getElementsByTagName('*') as $elt) {
        if ($elt->nodeName != 'nick') {
            printf('%s : <input type="text" name="%s" value="%s" /><br />', utf8_decode($elt->nodeName), utf8_decode($elt->nodeName), utf8_decode($elt->nodeValue));
        } else {
            printf('<input type="hidden" name="%s" value="%s" /><br />', utf8_decode($elt->nodeName), utf8_decode($elt->nodeValue));
        }
    }
    echo '<input type="submit" value="Modifier" />';
    echo '</form>';
} else if (isset($_POST['nick']) && count($_POST) > 1) {
    $ban = $xpath->query(sprintf('/banlist/ban[nick = "%s"]', utf8_encode($_POST['nick'])));
    foreach ($ban->item(0)->getElementsByTagName('*') as $elt) {
        if ($elt->nodeName != 'nick') {
            $elt->nodeValue = utf8_encode($_POST[$elt->nodeName]);
        }
    }
    if (defined('DEBUG') && DEBUG) {
        echo '<pre>' . htmlentities($dom->saveXML()) . '</pre>';
    } else {
        $dom->save(FICHIER_XML);
    }
} else if (defined('DEBUG') && DEBUG) {
    die("Houston on a un problème :S");
}
Le problème, c'est qu'il y a un hic et le hic, le voici :

Tant que j'utilise ce code avec la valeur True pour debug, tout fonctionne mais dès que je passe en False, j'obtiens ce message au moment ou il est sensé sauvegarder les modifications que je fais



Code :
Warning: DOMDocument::save(ftp://...@84.207.xx.xx/bf2/mods/bf2/settings/mm_bans.xml) [function.DOMDocument-save]: failed to open stream: Remote file already exists and overwrite context option not specified.<br /> FTP server reports 213 109002 in /home.10.15/sensikilw/www/Pages_Web/Serveur_BF2/Banlist/Liste_bans3.php on line 111
En ligne 111, j'ai :

Code :
$dom->save(FICHIER_XML);

L'un de vous sait-il ce que signifie ce message d'erreur et comment y remédier ?

Je vous remercie d'avance pour votre aide
scorpion1611 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/09/2007, 19h01   #2
En attente de confirmation mail
 
Inscription : juin 2002
Messages : 6 164
Détails du profil
Informations forums :
Inscription : juin 2002
Messages : 6 164
Points : 6 404
Points : 6 404
Je vois : le comportement par défaut des flux FTP gérés par PHP (fonctionnalité allow_url_fopen) interdit l'écrasement ou le remplacement d'un fichier existant. Je pense que la solution est de faire :
Code :
1
2
$my_ftp_context = stream_context_create(array('ftp' => array('overwrite' => TRUE)));
libxml_set_streams_context($my_ftp_context);
Avant de faire appel à la méthode save.
julp est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 12/09/2007, 15h33   #3
Membre confirmé
 
Inscription : janvier 2006
Messages : 215
Détails du profil
Informations personnelles :
Localisation : France, Territoire de Belfort (Franche Comté)

Informations forums :
Inscription : janvier 2006
Messages : 215
Points : 211
Points : 211
Par défaut Un grand merci

Comme le titre l'indique, un grand merci à julp pour son aide si préciseuse
scorpion1611 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 23h23.


 
 
 
 
Partenaires

Hébergement Web