fopen verursacht Dateidownload

Dieses Thema im Forum "Ruby, php, Perl, Python ..." wurde erstellt von Always-Godlike, 07.03.2007.

  1. #1 Always-Godlike, 07.03.2007
    Zuletzt bearbeitet: 07.03.2007
    Always-Godlike

    Always-Godlike Das Freak

    Dabei seit:
    31.12.2006
    Beiträge:
    939
    Zustimmungen:
    0
    Ort:
    Saarland
    moin leutz.

    Ich sitze seit 2 Tagen an nem Problem, das mir irgendwie nicht logisch erscheint. Ich versuche einen Counter mithilfe von einer .txt zu machen. Ich habe den selben schon mit mysql gemacht, möchte des ganze aber auch mit FlatFiles erreichen. Ich bin noch am Anfang und habe jetzt schon ein Problem.

    counterfuncs.php
    Code:
    <?
    /*------------------------------------------------------------------------------*/
    $ip = $_SERVER['REMOTE_ADDR'];
    $browser = $_SERVER['HTTP_USER_AGENT'];
    $sperrzeit = 300;
    $time = time();
    $timer = $time-$sperrzeit;
    $file = "files/counter.txt";
    
    
    function checkip()
    {
    global $file;
    $fp = fopen($file, "a+");
    for($i = 0;$fp < filesize($file); $i++)
    {
    $a[$i] = explode("||", fgets($fp));
    }
    fclose($fp);
    $i = count($a);
    
    for($i; $a[$i][0] > $timer;$i--)
    {
    if($a[$i][1] == $ip)
    {
    echo "Eingetragen";
    }
    else
    {
    echo "Schon da!";
    }
    }
    }
    
    if(checkip() == true)
    {
    $fp = fopen($file, "a+");
    fwrite($fp, $time."||".$ip."||".$browser."\n");
    fclose($fp);
    }
    ?>
    
    Sobald ich versuche die Seite auszuführen startet er den Download der php-Datei statt sie auf dem Server auszuführen. Sobald ich bei fopen() des $file wegmache gehts normal, außer das mir Apache halt nen Fehler ausspuckt, dass er die Datei nicht findet bzw. der Parameter falsch ist, iss ja nicht weiter schlimm...
    Schreibe ich noch die Zeile
    Code:
    $file = "files/counter.txt";
    statt dem global $file; in die Funktion erhalte ich trotzdem noch den Fehler. Bis auf dieses fopen in dieser Funktion funktioniert der gesamte Rest.

    Die Datei wird übrigens ganz oben in der index.php aufgerufen mithilfe von <? include_once 'includes/counterfuncs.php'; ?> und steht auch ganz am Anfang, falls das wichtig sein sollte...


    Ich hoffe ihr könnt mir helfen.
     
  2. Anzeige

    Schau dir mal diese Kategorie an. Dort findest du bestimmt etwas.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
  3. #2 Always-Godlike, 08.03.2007
    Always-Godlike

    Always-Godlike Das Freak

    Dabei seit:
    31.12.2006
    Beiträge:
    939
    Zustimmungen:
    0
    Ort:
    Saarland
    Darf ich dieses bedrückende Schweigen so werten, dass hier einfach keiner PHP kann, keiner den Befehl fopen() kennt oder keiner Bock hat zu antworten?

    Ich bräuchte dringend Abhilfe, dieses Problem stört im moment meinen gesamten Counter, und da muss noch viel Programmcode rein...
     
  4. Cyber

    Cyber .:DISTORTED:.

    Dabei seit:
    16.05.2003
    Beiträge:
    999
    Zustimmungen:
    0
    Ort:
    D -> BW -> Karlsruhe
    Erstens ist file ein keyword (Funktion file siehe php-ref). Mit $file hast da schonmal schlechte Karten, dann globalisierst Du die file-varibale innerhalb deiner funktion obwohl diese die variable gar nicht übertragen bekommt, das macht mich etwas stutzig. Wenn Du den Aufruf

    Code:
    function checkip($filename)
    {
     ...
    }
    
    machst, wie verhält sichs dann? Natürlcih $file noch überall durch $filename ersetzen.
     
  5. #4 Always-Godlike, 08.03.2007
    Zuletzt bearbeitet: 08.03.2007
    Always-Godlike

    Always-Godlike Das Freak

    Dabei seit:
    31.12.2006
    Beiträge:
    939
    Zustimmungen:
    0
    Ort:
    Saarland
    Das mit dem dem global hab ich genauso vom Beispiel in Selfphp übernommen. http://www.selfphp.de/praxisbuch/praxisbuchseite.php?site=77&group=12

    hab auch schon probiert, die variable $datei zu nennen, geht immernoch ned und ändert rein garnix. Soweit ich weiß gibt es file nur als funktion file() und als array $_FILES[] bei einem Dateiupload. Ich hab auch einen anderen Weg versucht,das ganze ohne die Funktion checkip()..

    Code:
    <?
    /*------------------------------------------------------------------------------*/
    $ip = $_SERVER['REMOTE_ADDR'];
    $browser = $_SERVER['HTTP_USER_AGENT'];
    $sperrzeit = 300;
    $time = time();
    $timer = $time-$sperrzeit;
    $file = "files/counter.txt";
    
    
    $checkip = "false";
    $fp = fopen($file, "r");
    for($i = 0;$fp < filesize($file); $i++)
    {
    $a[$i] = explode("||", fgets($fp));
    }
    fclose($fp);
    $i = count($a);
    
    for($i; $a[$i][0] > $timer && isset($a[$i]);$i--)
    {
    if($a[$i][1] == $ip)
    {
    echo "Eingetragen";
    $checkip = "true";
    break;
    }
    else
    {
    echo "Schon da!";
    }
    }
    
    
    
    if($checkip == "true")
    {
    $fp = fopen($file, "a+");
    fwrite($fp, $time."||".$ip."||".$browser."\n");
    fclose($fp);
    }
    
    ?>
    
    Das Problem ist immernoch dasselbe

    Ich weiss man kann die 2 for-schleifen in eine bauen, aber der Übersicht wegen hab ich momentan noch 2. Sobald ich die Zeile '$fp = fopen($file, "r");' auskommentiere geht die Funktion wieder, außer das ich halt ne Menge Fehlermeldungen krieg.



    Der untere Aufrauf der Datei, wo die IP dann endgültig gespeichert wird funktioniert übrigens. Wenn ich die gesamte Überprüfung auschalte schreibt er die IP's und alles in die counter.txt...
     
  6. #5 Cyber, 08.03.2007
    Zuletzt bearbeitet: 08.03.2007
    Cyber

    Cyber .:DISTORTED:.

    Dabei seit:
    16.05.2003
    Beiträge:
    999
    Zustimmungen:
    0
    Ort:
    D -> BW -> Karlsruhe
    Schau mal
    Code:
    for($i = 0;$fp [B]<[/B] filesize($file); $i++)
     ...
    
    Code:
    for($i = 0;$fp [B]<=[/B] filesize($file); $i++)
     ...
    
    .
    .
    .
    EDIT (autom. Beitragszusammenführung) :
    .

    Jo, da steht aber auch:
     
  7. #6 Always-Godlike, 08.03.2007
    Zuletzt bearbeitet: 09.03.2007
    Always-Godlike

    Always-Godlike Das Freak

    Dabei seit:
    31.12.2006
    Beiträge:
    939
    Zustimmungen:
    0
    Ort:
    Saarland
    das <= (kleinergleich) hilft auch nicht, wieso denn auch? Das einzige was ich erhalten würde wäre ein weiteres Feld in dem Array und noch dazu womöglich eine Fehlermeldung.
    Jedoch kann ich ja nicht sehen, dass er einen Fehler ausspuckt, weil er mir ja lieber stattdessen einen Download anbietet...


    BTW: Das global wird ja grade dazu verwendet die Variable $file auch wieder in der Funktion sichtbar zu machen. Sonst würde das zweite Beispiel auf der Seite ja auch nicht funktionieren. Das es funktioniert weiß ich, weil sobald ich des global wegmache er sofort fragt was $file ist. Wenn ich global wieder hinsetze und mir innerhalb der funktion mithilfe von 'echo' den Inhalt von $file ausgeben lasse, kommt der richtige String.



    !Ich warte immernoch auf Hilfe!


    Habe eine Lösung gefunden....

    Leider konnte mir ja keiner sagen wie ich des ganze mit dem fgets mache.... da musste ich den Script halt en bissl verändern und habe jetzt ne andere Methode gefunden. Ist im Prinzip sogar einfacher, schneller und kürzer als die andere Methode.
    momTrotzdem nochmal Danke an die, die sich bemüht haben mir zu helfen.

    Code:
    <?
    /*------------------------------------------------------------------------------*/
    $ip = $_SERVER['REMOTE_ADDR'];
    $browser = $_SERVER['HTTP_USER_AGENT'];
    $sperrzeit = 300;
    $time = time();
    $timer = $time-$sperrzeit;
    $file = "files/counter.txt";
    
    
    $checkip = "false";
    $fp = fopen($file, "r");
    $inhalt = fread($fp, filesize($file));
    
    $a = explode("\n", $inhalt);
    for($i = 0; $i < count($a); $i++)
    {
    $a[$i] = explode("||", $a[$i]);
    }
    fclose($fp);
    
    
    for($i = count($a)-1; ($a[$i][0] > $timer) && (isset($a[$i]));$i--)
    {
    if($a[$i][1] == $ip)
    {
    $checkip = "true";
    break;
    }
    }
    
    
    if($checkip == "false")
    {
    $fp = fopen($file, "a+");
    fwrite($fp, $time."||".$ip."||".$browser."\n");
    fclose($fp);
    }
    
    ?>
    
     
  8. Anzeige

    Vielleicht findest du HIER Antworten.
    Registrieren bzw. einloggen, um diese und auch andere Anzeigen zu deaktivieren
