par
Cyrano » 04 mai 2008, 12:30
Je me suis livré à quelques tests et en fait il y a plusieurs problèmes :
- le mode choisi pour l'ouverture n'est pas approprié : "w+" est préférable : du coup, plus besoin d'utiliser ftruncate()
- Au lieu de lire ligne par ligne, tu peux lire le fichier complet.
Voici ce que j'ai fait (adapte le chemin vers le fichier au besoin pour tester, début du code)
<?php
// $fichier = '../utilisateur/test.css';
$fichier = './test.css';
$donnees = '';
if (isset($_POST['yo']))
{
// On vide les statistiques précédentes sur le fichier
clearstatcache();
// On récupère la taille du fichier s'il existe
$iTaille = (file_exists($fichier)) ? filesize($fichier) : 0;
$nouvelles_donnees = $_POST['yo'];
// On ouvre le fichier "mon_fichier.txt" en mode "lecture et écriture" : le mode "w+" va vider le contenu avant d'écrire
$file = fopen($fichier, 'w+');
// On récupère les données dans le fichier s'il existe (défini plus haut)
$donnees = ($iTaille > 0) ? fread($file, $iTaille) : '';
// On écrit le nouveau contenu
fwrite($file, $nouvelles_donnees);
//Fermeture du fichier
fclose($file);
}
//On ouvre le fichier "mon_fichier.txt" en mode "lecture seule"
if(file_exists($fichier))
{
$fd = fopen($fichier, 'r');
$i = 1; // compteur de ligne
// Lorsque nous atteindrons la fin du fichier
// foef($fd) retournera faux
// et la boucle while s'arrêtera
while (!feof($fd))
{
// Il est temps de lire une ligne du fichier
// et en tout cas au maximum 1024 caractères
$ligne = fgets($fd, 1024);
// Si la fin du fichier n'est pas atteinte
// On peut maintenant afficher la ligne
if (!feof($fd))
{
$donnees .= $ligne;
}
$i++;
}
// On a fini, on ferme !!
fclose($fd);
}
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Ecriture d'un fichier CSS</title>
<?php
if(file_exists($fichier))
{
?>
<link rel="stylesheet" type="text/css" href="<?php echo($fichier); ?>" />
<?php
}
?>
</head>
<body>
<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
<fieldset>
<textarea name="yo" cols="100" rows="20"><?php echo $donnees; ?></textarea>
<input type="submit" value="Enregistrer" />
</fieldset>
</form>
</body>
</html>
J'ai adapté les commentaires, vérifie chaque ligne.
Je me suis livré à quelques tests et en fait il y a plusieurs problèmes :
- le mode choisi pour l'ouverture n'est pas approprié : "w+" est préférable : du coup, plus besoin d'utiliser ftruncate()
- Au lieu de lire ligne par ligne, tu peux lire le fichier complet.
Voici ce que j'ai fait (adapte le chemin vers le fichier au besoin pour tester, début du code)
[php]<?php
// $fichier = '../utilisateur/test.css';
$fichier = './test.css';
$donnees = '';
if (isset($_POST['yo']))
{
// On vide les statistiques précédentes sur le fichier
clearstatcache();
// On récupère la taille du fichier s'il existe
$iTaille = (file_exists($fichier)) ? filesize($fichier) : 0;
$nouvelles_donnees = $_POST['yo'];
// On ouvre le fichier "mon_fichier.txt" en mode "lecture et écriture" : le mode "w+" va vider le contenu avant d'écrire
$file = fopen($fichier, 'w+');
// On récupère les données dans le fichier s'il existe (défini plus haut)
$donnees = ($iTaille > 0) ? fread($file, $iTaille) : '';
// On écrit le nouveau contenu
fwrite($file, $nouvelles_donnees);
//Fermeture du fichier
fclose($file);
}
//On ouvre le fichier "mon_fichier.txt" en mode "lecture seule"
if(file_exists($fichier))
{
$fd = fopen($fichier, 'r');
$i = 1; // compteur de ligne
// Lorsque nous atteindrons la fin du fichier
// foef($fd) retournera faux
// et la boucle while s'arrêtera
while (!feof($fd))
{
// Il est temps de lire une ligne du fichier
// et en tout cas au maximum 1024 caractères
$ligne = fgets($fd, 1024);
// Si la fin du fichier n'est pas atteinte
// On peut maintenant afficher la ligne
if (!feof($fd))
{
$donnees .= $ligne;
}
$i++;
}
// On a fini, on ferme !!
fclose($fd);
}
echo("<?xml version=\"1.0\" encoding=\"iso-8859-1\"?>\n");
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" xml:lang="fr" />
<title>Ecriture d'un fichier CSS</title>
<?php
if(file_exists($fichier))
{
?>
<link rel="stylesheet" type="text/css" href="<?php echo($fichier); ?>" />
<?php
}
?>
</head>
<body>
<form method="post" action="<?php echo($_SERVER['PHP_SELF']); ?>">
<fieldset>
<textarea name="yo" cols="100" rows="20"><?php echo $donnees; ?></textarea>
<input type="submit" value="Enregistrer" />
</fieldset>
</form>
</body>
</html>[/php]
J'ai adapté les commentaires, vérifie chaque ligne.