ich habe ein problem.! =(

  • ich bin gerade dabei für meine seite eine funktion zu schreiben welche mir für jede IP adresse die auf den Server zugreift eine datei mit dem namen der ip erstellt. in dieser datei soll stehen wie oft diese ip auf meine seite zugegriffen hat


    mein code sieht bisher so aus:

    PHP
    <span class="syntaxdefault"><br />$dateiname </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'REMOTE_ADDR'</span><span class="syntaxkeyword">];<br /></span><span class="syntaxcomment">//datei wird erzeugt falls nicht vorhanden aber nichts passiert<br /></span><span class="syntaxdefault">$handle </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> fopen </span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> </span><span class="syntaxstring">"ip/$dateiname.php"</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">"a"</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">fclose </span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> $handle </span><span class="syntaxkeyword">);<br /><br /></span><span class="syntaxdefault">$handle </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> fopen </span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> </span><span class="syntaxstring">"ip/$dateiname.php"</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">"r"</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">$inhalt </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> fread </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$handle</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> filesize </span><span class="syntaxkeyword">(</span><span class="syntaxstring">"ip/$dateiname.php"</span><span class="syntaxkeyword">));<br /></span><span class="syntaxdefault">fclose </span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> $handle </span><span class="syntaxkeyword">);<br /></span><span class="syntaxcomment">// zugriffe wurden ausgelesen und nun wird der inhalt + 1 addiert<br /></span><span class="syntaxdefault">$handle </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> fopen </span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> </span><span class="syntaxstring">"ip/$dateiname.php"</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">"w"</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">$inhalt </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> fread </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$handle</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> filesize </span><span class="syntaxkeyword">(</span><span class="syntaxstring">"ip/$dateiname.php"</span><span class="syntaxkeyword">));<br /></span><span class="syntaxdefault">fwrite </span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> $handle</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $inhalt </span><span class="syntaxkeyword">+</span><span class="syntaxdefault"> 1</span><span class="syntaxkeyword">;<br /></span><span class="syntaxdefault">fclose </span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> $handle </span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault"> </span>


    das problem ist, dass dann eine fehlermeldung kommt inder steht das der inhalt dieser datei größer als NIX sein muss.
    nur wie soll ich das anstellen?
    weil erst dachte ich das es so gehen könnte, dass an der stelle an der die datei erzeugt wird falls diese nicht vorhanden bzw sonst nix passiert etwas in die datei geschrieben wird. aber dann ist ja das ergebniss wieder schwachsinn wenn schon was drinn steht bzw zum beispeil ne null angefügt wird. naja wenn ich ne 0 anfügen würde könnte ich dem $inhalt ein -10 geben aber wenn eine datei leer ist steht dann -10 zugriffe da
    ich weiß nicht mehr weiter =(


    dankeschön im voraus :)

  • Hi,


    Dein Ansatz ist unnötig kompliziert. Versuche es doch mal so:


    WENN die Datei existiert


    lies den Wert in eine Variable
    erhöhe die Variable um 1
    schreibe den Wert in die Datei


    SONST


    Schreibe den Wert 1 in die Datei


    und fertig.


    Benötigte Funktionen:
    - file_exists()
    - file_get_content()
    - file_put_content()


    siehe <!-- w --><a class="postlink" href="http://www.php.net">http://www.php.net</a><!-- w -->


    Schau mal ob Du damit klar kommst.


    LG

  • so....ich habe das mit de file_get_.. sowie put weggelassen da ich ne weiß wo da was stehen muss (also was get und put heist weiß ich schon)


    ist das jetzt so richtig?
    Ich habe es so gelöst, dass wenn die datei nicht exestiert sie erstellt wird und "0" in sie geschrieben wird. wenn sie exestiert wird sie ausgelesen (= inhalt) und der inhalt + 1 reingeschrieben


    is das jetzt so richtig?


    PHP
    <span class="syntaxdefault"><br />$dateiname </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'REMOTE_ADDR'</span><span class="syntaxkeyword">];<br /></span><span class="syntaxdefault">if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">file_exists</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'ip/$dateiname.php'</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">===</span><span class="syntaxdefault"> false </span><span class="syntaxkeyword">)<br />{<br /></span><span class="syntaxdefault">    $handle </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> fopen </span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> </span><span class="syntaxstring">"ip/$dateiname.php"</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">"a"</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    fwrite </span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> $handle</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">(</span><span class="syntaxstring">"0"</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    fclose </span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> $handle </span><span class="syntaxkeyword">);<br />}<br />else<br />{<br /></span><span class="syntaxdefault">    $handle </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> fopen </span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> </span><span class="syntaxstring">"ip/$dateiname.php"</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">"r"</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    $inhalt </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> fread </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$handle</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> filesize </span><span class="syntaxkeyword">(</span><span class="syntaxstring">"ip/$dateiname.php"</span><span class="syntaxkeyword">));<br /></span><span class="syntaxdefault">    fclose </span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> $handle </span><span class="syntaxkeyword">);<br /><br /></span><span class="syntaxdefault">    $handle </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> fopen </span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> </span><span class="syntaxstring">"ip/$dateiname.php"</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxstring">"a"</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    fwrite </span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> $handle</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$inhalt </span><span class="syntaxkeyword">+</span><span class="syntaxdefault"> 1</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">    fclose </span><span class="syntaxkeyword">(</span><span class="syntaxdefault"> $handle </span><span class="syntaxkeyword">);<br />}<br /></span><span class="syntaxdefault"> </span>


    PS: ich bekomme eine fehlermeldung wegen einem syntax error für die zeile fwrite ( $handle, ("0"); ...warum? habe alles durchgeschaut aber kein simikolon zuviel/zuwenig gesetzt

  • Du bekommst eine Fehlermeldung, weil du eine schließende Klammer zu wenig hast / eine öffnende Klammer zu viel.
    Mach die Klammer vor dem "0" weg.
    Hier noch ein Tipp, schreib mal

    Code
    $inhalt = (int) fread();

    damit wird das ganze direkt in einen Integerwert gepackt.
    Außerdem sollte es nicht

    PHP
    <span class="syntaxdefault"></span><span class="syntaxkeyword">if (</span><span class="syntaxdefault">file_exists</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'ip/$dateiname.php'</span><span class="syntaxkeyword">) === </span><span class="syntaxdefault">false </span><span class="syntaxkeyword">) </span><span class="syntaxdefault"></span>

    heßen, sondern

    PHP
    <span class="syntaxdefault"></span><span class="syntaxkeyword">if (</span><span class="syntaxdefault">file_exists</span><span class="syntaxkeyword">(</span><span class="syntaxstring">'ip/'</span><span class="syntaxkeyword">.</span><span class="syntaxdefault">$dateiname</span><span class="syntaxkeyword">.</span><span class="syntaxstring">'.php'</span><span class="syntaxkeyword">) === </span><span class="syntaxdefault">false </span><span class="syntaxkeyword">) </span><span class="syntaxdefault"></span>
  • Hi


    Zitat

    fwrite ( $handle, ("0");


    wenn die Datei angelegt wird ist die Seite doch besucht worden und dann solltest Du 1 hineinschreiben,
    0 Besuche machen keinen Sinn.


    LG

  • Hi,


    gern geschehen. :)


    Ach ja, meine "Musterlösung":

    PHP
    <span class="syntaxdefault"><?php<br /><br />$dateiname </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> $_SERVER</span><span class="syntaxkeyword">[</span><span class="syntaxstring">'REMOTE_ADDR'</span><span class="syntaxkeyword">]</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">.</span><span class="syntaxdefault"> </span><span class="syntaxstring">".php"</span><span class="syntaxkeyword">;<br /><br /></span><span class="syntaxdefault">if </span><span class="syntaxkeyword">(</span><span class="syntaxdefault">file_exists</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$dateiname</span><span class="syntaxkeyword">)</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">===</span><span class="syntaxdefault"> false </span><span class="syntaxkeyword">)<br />{<br /></span><span class="syntaxdefault">    file_put_contents</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$dateiname</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> 1</span><span class="syntaxkeyword">);</span><span class="syntaxdefault"> </span><span class="syntaxcomment">// Erster Besuch<br /></span><span class="syntaxkeyword">}<br />else<br />{<br /></span><span class="syntaxdefault">  $inhalt </span><span class="syntaxkeyword">=</span><span class="syntaxdefault"> </span><span class="syntaxkeyword">(int)</span><span class="syntaxdefault"> file_get_contents</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$dateiname</span><span class="syntaxkeyword">);<br /></span><span class="syntaxdefault">  file_put_contents</span><span class="syntaxkeyword">(</span><span class="syntaxdefault">$dateiname</span><span class="syntaxkeyword">,</span><span class="syntaxdefault"> $inhalt </span><span class="syntaxkeyword">+</span><span class="syntaxdefault"> 1</span><span class="syntaxkeyword">);<br />}<br /></span><span class="syntaxdefault">?></span>


    LG

  • ach soo muss das aussehen mit dem get und put? daher ging das bei mir ne weil ich noch fopen etc mit dazu gesetzt hatte xD


    darf ich code von dir 1:1 übernehmen? weil is ja kürzer und ne andere 'musterlösung' gibts ja ne :)

Jetzt mitmachen!

Sie haben noch kein Benutzerkonto auf unserer Seite? Registrieren Sie sich kostenlos und nehmen Sie an unserer Community teil!