Page 1 sur 2

[Qst] - Lecture/Ecriture via un form dans un fichier TXT

Posté : 29 déc. 2014, 21:25
par casio
Salutations,

J'ai un dilemme que je ne résous pas :

Je fais un formulaire html/PHP pour m'éviter de modifier à la main un fichier TXT sur un serveur FTP distant.

Formulaire de saisie :

Code : Tout sélectionner

<?php include 'ls-data.php'; ?> </head> <body> <?php // Ouverture du fichier pour écriture $handle = fopen("$lectdons","r") or die("Connexion impossible au serveur !"); // Récupération du listing // $contents = fread($handle,filesize($fpdons)); $contents = stream_get_contents($handle,filesize($lectdons)); ?> <form action="ls-envoi.php" method="Post" target="_blank"> <br /> <b>Votre message en texte brut :</b> <br /><br /><br /> <strong>Taper, remplacer ou v&eacute;rifier le contenu du listing (et sauter une ligne en fin) :</strong><br /><br /> <table border="0px"> <tr> <td width="550" align="left"> <textarea rows="30" name="listing" cols="100"><?php echo $contents; ?></textarea> </td> </tr> </table> <br /> <input type="submit" value="MaJ du listing !"> </form> <?php // Fermeture du pointeur de fichier fclose($handle); ?>
Routine d'envoi formulaire :

Code : Tout sélectionner

<?php include 'ls-data.php'; // Date actuelle : $date = date('d-m-Y'); // Debug echo $date; // Définition des accents : $accents = array("é", "è", "ê", "à", "ô"); $correct = array("e", "e", "e", "a", "o"); // Contenu du message du formulaire : $ls = $_POST["listing"]; // on remplace les accents $ls = str_replace($accents, $correct, $ls); ?> </head> <body> <?php // Ouverture du fichier pour écriture $handle = (fopen('$wridons','w+') or die("Connexion en &eacute;criture impossible au serveur !")); // Envoi du nouveau listing... fwrite($handle,$ls); echo "Mis &agrave; jour du dernier listing ("; ?>"<a href="<?php echo $lectdons; ?>" target="_blank"><?php echo $fichier; ?></a>"<?php echo ") ... "; // Rembobinage du fichier et fermeture du pointeur de fichier rewind($handle); fclose($handle); ?>
Le contenu du fichier TXT s'affiche bien dans le textarea du formulaire, et SEMBLE se sauver, mais aucune modification n'est apportée au fichier TXT.

Auriez-vous une idée ?

P.S: Le fichier contient plus de 1000 lignes...

Re: [Qst] - Lecture/Ecriture via un form dans un fichier TXT

