text Datei bearbeiten

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • text Datei bearbeiten

    Hi @ all

    ich möchte gerne mittels Browser eine Text datei bearbeiten.
    Dabei handelt es sich um eine Config Datei für ein
    Perl Script.

    Mein Quell Text sieht dabei so aus

    Quellcode

    1. <?php
    2. $edit = "text/welcome.txt";
    3. if(isset($_POST["dateiinhalt"]) && $dateiinhalt = $_POST["dateiinhalt"])
    4. {
    5. $handle = fopen($edit,"w");
    6. fwrite($handle,$dateiinhalt);
    7. fclose($handle);
    8. echo '<p style="color:green;margin-bottom:20px;">'."\n";
    9. echo 'Datei erfolgreich editiert!'."\n";
    10. echo '</p>'."\n";
    11. }
    12. $fileinhalt = file_get_contents($edit);
    13. ?>
    14. <form action="" method="post">
    15. Dateiinhalt bearbeiten<br>
    16. <textarea style="width:500px;height:350px;" name="dateiinhalt"><?php
    17. echo $fileinhalt;
    18. ?></textarea><br>
    19. <input type="submit" name="submit" value="editieren">
    20. </form>
    Alles anzeigen



    eigentlich funktioniert alles wunderbar, bis auf die Tatsache
    das nach dem speichern nach jedem Zeilenumbruch ein ^M steht
    wenn ich die Datei in der Linux Console mit VI öffne.

    Das ist dann nämlich das Problem
    Das Perl Script liest dann nur noch die erste Zeile von der Text Datei.

    Was kann man da machen ?

    Gruss

    Samy
  • Hi,

    eine sehr komische Schreibweise, muss ich schon sagen. Ich hab schon nach der Zuweisung von $dateiinhalt gesucht, bis mir aufgefallen ist, dass das gar kein Vergleich in der Bedingung ist. Aber ok...

    Am besten du machst es einheitlich und ersetzt sowohl Windows- als auch Mac-Zeilenumbrüche.

    Quellcode

    1. str_replace(array("\rn","\r"), "\n", $inhalt)


    Wenns nicht daran liegt, poste am besten noch das Perl Skript.
  • Hmmm


    wo müsste ich das
    str_replace(array("\rn","\r"), "\n", $dateiinhalt)


    einfügen?
    Hab jetzt ein wenig probiert und
    irgendwie funzt das nicht
    das Perl Script ist der ts2perlmod

    planetteamspeak.com/component/…details/gid,51/Itemid,70/

    Quellcode

    1. #!/usr/bin/perl
    2. # ts2perlmod.pl - TS2PerlMod GNU/GPL-Edition
    3. # This script runs in an infinite loop and performs various actions on your TeamSpeak server
    4. # Written 2006 by Sven Paulsen
    5. use strict;
    6. use warnings;
    7. use diagnostics;
    8. use lib "packages";
    9. require "./packages/lib-ts2perlmod.pl";
    10. use Data::Dumper;
    11. use TeamSpeak2::TCPquery;
    12. use constant SCRIPT => {
    13. name => "TS2PerlMod GNU/GPL-Edition",
    14. version => "0.9.18",
    15. config => "default.ini",
    16. pidfile => "ts2perlmod.pid",
    17. daemon => 0,
    18. };
    19. &init();
    20. # read the scripts configuration file
    21. my %config = &readConfig();
    22. # open the scripts logfile
    23. my $log;
    24. $log = &openLog($config{"LOG"}{"File"}) if($config{"LOG"}{"Enabled"});
    25. &log($log, SCRIPT->{name}." started");
    26. # connect to server and create a new TeamSpeak2::TCPquery object
    27. my $ts2 = TeamSpeak2::TCPquery->new(&trim($config{CONNECTION}{ServerAddress}),&trim($config{CONNECTION}{ServerTCPPort})) || &abort("Could not establish connection to server ".$config{CONNECTION}{ServerAddress});
    28. &printColored("ok", "Connected to server ".$config{CONNECTION}{ServerAddress});
    29. # disable debugging
    30. $ts2->toggleDebug();
    31. # check serverversion
    32. my $serverversion = $ts2->getServerversion();
    33. if($serverversion->{release} < 21) {
    34. &printColored("**", "The server is running an outdated version (".$serverversion->{version}.")");
    35. }
    36. # select virtual server
    37. $ts2->selectServer(&trim($config{CONNECTION}{ServerUDPPort})) || &abort("Could not select virtual server on port ".$config{CONNECTION}{ServerUDPPort});
    38. &printColored("ok", "Selected virtual server on port ".$config{CONNECTION}{ServerUDPPort});
    39. # authenticate as superadmin
    40. $ts2->loginSuperadmin(&trim($config{LOGIN}{Username}),&trim($config{LOGIN}{Password})) || &abort("Could not authenticate as user ".$config{LOGIN}{Username});
    41. &printColored("ok", "Authenticated as user ".$config{LOGIN}{Username});
    42. # check the scripts settings
    43. my %settings = %{&checkFeatureSettings($ts2,\%config)};
    44. &log($log, "Initialization sequence completed");
    45. &daemonize();
    46. # declare some vars, arrays and hashes to store various information
    47. my $last_stats = time();
    48. my $sent_stats = 0;
    49. my $last_advert = time();
    50. my $last_serverset = time();
    51. my %new_players;
    52. my %nicks_not_checked;
    53. my %exploits_not_checked;
    54. my %set_sticky;
    55. my %old_channels;
    56. my %connections;
    57. # get the servers version information
    58. my $version = $ts2->getServerversion();
    59. # create TeamSpeak2::TCPquery::Server object
    60. my $server = $ts2->getServer($config{CONNECTION}{ServerUDPPort});
    61. eval {
    62. # enter the main loop
    63. while(1) {
    64. # get the servers playerlist
    65. my @playerlist = $ts2->getPlayerlist();
    66. # get the servers channellist
    67. my @channellist = $ts2->getChannellist();
    68. # update TeamSpeak2::TCPquery::Server object
    69. $server->getServerinfo();
    70. # get the servers playerlist
    71. foreach my $player (@playerlist) {
    72. # create a new TeamSpeak2::TCPquery::Channel object
    73. my $channel = $player->getChannel();
    74. next if(!$channel);
    75. # check if current player is protected
    76. my $protected = &checkProtection($player->{loginname},@{$settings{protectuser}{content}}) if($config{"PROTECTED-USERS"}{"Enabled"});
    77. # extended welcome message
    78. if($config{"EXTENDED-WELCOME-MESSAGE"}{"Enabled"}) {
    79. if($player->{logintime} <= $settings{timer} && !exists($new_players{$player->{p_id}})) {
    80. $new_players{$player->{p_id}} = time();
    81. my @message = &parseMessage($player,$channel,$server,$version,@{$settings{ewm}{content}});
    82. $player->sendMessage(@message);
    83. &log($log, "[EXTENDED-WELCOME-MESSAGE] Sent welcome message to player ".$player->{nick}." ".$player->getFlags()." with IP ".$player->{ip});
    84. }
    85. }
    86. # sticky channel
    87. if($config{"STICKY-CHANNEL"}{"Enabled"}) {
    88. if(exists($set_sticky{$player->{p_id}}) && $player->{c_id} != $settings{sticky}{channel}->{id}) {
    89. delete $set_sticky{$player->{p_id}};
    90. $player->setSticky(0);
    91. &log($log, "[STICKY-CHANNEL] Released player ".$player->{nick}." ".$player->getFlags()." from channel ".$settings{sticky}{channel}->{name});
    92. }
    93. if($player->{c_id} == $settings{sticky}{channel}->{id} && !$player->{pprivs}->{sticky} && !$player->{pprivs}->{serveradmin}) {
    94. $set_sticky{$player->{p_id}} = 1 if(!exists($set_sticky{$player->{p_id}}));
    95. $player->setSticky(1);
    96. &log($log, "[STICKY-CHANNEL] Stuck player ".$player->{nick}." ".$player->getFlags()." to channel ".$settings{sticky}{channel}->{name});
    97. }
    98. }
    99. # move idlers
    100. if($config{"MOVE-IDLERS"}{"Enabled"} && !$protected) {
    101. if($player->{idletime} >= $settings{moveidler}{idletime} && !$player->{pprivs}->{sticky} && $player->{c_id} != $settings{moveidler}{channel}->{id}) {
    102. $player->move($settings{moveidler}{channel}->{id});
    103. &log($log, "[MOVE-IDLERS] Moved player ".$player->{nick}." ".$player->getFlags()." after ".formatTime($player->{idletime}));
    104. }
    105. }
    106. # warn idlers
    107. if($config{"WARN-IDLERS"}{"Enabled"} && !$protected) {
    108. if($player->{idletime} >= $settings{warnidler}{idletime} && $player->{idletime} <= ($settings{warnidler}{idletime} + $settings{timer})) {
    109. $player->sendMessage($settings{warnidler}{message});
    110. &log($log, "[WARN-IDLERS] Warned player ".$player->{nick}." ".$player->getFlags()." after ".formatTime($player->{idletime}));
    111. }
    112. }
    113. # bad nickname
    114. if($config{"BAD-NICKNAME"}{"Enabled"} && !$protected) {
    115. if($player->{logintime} <= $settings{timer} && !exists($nicks_not_checked{$player->{p_id}})) {
    116. $nicks_not_checked{$player->{p_id}} = time();
    117. }
    118. if(exists($nicks_not_checked{$player->{p_id}})) {
    119. foreach(@{$settings{badnick}{content}}) {
    120. my $pattern = lc($_);
    121. if(lc($player->{nick}) =~ /$pattern/) {
    122. &punish($player,$settings{badnick});
    123. &log($log, "[BAD-NICKNAME] Punished player ".$player->{nick}." ".$player->getFlags());
    124. }
    125. }
    126. delete $nicks_not_checked{$player->{p_id}};
    127. }
    128. }
    129. # bad channel
    130. if($config{"BAD-CHANNEL"}{"Enabled"} && !$protected) {
    131. if($channel->{flags}->{unregistered}) {
    132. foreach(@{$settings{badchan}{content}}) {
    133. my $pattern = lc($_);
    134. if(lc($channel->{name}) =~ /$pattern/) {
    135. &punish($player,$settings{badchan});
    136. &log($log, "[BAD-CHANNEL] Punished player ".$player->{nick}." ".$player->getFlags()." for beeing in channel ".$channel->{name});
    137. }
    138. }
    139. }
    140. }
    141. # anti rec
    142. if($config{"ANTI-REC"}{"Enabled"} && !$protected) {
    143. if($player->{pflags}->{recording}) {
    144. &punish($player,$settings{antirec});
    145. &log($log, "[ANTI-REC] Punished player ".$player->{nick}." ".$player->getFlags());
    146. }
    147. }
    148. # take over protection
    149. if($config{"TAKE-OVER-PROTECTION"}{"Enabled"} && !$protected) {
    150. if($player->{pprivs}->{serveradmin} && !$player->{pprivs}->{registered}) {
    151. $player->setServeradmin(0);
    152. &punish($player,$settings{takeover});
    153. &log($log, "[TAKE-OVER-PROTECTION] Punished player ".$player->{nick}." ".$player->getFlags());
    154. }
    155. }
    156. # auto afk
    157. if($config{"AUTO-AFK"}{"Enabled"} && !$protected) {
    158. if($player->{c_id} != $settings{autoafk}{channel}->{id} && $player->{pflags}->{away} && !$player->{pprivs}->{sticky}) {
    159. if($player->move($settings{autoafk}{channel}->{id})) {
    160. $old_channels{$player->{p_id}} = $player->{c_id} if(!exists($old_channels{$player->{p_id}}));
    161. &log($log, "[AUTO-AFK] Moved player ".$player->{nick}." into channel ".$settings{autoafk}{channel}->{name});
    162. }
    163. } elsif(!$player->{pflags}->{away} && exists($old_channels{$player->{p_id}})) {
    164. if($player->{c_id} == $settings{autoafk}{channel}->{id}) {
    165. $player->move($old_channels{$player->{p_id}});
    166. }
    167. &log($log, "[AUTO-AFK] Player ".$player->{nick}." ".$player->getFlags()." is no longer away");
    168. delete $old_channels{$player->{p_id}};
    169. }
    170. }
    171. # anti flood
    172. if($config{"ANTI-FLOOD"}{"Enabled"} && !$protected) {
    173. if($player->{logintime} <= $settings{timer}) {
    174. if(!exists($connections{$player->{ip}})) {
    175. $connections{$player->{ip}} = [time(), 1];
    176. } else {
    177. my $remaining_connections = $settings{antiflood}{connections}-@{$connections{$player->{ip}}}[1];
    178. @{$connections{$player->{ip}}}[1]++ if(time()-@{$connections{$player->{ip}}}[0] <= $settings{antiflood}{seconds});
    179. if(!$remaining_connections) {
    180. &log($log, "[ANTI-FLOOD] Added IP address ".$player->{ip}." to banlist");
    181. $player->banIp(5);
    182. }
    183. }
    184. }
    185. }
    186. # stats message
    187. if($config{"STATS-MESSAGE"}{"Enabled"}) {
    188. if(($last_stats + $settings{stats}{interval} * 60) < time()) {
    189. my @message = &parseMessage($player,$channel,$server,$version,@{$settings{stats}{content}});
    190. $player->sendMessage(@message);
    191. &log($log, "[STATS-MESSAGE] Sent stats message to player ".$player->{nick}." ".$player->getFlags());
    192. $sent_stats = 1;
    193. }
    194. }
    195. # bug detection
    196. if($config{"BUG-DETECTION"}{"Enabled"} && !$protected) {
    197. if($player->{logintime} <= $settings{timer} && !exists($exploits_not_checked{$player->{p_id}})) {
    198. $exploits_not_checked{$player->{p_id}} = time();
    199. }
    200. if(exists($exploits_not_checked{$player->{p_id}})) {
    201. if(length($player->{nick}) > 29 || !parseRtfString($player->{nick}) || !parseNullbyteString($player->{nick})) {
    202. $player->kick("exploit attempt detected");
    203. &log($log, "[BUG-DETECTION] Exploit attempt detected while checking nickname of player ".$player->{nick}." ".$player->getFlags());
    204. }
    205. delete $exploits_not_checked{$player->{p_id}};
    206. }
    207. if(length($channel->{name}) > 29 || !parseRtfString($channel->{name}) || !parseNullbyteString($channel->{name})) {
    208. $player->kick("exploit attempt detected");
    209. &log($log, "[BUG-DETECTION] Exploit attempt detected while checking channel of player ".$player->{nick}." ".$player->getFlags());
    210. }
    211. }
    212. }
    213. # kick idlers
    214. if($config{"KICK-IDLERS"}{"Enabled"}) {
    215. my $kicked = $server->kickIdlers($settings{kickidler}{idletime},$settings{kickidler}{targets},$settings{kickidler}{reason});
    216. my $x = "player";
    217. $x = "players" if($kicked > 1);
    218. &log($log, "[KICK-IDLERS] Kicked ".$kicked." idle ".$x." from server") if($kicked);
    219. }
    220. # update banlist
    221. if($config{"UPDATE-BANLIST"}{"Enabled"}) {
    222. foreach($ts2->getBanlist) {
    223. if($_->{mins} == "0") {
    224. $ts2->deleteBan($_->{b_id});
    225. $ts2->addBan($_->{ip}, $settings{banupd}{mins});
    226. &log($log, "[UPDATE-BANLIST] Converted permanent ban of IP ".$_->{ip}." into a ".$settings{banupd}{mins}." minute timeban");
    227. }
    228. }
    229. }
    230. # advert message
    231. if($config{"ADVERT-MESSAGE"}{"Enabled"}) {
    232. if(($last_advert + $settings{advert}{interval} * 60) < time()) {
    233. $server->sendMessage(@{$settings{advert}{content}});
    234. &log($log, "[ADVERT-MESSAGE] Sent advert message to all players");
    235. $last_advert = time();
    236. }
    237. }
    238. # auto servertype
    239. if($config{"AUTO-SERVERTYPE"}{"Enabled"}) {
    240. if(($last_serverset + $settings{serverset}{interval} * 60) < time()) {
    241. if($server->{server_currentusers} > $settings{serverset}{clients}) {
    242. if($server->{server_clan_server}) {
    243. $server->setModePublic();
    244. &log($log, "[AUTO-SERVERTYPE] Changed type of server ".$server->{server_name}." (".$server->{server_currentusers}."/".$server->{server_maxusers}.") to Public");
    245. }
    246. } else {
    247. if(!$server->{server_clan_server}) {
    248. $server->setModeClan();
    249. &log($log, "[AUTO-SERVERTYPE] Changed type of server ".$server->{server_name}." (".$server->{server_currentusers}."/".$server->{server_maxusers}.") to Clan");
    250. }
    251. }
    252. $last_serverset = time();
    253. }
    254. }
    255. # reset stats timer
    256. if($sent_stats) {
    257. $last_stats = time();
    258. $sent_stats = 0;
    259. }
    260. # delete outdated entries from hashes
    261. my $first_player = (@playerlist) ? shift(@playerlist) : 0;
    262. foreach(keys(%new_players)) { delete $new_players{$_} if((time()-$settings{timer}) > $new_players{$_}); }
    263. foreach(keys(%set_sticky)) { delete $set_sticky{$_} if($first_player && $_ < $first_player->{p_id}); }
    264. foreach(keys(%old_channels)) { delete $old_channels{$_} if($first_player && $_ < $first_player->{p_id}); }
    265. foreach(keys(%connections)) { delete $connections{$_} if(time()-@{$connections{$_}}[0] > $settings{antiflood}{seconds}); }
    266. # wait for x seconds
    267. sleep $settings{timer};
    268. }
    269. };
    270. # catch and log critical errors
    271. if($@) {
    272. &log($log, $@);
    273. }
    274. exit(1);
    Alles anzeigen


    über die default.ini

    Quellcode

    1. [CONNECTION]
    2. ServerAddress=localhost
    3. ServerTCPPort=51234
    4. ServerUDPPort=8767
    5. [LOGIN]
    6. Username=superadmin
    7. Password=password
    8. [EXTENDED-WELCOME-MESSAGE]
    9. Enabled=1
    10. File=welcome.txt
    11. [BAD-NICKNAME]
    12. Enabled=0
    13. File=badnick.txt
    14. Punishment=move
    15. Channel=bad nickname
    16. Reason=bad nickname
    17. Message=you're using a bad nickname
    18. [BAD-CHANNEL]
    19. Enabled=0
    20. File=badchannel.txt
    21. Punishment=kick
    22. Channel=bad channelname
    23. Reason=bad channelname
    24. Message=you've created a channel using a bad name
    25. [MOVE-IDLERS]
    26. Enabled=0
    27. Idletime=60
    28. Channel=idletime
    29. [WARN-IDLERS]
    30. Enabled=0
    31. Idletime=90
    32. Message=you are idle
    33. [KICK-IDLERS]
    34. Enabled=0
    35. Idletime=120
    36. TargetPlayerR=1
    37. TargetPlayerU=1
    38. TargetChannelR=1
    39. TargetChannelU=1
    40. Reason=don't idle please
    41. [ANTI-REC]
    42. Enabled=0
    43. Punishment=kick
    44. Channel=echo
    45. Reason=no recording
    46. Message=do not record
    47. [ANTI-FLOOD]
    48. Enabled=0
    49. MaxConnections=3
    50. MaxSeconds=10
    51. [TAKE-OVER-PROTECTION]
    52. Enabled=0
    53. Punishment=kick
    54. Channel=echo
    55. Reason=evil kick
    56. Message=nice try
    57. [PROTECTED-USERS]
    58. Enabled=0
    59. File=protected.txt
    60. [AUTO-AFK]
    61. Enabled=0
    62. Channel=silence
    63. [ADVERT-MESSAGE]
    64. Enabled=0
    65. File=advert.txt
    66. Interval=60
    67. [STATS-MESSAGE]
    68. Enabled=0
    69. File=stats.txt
    70. Interval=30
    71. [STICKY-CHANNEL]
    72. Enabled=0
    73. Channel=echo
    74. [UPDATE-BANLIST]
    75. Enabled=0
    76. Bantime=10
    77. [AUTO-SERVERTYPE]
    78. Enabled=0
    79. Clients=50
    80. Interval=60
    81. [BUG-DETECTION]
    82. Enabled=0
    83. [LOG]
    84. Enabled=0
    85. File=default.log
    86. [TIMER]
    87. RepeatTimer=2
    Alles anzeigen


    wird dann die welcome.txt aufgerufen
    ~~~ [ Willkommen ] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~^M
    Hallo <PLAYER_NICKNAME>! Willkommen auf unserem TS2-Server.^M
    Deine IP lautet <PLAYER_IP> und wurde geloggt.^M
    Du hast einen <PLAYER_PING>er Ping.^M
    Bei Dir wurde ein PaketLoss von <PLAYER_PACKET_LOSS> festgestellt.^M
    ^M
    Besuche uns auf www.meine-domain.de^M
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ Willkommen ] ~~~


    Die dann so aussieht
    und da ist es dann halt das problem das von dem Script nur die erste Zeile

    ~~~ [ Willkommen ] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~


    eingelesen wird und nach dem ^M nichts mehr verarbeitet wird.
    Wenn ich die Datei nach dem Speichern per Console mit vi öffne
    und die "^M" händisch entferne dann liest das Script es wieder
    komplett ein



    Gruss

    Samy


    PS: Puhhh ganz schön langer Beitrag geworden[/quote]
  • Hmm ok in der Console sieht es jetzt supi aus

    keine "^M" mehr :) *freu*

    Aber nach jedem Speichern macht er jetzt ne zusätzliche Leerzeile mit rein

    vorher

    ~~~ [ Willkommen ] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
    Hallo <PLAYER_NICKNAME>! Willkommen auf unserem TS2-Server.
    Deine IP lautet <PLAYER_IP> und wurde geloggt.
    Du hast einen <PLAYER_PING>er Ping.
    Bei Dir wurde ein PaketLoss von <PLAYER_PACKET_LOSS> festgestellt.
    Besuche uns auf www.meine-domain.de
    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ Willkommen ] ~~~


    1.th speichern


    ~~~ [ Willkommen ] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~

    Hallo <PLAYER_NICKNAME>! Willkommen auf unserem TS2-Server.

    Deine IP lautet <PLAYER_IP> und wurde geloggt.

    Du hast einen <PLAYER_PING>er Ping.

    Bei Dir wurde ein PaketLoss von <PLAYER_PACKET_LOSS> festgestellt.

    Besuche uns auf www.meine-domain.de

    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ Willkommen ] ~~~


    2.th speichen

    ~~~ [ Willkommen ] ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~



    Hallo <PLAYER_NICKNAME>! Willkommen auf unserem TS2-Server.



    Deine IP lautet <PLAYER_IP> und wurde geloggt.



    Du hast einen <PLAYER_PING>er Ping.



    Bei Dir wurde ein PaketLoss von <PLAYER_PACKET_LOSS> festgestellt.



    Besuche uns auf www.meine-domain.de



    ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ [ Willkommen ] ~~~



    und so weiter :)

    Gruss

    Samy