txt datei auslesen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
array
ausgabe
auslese
bedingung
code
dank
datei
eigene datei
file
formular
hammer
null
nummer
parameter
pfad
schleife
server
shell
test
zeile
-
Hallo,
ich habe eine kleine frage und dachte vll. könnt ihr mir helfen und zwar.
Ich habe einen kleinen server auf den ich mich mit sftp und ssh verbinden kann,
da auf den server ein gameserevr liegt der die account daten in einen .3FFAcc datei schreibt dachte ich mir,
ich könnte mit php die .3FFAcc datei auslesen lassen damit sich die user auf unserer website ihren spielstatus auslesen können.
nun zu meiner frage:
wie stell ich das an das die php datei nicht alles außließt sondern nur die wichtigen infos,
weil in der .3FFAccdatei steht auch das passwort.
die .3FFAcc datei ist so aufgebaut:
Version: 1.0.0 // das ist die versions nummer des account systemes
name //name
passwort //passwort
Money = 30
Life = 0
Kills = 97
Deaths = 153
Level = 1300
Exp = 12
Grenade = 0
Gun = 0
Shotgun = 0
Rifle = 0
Handle = 0
Hammer = 0
eigentlich soll alles ausgelesen werden, außer das passwort und die versions nummer,
außerdem muss ich noch dazu sagen das jeder account eine eigene datei besitzt dieser account trägt
in dem fall den namen name.3FFAcc
diese .3FFAcc datei verhält sich wie eine txt datei und kann mit den normalen editor geöffnet werden.
danke für alle antworten. -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Wenn es sicher ist, dass das Passwort immer in der 3. Zeile steht,
dann kannst Du diese 3. Zeile ja einfach "nicht ausgeben"
... Datei je Zeile in ein Array mit file()
... bei Durchlauf in foreach() Schleife ... wenn Zeile = Nr. 3 dann keine Ausgabe
dazu einfach einen Zähler
einführen, der bei Ausgabe die Zeile hoch-zählt.$z
$file_name = '.3FFAcc'; $file_data = file($file_name, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $z=1; foreach($file_data as $zeile) { if ($z != 3) { print "<br />" . $zeile . "\n"; } $z++; }
oder ... es geht auch mit count() und einer for() Schleife
$file_name = '.3FFAcc'; $file_data = file($file_name, FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES); $zeilen = count($file_data); for($i=0; $i<$zeilen; $i++) { $z = ($i+1); if ($z != 3) { print "<br />" . $file_data[$i] . "\n"; } }
aber aufpassen, es wird einfach immer nur die dritte (3.) Zeile ausgelassen,
also wenn (wegen Update) mal das Passwort in einer anderen Zeile steht,
dann die Bedingung für die NICHT-Ausgabe
entsprechend anpassen.if ($z != 3)
:)
Beitrag zuletzt geändert: 11.2.2013 11:24:25 von meinkredit -
ersteinmal danke für die Antwort,
aber wie lass ich das script mit den server verbinden per sftp?
wie funktioniert das?
könntest du das script bitte so zusammenfügen das es alles außer die version und das passwort ausließt und
noch hinzufügen wie das script sich mit den server verbindet.
danke :) -
<?php $connection = ssh2_connect('shell.example.com', 22); ssh2_auth_password($connection, 'username', 'password'); $sftp = ssh2_sftp($connection); $stream = fopen("ssh2.sftp://$sftp/pfad/zur/datei/.3FFAcc", 'r'); if ($stream) { while (!feof($stream)) { $lines[] = fgets($stream, 4096); } fclose($stream); }
Damit es so funktioniert, wie du gern hättest, müsste ich die Datei sehen. Zudem benötigst du ein Modul auf deinem Server:
http://www.php.net/manual/en/ssh2.installation.php
EDIT:
Ach, ist ja oben. Melde mich gleich nochmal ^^
Beitrag zuletzt geändert: 11.2.2013 12:31:53 von fabo -
Ohne Fehlermeldung oder dergleichen kann man dir auch nicht helfen...
-
wenn ich in das php script diesen code von dir mit einfüge
if ($stream) {
while (!feof($stream)) {
$lines[] = fgets($handle, 4096);
}
fclose($handle);
}
dann hängt sich der webbrowser auf .
wenn ich ihn aber rausnehme kommt gar nichts :) also einfach leere seite
danke das ihr mir helft ;) -
Okay... Was kommt hier raus?
<?php $server = 'server.example.com'; $username = 'user'; $password = 'password'; //==================== $data = ''; if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist"); if(!($con = ssh2_connect($server, 22))){ echo "fail: unable to establish connection\n"; } else { if(!ssh2_auth_password($con, $username, $password)) { echo "fail: unable to authenticate\n"; } else { echo "okay: logged in...\n"; if (!($stream = ssh2_exec($con, "ls -al" ))) { echo "fail: unable to execute command\n"; } else { stream_set_blocking($stream, true); while ($buf = fread($stream,4096)) { $data .= $buf; } fclose($stream); } } } //==================== if(!empty($data)) { echo $data; }
EDIT:
Mein Fehler :D
<?php $connection = ssh2_connect('shell.example.com', 22); ssh2_auth_password($connection, 'username', 'password'); $sftp = ssh2_sftp($connection); $stream = fopen("ssh2.sftp://$sftp/pfad/zur/datei/.3FFAcc", 'r'); if ($stream) { while (!feof($stream)) { $lines[] = fgets($stream, 4096); } fclose($stream); }
Beitrag zuletzt geändert: 11.2.2013 12:14:39 von fabo -
okay: logged in... insgesamt 32 drwx------ 5 root root 4096 7. Feb 14:06 . drwxr-xr-x 21 root root 4096 6. Feb 17:42 .. -rw------- 1 root root 2435 11. Feb 11:46 .bash_history -rw-r--r-- 1 root root 570 31. Jan 2010 .bashrc drwxr-xr-x 2 root root 4096 7. Feb 14:09 crontab -rw-r--r-- 1 root root 140 19. Nov 2007 .profile drwxr-xr-x 4 root root 4096 6. Feb 18:01 teeworlds-server drwxr-xr-x 4 root root 4096 10. Feb 14:09 .wine
EDIT
bei dem script unten kommt das raus:
Warning: fclose() expects parameter 1 to be resource, null given in /var/customers/webs/leoclan/test/test.php on line 22 Call Stack: 0.0002 672832 1. {main}() /var/customers/webs/leoclan/test/test.php:0 0.2803 710424 2. fclose() /var/customers/webs/leoclan/test/test.php:22
Beitrag zuletzt geändert: 11.2.2013 12:05:36 von leopold2104 -
Frage ... warum SFTP ... ??? ... hat jeder User einen SFTP Zugang ?
soll die Statistik nicht einfach über einen LINK erreichbar sein ??
BSP: http://<DEINEDOMAIN>/pfad/statistik.php?user=mickeymaus
Wie werden die Dateien dem User zugeordnet?
... hat jeder User eine eigene Datei ....z.B.: /userpfad/mickeymaus.3FFAcc
... oder einen Order ....z.B.: /userpfad/mickeymaus/.3FFAcc
... oder ist .3FFAcc schon eine User-Spezifische Datei ?
-
jeder user hatt einen eigene datei
zu finden sind sie auf meinen server
pfad: root/teeworlds-server/r00t-test-dm/accounts/Erik.3FFAcc
kein user hatt sftp zugriff, ich möchte am einde nur eine kleine textbox haben wo der user seinen account namen eingibt und dann
seine stats ausgelsen werden.
Beitrag zuletzt geändert: 11.2.2013 12:11:38 von leopold2104 -
<?php $server = 'server.example.com'; $username = 'user'; $password = 'password'; //==================== $lines = array(); if (!function_exists("ssh2_connect")) die("function ssh2_connect doesn't exist"); if(!($con = ssh2_connect($server, 22))){ echo "fail: unable to establish connection\n"; } else { if(!ssh2_auth_password($con, $username, $password)) { echo "fail: unable to authenticate\n"; } else { echo "okay: logged in...\n"; $sftp = ssh2_sftp($con); if (!($stream = fopen("ssh2.sftp://$sftp/pfad/zur/datei/.3FFAcc", 'r'))) { echo "fail: unable to execute command\n"; } else { if ($stream) { while (!feof($stream)) { $lines[] = fgets($stream, 4096); } fclose($stream); } } } } //==================== foreach($lines as $line) { if(strpos($line, 'Version') === false && strpos($line, 'name') === false && strpos($line, 'passwort') === false) { echo $line . '<br />'; } }
Ohne SSH sieht's so aus:
<?php $lines = array(); $stream = fopen(".3FFAcc", 'r'); if ($stream) { while (!feof($stream)) { $lines[] = fgets($stream, 4096); } fclose($stream); } foreach($lines as $line) { if(strpos($line, 'Version') === false && strpos($line, 'name') === false && strpos($line, 'passwort') === false) { echo $line . '<br />'; } }
Kurzversion SSH2:
<?php $connection = ssh2_connect('shell.example.com', 22); ssh2_auth_password($connection, 'username', 'password'); $sftp = ssh2_sftp($connection); $stream = fopen("ssh2.sftp://$sftp/pfad/zur/datei/.3FFAcc", 'r'); if ($stream) { while (!feof($stream)) { $lines[] = fgets($stream, 4096); } fclose($stream); } foreach($lines as $line) { if(strpos($line, 'Version') === false && strpos($line, 'name') === false && strpos($line, 'passwort') === false) { echo $line . '<br />'; } }
Das muss definitiv funktionieren.
Beitrag zuletzt geändert: 11.2.2013 12:29:33 von fabo -
also bei dem ersten code gibt der browser diesen fehler aus:
okay: logged in... fail: unable to execute command Warning: Invalid argument supplied for foreach() in /var/customers/webs/leoclan/test/test2.php on line 36 Call Stack: 0.0002 681160 1. {main}() /var/customers/webs/leoclan/test/test2.php:0
Beitrag zuletzt geändert: 11.2.2013 12:24:45 von leopold2104 -
Ich hab einen kleinen Fehler korrigiert. Mein Kind hängt mir gerade etwas im Nacken, das stresst mich :D
-
bei dem letzten code scheint es zu funktionieren, nur es kommt das raus:
Warning: fclose() expects parameter 1 to be resource, null given in /var/customers/webs/leoclan/test/test2.php on line 21 Call Stack: 0.0002 677840 1. {main}() /var/customers/webs/leoclan/test/test2.php:0 0.2600 716240 2. fclose() /var/customers/webs/leoclan/test/test2.php:21 Erik
Tran
Money = 30
Life = 0
Kills = 1
Deaths = 10
Level = 2
Exp = 0
Grenade = 0
Gun = 0
Shotgun = 0
Rifle = 0
Handle = 0
Hammer = 0 -
Tausch $handle gegen $stream aus :)
-
super danke hatt geklappt :)
nun zu meinem letzen problem und zwar wie erstell ich eine textbox wo der user seinen namen eigeben kann und dann
das auslese script gestartet wird? -
Hallo nochmal ...
ich versteh immer noch nicht, warum so kompliziert mit ssh2_connect() ...
... warum nicht einfach mit file() auslesen ?!?
Das sollte doch auch gehen, wenn die Datei am gleichen Server leigt, wo das Script aufgerufen wird ?!
Aufruf für User dann z.B. test3.php?user=Erik .... oder mit Formular (siehe unten)
<?php // ------------------------------------- if (!empty($_GET['user'])) { $user_name = trim($_GET['user']); $user_file = 'accounts/'.$user_name.'.3FFAcc'; $user_data = file($user_file); // ------------------------------------- DEBUG Ausgabe ------ echo "<br />\n"; echo "<br />\n"; print "<pre style=\"margin:4px; padding:4px; color:#000000; background:#DEDEDE; text-align:left;\">\n"; print_r($user_data); print "</pre>\n"; echo "<br />\n"; echo "<br />\n"; // ------------------------------------- ?>
anstatt der DEBUG Ausgabe dann halt die foreach oder for oder while Schleife mit Bedingung
PS:
Eingabe über Formular dann etwa so (als HTML)
<form name="form1" method="get" action="test3.php"> Username: <input type="text" name="user" size="30" maxlength="150" /> <input type="submit" name="go" value="OK" /> </form>
ggf.
anpassen, damit das Formular an die richtige Ziel-Datei gesendet wirdaction="test3.php"
-
Naja weil die datein nicht auf den webserver liegen
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage