fins de lignes dans un paramètre passé à un script cgi
4 réponses
Gauthier
Bonjour à tous,
Sur une machine Linux, je souhaite mettre en place un script cgi qui permette
aux utilisateurs de modifier certains de leurs fichiers de configuration
comme .fetchmailrc, .forward, etc.
Apache tourne avec suexec et le script situé dans ~/public_html peut donc
lire/écrire avec les droits de chaque utilisateur.
Le fichier à modifier est lu et son contenu inséré dans un formulaire html
entre les balises <textarea>, puis le contenu de ce formulaire est envoyé
comme paramètre au script cgi pour être ré-inscrit dans le fichier.
Le problème que je rencontre tient aux fins de lignes : avant d'être
modifié, le fichier est un fichier texte unix "normal", que j'ai créé par ex.
avec vi. Mais après avoir été modifié par le script cgi, les fins de ligne
s'affichent avec ^M dans vi, soit la fin de ligne qui caractérise les fichiers
créés sous DOS, et certains programmes se comportent alors de façon hasardeuse
quand ces fichiers sont altérés.
# lecture initiale du fichier
$FETCHMAILRC="$Home/.fetchmailrc";
if ( -r $FETCHMAILRC and -w $FETCHMAILRC ) {
open FETCHMAILRC,"<$FETCHMAILRC";
@lines=<FETCHMAILRC>;
$nl=@lines; # nombre de lignes du fichier à modifier,
# pour adapter la taille du formulaire
close FETCHMAILRC;
} else {
print "Impossible de lire/écrire $Home/.fetchmailrc"
}
foreach $l (@lines) {
# par acquis de conscience, je tronque la fin de chaque ligne, mais
# ça n'améliore rien :-(
chomp $l;
print "$l\n"; # et le \n est obligatoire pour un affichage correct
# dans le formulaire html
}
# le contenu du fichier modifié est transmis au script sous forme de
# paramètre au script qui ré-écrit le fichier
my $contenu=param("contenu");
my $FETCHMAILRC="$Home/.fetchmailrc";
open FETCHMAILRC,">$FETCHMAILRC";
print FETCHMAILRC "$contenu";
close FETCHMAILRC;
chmod (0600,$FETCHMAILRC)
and
print ".fetchmailrc mis en lecture seule pour $User. OK\n" ;
Je ne trouve pas où je commets une faute : pourrait-on m'expliquer comment il
se fait que chaque fin ligne est ainsi transformé et comment y remédier ?
Cette action est irreversible, confirmez la suppression du commentaire ?
Signaler le commentaire
Veuillez sélectionner un problème
Nudité
Violence
Harcèlement
Fraude
Vente illégale
Discours haineux
Terrorisme
Autre
Paul Gaborit
À (at) 06 Apr 2005 22:00:43 GMT, Gauthier écrivait (wrote):
# le contenu du fichier modifié est transmis au script sous forme de # paramètre au script qui ré-écrit le fichier my $contenu=param("contenu"); [...]
Je ne trouve pas où je commets une faute : pourrait-on m'expliquer comment il se fait que chaque fin ligne est ainsi transformé et comment y remédier ?
C'est le navigateur (distant par définition) qui choisit l'encodage qu'il souhaite utiliser... Le plus simple est donc de remplacer les trois types de fin de ligne (Unix, Mac ou Windows) par celui que vous utilisez localement avant de stocker votre fichier :
$contenu =~ s/(?: 15 12| 15| 12)/n/g;
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/>
# le contenu du fichier modifié est transmis au script sous forme de
# paramètre au script qui ré-écrit le fichier
my $contenu=param("contenu");
[...]
Je ne trouve pas où je commets une faute : pourrait-on m'expliquer comment il
se fait que chaque fin ligne est ainsi transformé et comment y remédier ?
C'est le navigateur (distant par définition) qui choisit l'encodage qu'il
souhaite utiliser... Le plus simple est donc de remplacer les trois types de
fin de ligne (Unix, Mac ou Windows) par celui que vous utilisez localement
avant de stocker votre fichier :
$contenu =~ s/(?: 15 12| 15| 12)/n/g;
--
Paul Gaborit - <http://www.enstimac.fr/~gaborit/>
Perl en français - <http://www.enstimac.fr/Perl/>
À (at) 06 Apr 2005 22:00:43 GMT, Gauthier écrivait (wrote):
# le contenu du fichier modifié est transmis au script sous forme de # paramètre au script qui ré-écrit le fichier my $contenu=param("contenu"); [...]
Je ne trouve pas où je commets une faute : pourrait-on m'expliquer comment il se fait que chaque fin ligne est ainsi transformé et comment y remédier ?
C'est le navigateur (distant par définition) qui choisit l'encodage qu'il souhaite utiliser... Le plus simple est donc de remplacer les trois types de fin de ligne (Unix, Mac ou Windows) par celui que vous utilisez localement avant de stocker votre fichier :
$contenu =~ s/(?: 15 12| 15| 12)/n/g;
-- Paul Gaborit - <http://www.enstimac.fr/~gaborit/> Perl en français - <http://www.enstimac.fr/Perl/>
Gauthier
Le Thu, 07 Apr 2005 10:32:32 +0200, Paul Gaborit a écrit:
C'est le navigateur (distant par définition) qui choisit l'encodage qu'il souhaite utiliser... Le plus simple est donc de remplacer les trois types de fin de ligne (Unix, Mac ou Windows) par celui que vous utilisez localement
Le plus étonnant, c'est que j'utilise Firefox sur lemême poste linux, et qu'il m'ajoute des CRLF
avant de stocker votre fichier :
$contenu =~ s/(?: 15 12| 15| 12)/n/g;
OK, mais que signifie le ?: dans la première alternative ?
-- ^^ Gauthier (_____/°°-ç | _`-" )/@mmm|| nn nn FOE-Belgium : http://www.amisdelaterre.be
Le Thu, 07 Apr 2005 10:32:32 +0200, Paul Gaborit <Paul.Gaborit@invalid.invalid> a écrit:
C'est le navigateur (distant par définition) qui choisit l'encodage qu'il
souhaite utiliser... Le plus simple est donc de remplacer les trois types de
fin de ligne (Unix, Mac ou Windows) par celui que vous utilisez localement
Le plus étonnant, c'est que j'utilise Firefox sur lemême poste linux,
et qu'il m'ajoute des CRLF
avant de stocker votre fichier :
$contenu =~ s/(?: 15 12| 15| 12)/n/g;
OK, mais que signifie le ?: dans la première alternative ?
--
^^ Gauthier
(_____/°°-ç
| _`-"
)/@mmm||
nn nn FOE-Belgium : http://www.amisdelaterre.be
Le Thu, 07 Apr 2005 10:32:32 +0200, Paul Gaborit a écrit:
C'est le navigateur (distant par définition) qui choisit l'encodage qu'il souhaite utiliser... Le plus simple est donc de remplacer les trois types de fin de ligne (Unix, Mac ou Windows) par celui que vous utilisez localement
Le plus étonnant, c'est que j'utilise Firefox sur lemême poste linux, et qu'il m'ajoute des CRLF
avant de stocker votre fichier :
$contenu =~ s/(?: 15 12| 15| 12)/n/g;
OK, mais que signifie le ?: dans la première alternative ?
-- ^^ Gauthier (_____/°°-ç | _`-" )/@mmm|| nn nn FOE-Belgium : http://www.amisdelaterre.be
Jacques Caron
Salut,
On 07 Apr 2005 19:10:20 GMT, Gauthier wrote:
Le Thu, 07 Apr 2005 10:32:32 +0200, Paul Gaborit a écrit:
C'est le navigateur (distant par définition) qui choisit l'encodage qu'il souhaite utiliser... Le plus simple est donc de remplacer les trois types de fin de ligne (Unix, Mac ou Windows) par celui que vous utilisez localement
Le plus étonnant, c'est que j'utilise Firefox sur lemême poste linux, et qu'il m'ajoute des CRLF
Normal, ce n'est pas dépendant de l'OS utilisé, mais édicté par la norme HTML, qui dit que le séparateur de ligne est CR+LF (c'est pareil pour HTTP, d'ailleurs):
OK, mais que signifie le ?: dans la première alternative ?
Il signifie que les () servent juste à grouper des alternatives, pas à isoler un élément (c'est surtout utile pour un match, pour éviter de mettre des alternatives dans des $n, ou dans un split, pour éviter de mettre les séparateurs dans le tableau de destination, par exemple).
Jacques. -- Interactive Media Factory Création, développement et hébergement de services interactifs: SMS, SMS+, Audiotel... http://www.imfeurope.com/
Salut,
On 07 Apr 2005 19:10:20 GMT, Gauthier <alouest.du.soleil@NOSPAM_skynet.be>
wrote:
Le Thu, 07 Apr 2005 10:32:32 +0200, Paul Gaborit
<Paul.Gaborit@invalid.invalid> a écrit:
C'est le navigateur (distant par définition) qui choisit l'encodage
qu'il
souhaite utiliser... Le plus simple est donc de remplacer les trois
types de
fin de ligne (Unix, Mac ou Windows) par celui que vous utilisez
localement
Le plus étonnant, c'est que j'utilise Firefox sur lemême poste linux,
et qu'il m'ajoute des CRLF
Normal, ce n'est pas dépendant de l'OS utilisé, mais édicté par la norme
HTML, qui dit que le séparateur de ligne est CR+LF (c'est pareil pour
HTTP, d'ailleurs):
OK, mais que signifie le ?: dans la première alternative ?
Il signifie que les () servent juste à grouper des alternatives, pas à
isoler un élément (c'est surtout utile pour un match, pour éviter de
mettre des alternatives dans des $n, ou dans un split, pour éviter de
mettre les séparateurs dans le tableau de destination, par exemple).
Jacques.
--
Interactive Media Factory
Création, développement et hébergement
de services interactifs: SMS, SMS+, Audiotel...
http://www.imfeurope.com/
Le Thu, 07 Apr 2005 10:32:32 +0200, Paul Gaborit a écrit:
C'est le navigateur (distant par définition) qui choisit l'encodage qu'il souhaite utiliser... Le plus simple est donc de remplacer les trois types de fin de ligne (Unix, Mac ou Windows) par celui que vous utilisez localement
Le plus étonnant, c'est que j'utilise Firefox sur lemême poste linux, et qu'il m'ajoute des CRLF
Normal, ce n'est pas dépendant de l'OS utilisé, mais édicté par la norme HTML, qui dit que le séparateur de ligne est CR+LF (c'est pareil pour HTTP, d'ailleurs):
OK, mais que signifie le ?: dans la première alternative ?
Il signifie que les () servent juste à grouper des alternatives, pas à isoler un élément (c'est surtout utile pour un match, pour éviter de mettre des alternatives dans des $n, ou dans un split, pour éviter de mettre les séparateurs dans le tableau de destination, par exemple).
Jacques. -- Interactive Media Factory Création, développement et hébergement de services interactifs: SMS, SMS+, Audiotel... http://www.imfeurope.com/
Gauthier
Le Thu, 07 Apr 2005 22:18:07 +0200, Jacques Caron a écrit:
OK, mais que signifie le ?: dans la première alternative ?
Il signifie que les () servent juste à grouper des alternatives, pas à isoler un élément (c'est surtout utile pour un match, pour éviter de mettre des alternatives dans des $n, ou dans un split, pour éviter de mettre les séparateurs dans le tableau de destination, par exemple).
Jacques.
Un grand merci à tous, -- ^^ Gauthier (_____/°°-ç | _`-" )/@mmm|| nn nn FOE-Belgium : http://www.amisdelaterre.be
Le Thu, 07 Apr 2005 22:18:07 +0200, Jacques Caron <jc@imfeurope.com> a écrit:
OK, mais que signifie le ?: dans la première alternative ?
Il signifie que les () servent juste à grouper des alternatives, pas à
isoler un élément (c'est surtout utile pour un match, pour éviter de
mettre des alternatives dans des $n, ou dans un split, pour éviter de
mettre les séparateurs dans le tableau de destination, par exemple).
Jacques.
Un grand merci à tous,
--
^^ Gauthier
(_____/°°-ç
| _`-"
)/@mmm||
nn nn FOE-Belgium : http://www.amisdelaterre.be
Le Thu, 07 Apr 2005 22:18:07 +0200, Jacques Caron a écrit:
OK, mais que signifie le ?: dans la première alternative ?
Il signifie que les () servent juste à grouper des alternatives, pas à isoler un élément (c'est surtout utile pour un match, pour éviter de mettre des alternatives dans des $n, ou dans un split, pour éviter de mettre les séparateurs dans le tableau de destination, par exemple).
Jacques.
Un grand merci à tous, -- ^^ Gauthier (_____/°°-ç | _`-" )/@mmm|| nn nn FOE-Belgium : http://www.amisdelaterre.be