kostenloser Webspace werbefrei: lima-city


txt datei auslesen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    leopold2104

    leopold2104 hat kostenlosen Webspace.

    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.
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. 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
    $z
    einführen, der bei Ausgabe die Zeile hoch-zählt.

    $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
    if ($z != 3)
    entsprechend anpassen.

    :)

    Beitrag zuletzt geändert: 11.2.2013 11:24:25 von meinkredit
  4. Autor dieses Themas

    leopold2104

    leopold2104 hat kostenlosen Webspace.

    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 :)
  5. <?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
  6. Autor dieses Themas

    leopold2104

    leopold2104 hat kostenlosen Webspace.

    ok,
    ich habs installiert.
    aber es funktioniert immernoch nicht.
  7. Ohne Fehlermeldung oder dergleichen kann man dir auch nicht helfen...
  8. Autor dieses Themas

    leopold2104

    leopold2104 hat kostenlosen Webspace.

    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 ;)
  9. 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
  10. Autor dieses Themas

    leopold2104

    leopold2104 hat kostenlosen Webspace.

    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
  11. 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 ?

  12. Autor dieses Themas

    leopold2104

    leopold2104 hat kostenlosen Webspace.

    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
  13. <?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
  14. Autor dieses Themas

    leopold2104

    leopold2104 hat kostenlosen Webspace.

    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
  15. Ich hab einen kleinen Fehler korrigiert. Mein Kind hängt mir gerade etwas im Nacken, das stresst mich :D
  16. Autor dieses Themas

    leopold2104

    leopold2104 hat kostenlosen Webspace.

    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
  17. Tausch $handle gegen $stream aus :)
  18. Autor dieses Themas

    leopold2104

    leopold2104 hat kostenlosen Webspace.

    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?
  19. 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.
    action="test3.php"
    anpassen, damit das Formular an die richtige Ziel-Datei gesendet wird

  20. Autor dieses Themas

    leopold2104

    leopold2104 hat kostenlosen Webspace.

    Naja weil die datein nicht auf den webserver liegen
  21. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!