[DOM XML] Enregistrer un fichier XML sur un serveur ftp
Bonjour à tous :P
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