Thema:

fopen verursacht Dateidownload

Die Seite wird geladen...

fopen verursacht Dateidownload - Ähnliche Themen

  1. fopen(in $HOME)

    fopen(in $HOME): Moin, ich versuche mich gerade mal wieder in C und bastel mir da was zurecht. Dabei habe ich mir folgenden code erdacht: string ftoopen...
  2. variable in fopen

    variable in fopen: Guten Tag Linuxgemeinde. Vorwort: Bitte nicht mir gleich wieder an den Hals springen. Weiß immer nich wo nach ich suchen sol... Also: Mal...
  3. Fopen() unter Apache freischalten

    Fopen() unter Apache freischalten: Hallo alle, Ich habe neulich einen Apache auf meinem Ubuntu dd installiert. Jetzt weigert sich der Server jedoch php-Befehle wie fopen() oder...
  4. Broadcom 5715 verursacht grosse Probleme mit POE-Switch

    Broadcom 5715 verursacht grosse Probleme mit POE-Switch: Hallo zusammen Habe gerade festgestellt dass der in meiner Sun Ultra45 verbaute Broadcom BCM5715 ziemlich Probleme hat wenn man über einen POE...
  5. Hochkritische Lücke in Drupal verursacht Nachwehen

    Hochkritische Lücke in Drupal verursacht Nachwehen: Am 15. Oktober hatte das Sicherheitsteam des Content Management Systems Drupal eine schwerwiegende Lücke in der Kernkomponente Drupal-Core...