Posté : 29 déc. 2014, 22:07
par sirakawa
Naïf:
$contents = stream_get_contents($handle,filesize($lectdons));
Pourquoi pas: (http://php.net/manual/fr/function.strea ... ntents.php)
$contents = stream_get_contents($handle, -1);
Il y a bien d'autres accents à éliminer : tous les circonflexes et trémas (a, e,i,o,u, ), u accent grave et éventuellmeet les mêmes en majuscules
$accents = array("é", "è", "ê", "à", "ô");
$correct = array("e", "e", "e", "a", "o");

Pour l'écriture voir http://php.net/manual/fr/function.fwrite.php
sans quoi il faudrait vérifier
print "$ls"; // histoire d'être sûr
fwrite($handle,$ls);

Re: [Qst] - Lecture/Ecriture via un form dans un fichier TXT

Posté : 29 déc. 2014, 22:28
par casio
Merci de ce retour rapide.

Pour :

Code : Tout sélectionner

$contents = stream_get_contents($handle, -1);
Cela fonctionne au même, merci. Je ne connaissais pas la syntaxe.

Pour les accents, je sais qu'il existe beaucoup d'autres bizarreries qui merdouillent dans ce cas, mais étant le seul à utiliser ce script, je ne pense pas avoir besoin pour l'instant d'autre chose. Je m'adapterais progressivement.

Pour le :

Code : Tout sélectionner

print "$ls";
J'avais testé en debugg avant de venir vous enquiquiner, mais avec un echo. Le rendu semble être le même.
Par contre, cela me sort le listing AVEC les modifs appliquées, MAIS sans saut de ligne...
Et le fichier TXT n'est pas modifié.

Re: [Qst] - Lecture/Ecriture via un form dans un fichier TXT

Posté : 30 déc. 2014, 12:05
par sirakawa
Le problème est lié à fwrite2 Dans la doc de fwrite, il y a ca:
<?php
function fwrite_stream($fp, $string) {
    for ($written = 0; $written < strlen($string); $written += $fwrite) {
        $fwrite = fwrite($fp, substr($string, $written));
        if ($fwrite === false) {
            return $fwrite;
        }
    }
    return $written;
}
?>
1 Tu pourrais commencer par
$res = fwrite(comme tufais);
var-_dump($res);
1 b
$handle = (fopen('$wridons','w'); // sans le +
3 Il y a assi ftp_put

Re: [Qst] - Lecture/Ecriture via un form dans un fichier TXT

Posté : 30 déc. 2014, 12:41
par casio
J'ai donc modifié ainsi :

Code : Tout sélectionner

(...) // Ouverture du fichier pour écriture $handle = (fopen('$wridons','w') or die("Connexion en &eacute;criture impossible au serveur !")); // Envoi du nouveau listing... print "$ls"; $res=fwrite($handle,$ls); var_dump($res); echo "Mis &agrave; jour du dernier listing ("; ?>"<a href="<?php echo $lectdons; ?>" target="_blank"><?php echo $fichier; ?></a>"<?php echo ") ... "; (...)
Mais, toujours pareil; Aucune modification du fichier TXT.
Pourtant cela s'affiche bien dans le print.
#-o

Re: [Qst] - Lecture/Ecriture via un form dans un fichier TXT

Posté : 30 déc. 2014, 13:10
par sirakawa
Et que dit le var_dump ?

Re: [Qst] - Lecture/Ecriture via un form dans un fichier TXT

Posté : 30 déc. 2014, 13:29
par casio
Et que dit le var_dump ?
bool(false)

Re: [Qst] - Lecture/Ecriture via un form dans un fichier TXT

Posté : 30 déc. 2014, 14:14
par sirakawa
Cohérent avec ce que tu constatais.
si tu mettais
error_reporting(E_ALL); avant le fopen ?
et un
var_dump($handle); //après...
Quels sont tes droits sur ce fichier au niveau du serveur ?
Ca ne résoudrait rien, mais on ne s'étonnerait plus.
Il y a bien is_writable

Re: [Qst] - Lecture/Ecriture via un form dans un fichier TXT

Posté : 30 déc. 2014, 14:39
par Mazarini
Pour éliminer une partie des sources d'erreurs, tu pourrais utiliser un fichier local avant de tester via ftp. Ca assure une vérification de la logique du traitement.
Ensuite, tu pourrais afficher le contenu initial du fichier distant pour être sur que le chemin est bon et que tu n'écris pas dans un autre répertoire (peu probable avec un fwrite qui retourne false).

As tu mis un user et un mot de passe :
$handle = fopen("ftp://user:[email protected]/somefile.txt", "w");

Re: [Qst] - Lecture/Ecriture via un form dans un fichier TXT

Posté : 30 déc. 2014, 14:45
par casio
(...)
si tu mettais
error_reporting(E_ALL); avant le fopen ?
et un
var_dump($handle); //après...
(...)
bool(true)
Warning: fwrite() expects parameter 1 to be resource, boolean given in /Destock/Dons/ls-envoi.php on line 34
bool(false) Mis à jour du dernier listing ("dons.txt") ...
Warning: rewind() expects parameter 1 to be resource, boolean given in /Destock/Dons/ls-envoi.php on line 39

Warning: fclose() expects parameter 1 to be resource, boolean given in /Destock/Dons/ls-envoi.php on line 40
(...)
Quels sont tes droits sur ce fichier au niveau du serveur ?
Ca ne résoudrait rien, mais on ne s'étonnerait plus.
Il y a bien is_writable
Actuellement, j'édite, à travers ce même compte, le fichier TXT directement depuis un client FTP, et ce depuis plus d'un an.
Pour éliminer une partie des sources d'erreurs, tu pourrais utiliser un fichier local avant de tester via ftp. Ca assure une vérification de la logique du traitement.
Ensuite, tu pourrais afficher le contenu initial du fichier distant pour être sur que le chemin est bon et que tu n'écris pas dans un autre répertoire (peu probable avec un fwrite qui retourne false).

As tu mis un user et un mot de passe :
(...)
La première partie du code, donnée plus haut, fait la même manip, mais en lecture uniquement, et sur le même fichier.
Celui s'affiche correctement, je ne pense donc pas à un pb de chemin, a moins que fwrite et ses copains réagissent de façon différente ?

Voici le contenu du fichier ls-data.php :

Code : Tout sélectionner

<?php // Variables // Addresse du serveur distant $ftpip = "AdresseDynDNSduServeur"; // Compte(s) du serveur distant $userls = "log"; $passls = "pass"; $supuserls = "log2"; $supassls = "pass2"; // Arborescence du serveur distant $compte = "web"; // Port du serveur distant $port = "21"; // Nom du fichier distant $fichier = 'dons.txt'; // Chemin vers le fichier distant $lectdons = 'ftp://'.$userls.':'.$passls.'@'.$ftpip.'/'.$compte.'/'.$fichier; $wridons = 'ftp://'.$supuserls.':'.$supassls.'@'.$ftpip.'/'.$compte.'/'.$fichier; //////////////// Fin des parametres ////////////////// ?>

Re: [Qst] - Lecture/Ecriture via un form dans un fichier TXT

Posté : 30 déc. 2014, 15:00
par sirakawa
(fopen('$wridons','w+') pourquoi des simples quotes alors que tu mets des doubles dans la lecture?

Re: [Qst] - Lecture/Ecriture via un form dans un fichier TXT

Posté : 30 déc. 2014, 15:03
par tof73
Actuellement, j'édite, à travers ce même compte, le fichier TXT directement depuis un client FTP, et ce depuis plus d'un an.
ce n'est pas les mêmes droits, par ftp et par un script php.

Re: [Qst] - Lecture/Ecriture via un form dans un fichier TXT

Posté : 30 déc. 2014, 15:18
par casio
(fopen('$wridons','w+') pourquoi des simples quotes alors que tu mets des doubles dans la lecture?
Alors, justement, j'ai essayé de normaliser l'ensemble, mais si je mets des "" au lieu des '', et/ou reciproquement selon le script (lecture/ecriture), cela me mets l'erreur qu'il n'arrive pas à établir la cnx.
(...)
ce n'est pas les mêmes droits, par ftp et par un script php.
Du coups, on touche peut-être la solution... :
Capture d'écran 2014-12-30 14.17.57.png

Re: [Qst] - Lecture/Ecriture via un form dans un fichier TXT

Posté : 30 déc. 2014, 18:05
par sirakawa
regarde :
http://php.net/manual/fr/wrappers.ftp.php
User Contributed Notes
2
et pourquoi ne pas mettre sans quotes du tout?

Re: [Qst] - Lecture/Ecriture via un form dans un fichier TXT

Posté : 30 déc. 2014, 18:10
par casio
regarde :
http://php.net/manual/fr/wrappers.ftp.php
User Contributed Notes
2
(...)

Code : Tout sélectionner

<? $str ="replace all contenents"; $filew="ftp://gufo:[email protected]:21/jj.php"; $opts = array('ftp' => array('overwrite' => true)); $context = stream_context_create($opts); $strwri = file_put_contents($filew,$str,LOCK_EX,$context); ?>
?