kostenloser Webspace werbefrei: lima-city


Globale Variable setzen funktioniert nicht?

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    bastians-seite

    Kostenloser Webspace von bastians-seite

    bastians-seite hat kostenlosen Webspace.

    Hi,

    ich möchte gerade so n' kleines PageViews-Script erstellen, aber irgendwie verstehe ich nicht, wie ich eine Variable, diese in einer Funktion ist, global machen kann. Hab bereits gegooglet, aber nichts gefunden, mein Code:

    <?php 
    
      require_once ("../user/config.php");
      require_once ("df.php");
      
      $FN = $HCFile_Name;
      $hits = fread ($handle, filesize ($FN));
      
      function func_pageviews() {
    
      global $hits;
      global $FN;
    
    $handle = fopen ($FN, "r");
    fclose ($handle);
     
    $hits = $hits + 1;
    echo $hits;
    
    $handle = fopen ($FN, "w");
    fwrite ($handle, $hits);
    fclose ($handle);
    
      }
      
      func_pageviews();
      
     
    
    ?>


    Wundert euch nicht, wenn der Code etwas seltsam aussieht, habe viele Tutorials durchsucht und dran rum-
    gebastelt.

    Die Variable hits soll ein Integer sein, also der, der die Aufrufe der Seite zählt.
    $FN soll der Filename sein (man kann das in der config.php einstellen)


    Hoffe jemand möchte mir weiterhelfen :D

    und jo... bin mir eben auch nicht sicher, ob das Problem irgendwo anderst liegen könnte, in der counter.txt Datei wird immer nur 1 gesetzt...


    p.s ja ich hab gelesen dass globale variablen später dann eine riesige Fehlerquelle sind, aber ich finde keine andere simple Lösung... :/


    Beitrag zuletzt geändert: 4.4.2016 19:36:04 von bastians-seite
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

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

  3. michaelkoepke

    michaelkoepke hat kostenlosen Webspace.

    Hi,
    bastians-seite schrieb:
    p.s ja ich hab gelesen dass globale variablen später dann eine riesige Fehlerquelle sind, aber ich finde keine andere simple Lösung... :/

    warum nicht einfach so?
    function func_pageviews(&$FN, &$hits) {...}

    Du übergibt die Variablen einfach per Referenz (mit dem &) somit kannst du den Inhalt der Variable über mehrere Namen ansprechen.

    MFG Micha
  4. Autor dieses Themas

    bastians-seite

    Kostenloser Webspace von bastians-seite

    bastians-seite hat kostenlosen Webspace.

    Hey danke! :)

    Hab es schon so versucht, einfach ohne &, obwohl ich auch Beispiele sah mit &, dachte aber geht eh ned.. danke!
  5. Die zwei Zeilen kannst du gleich Löschen, die machen nichts.

    $handle = fopen ($FN, "r");
    fclose ($handle);


    Ist $FN ein File Handle? Ansonsten funktioniert das nicht.
    Scheint aber nicht zu sein, da du $FN in func_pageviews() als Dateipfad nutzt.
    $FN = $HCFile_Name;
    $hits = fread ($handle, filesize ($FN));


    Warum verwendest du in diesem Code eine Funktion? Einfach den Code ausschreiben.
    Ansonsten können Funktionen auch Parameter haben. Das ist viel besser als eine globale Variable!

    require_once ("../user/config.php");
    $handle=fopen($Dateiname,"r+");
    $hits=fread($handle,filesize($Dateiname));
    rewind($handle);
    ftruncate($handle, 1);
    $hits+=1;
    fwrite($handle,$hits);
    fclose($handle);


    Beitrag zuletzt geändert: 4.4.2016 20:35:02 von test42test
  6. Autor dieses Themas

    bastians-seite

    Kostenloser Webspace von bastians-seite

    bastians-seite hat kostenlosen Webspace.

    Ja, aber hab schon mit Parameter versucht, geht ned :/

    WICHTIG: Ich benötigt unbedingt eine Funktion.

    Beitrag zuletzt geändert: 4.4.2016 20:13:45 von bastians-seite
  7. Hier also als Funktion:
    function Counter($Dateiname){
          $handle=fopen($Dateiname,"r+");
          $hits=fread($handle,filesize($Dateiname));
          rewind($handle);
          ftruncate($handle, 1);
          $hits+=1;
          fwrite($handle,$hits);
          fclose($handle);
    }
    Counter("Text.txt");

    Testbar unter http://test42test.lima-city.de/Test.php

    Edit:
    Wenn du die Variable $hits noch im Programm nutzen möchtest, füg einfach am Ende der Funktion ein
    return $hits;
    ein.
    $hits=Counter("Dateiname");

    Beitrag zuletzt geändert: 4.4.2016 20:36:38 von test42test
  8. Ich hab während test42test aktiv war auch eine Funktion geschrieben und dazu noch gegen Race-Conditions abgesichert:
    function counter($dateiname) {
      $h=fopen($dateiname, "c+");
      flock($h, LOCK_EX);
      $zugriffe=(int)stream_get_contents($h);
      $zugriffe++;
      fseek($h, 0);
      ftruncate($h, 0);
      fwrite($h, $zugriffe);
      flock($h, LOCK_UN);
      fclose($h);
      return $zugriffe;
    }

    Dazu noch ein Beispiel zur Verwendung:
    echo "Das ist der ".counter($File_Name).". Zugriff.";
    In $File_Name muss natürlich der Name der Datei stehen, die du zum Zählen nutzen möchtest.
  9. Autor dieses Themas

    bastians-seite

    Kostenloser Webspace von bastians-seite

    bastians-seite hat kostenlosen Webspace.

    test42test schrieb:
    Hier also als Funktion:
    function Counter($Dateiname){
          $handle=fopen($Dateiname,"r+");
          $hits=fread($handle,filesize($Dateiname));
          rewind($handle);
          ftruncate($handle, 1);
          $hits+=1;
          fwrite($handle,$hits);
          fclose($handle);
    }
    Counter("Text.txt");

    Testbar unter http://test42test.lima-city.de/Test.php

    Edit:
    Wenn du die Variable $hits noch im Programm nutzen möchtest, füg einfach am Ende der Funktion ein
    return $hits;
    ein.
    $hits=Counter("Dateiname");


    Hey ich finds echt korrekt von dir, dass du dir die Mühe gemacht hast.

    Habe Copy & Paste gemacht, folgender Code


    <?php 
    
      require_once ("../user/config.php");
      require_once ("df.php");
      
    
      
    function Counter($Dateiname){
          $handle=fopen($Dateiname,"r+");
          $hits=fread($handle,filesize($Dateiname));
          rewind($handle);
          ftruncate($handle, 1);
          $hits+=1;
          fwrite($handle,$hits);
          fclose($handle);
    }
    Counter("Text.txt");
      
     
    
    ?>




    bzw.

    <?php 
    
      require_once ("../user/config.php");
      require_once ("df.php");
      
    
      
    function Counter($Dateiname){
          $handle=fopen($Dateiname,"r+");
          $hits=fread($handle,filesize($Dateiname));
          rewind($handle);
          ftruncate($handle, 1);
          $hits+=1;
          fwrite($handle,$hits);
          fclose($handle);
    }
    Counter("../files/Text.txt");
      
     
    
    ?>


    funktioniert aber bei mir trotzdem nicht unter http://lebasti.de.cool/exPHP/content/main.php

    :/ na ja trotzdem danke... ;)
  10. Bist du dir sicher, dass nicht zuvor irgendwo ein Fehler die Codeausführung behindert?
  11. Autor dieses Themas

    bastians-seite

    Kostenloser Webspace von bastians-seite

    bastians-seite hat kostenlosen Webspace.

    test42test schrieb:
    Bist du dir sicher, dass nicht zuvor irgendwo ein Fehler die Codeausführung behindert?



    Ich habe die require_once weggenohmen, sodass nur dein Code da gestanden hatte, ging auch nicht.

    Jetzt könnte es doch eigentlich nur noch an Schreibrechten liegen, oder etwa nicht? Weil bei deiner Funktion sieht das etwas anders aus, als ein normaler PHP-Handler.. keine ahnung :/
  12. Mehr steht bei mir nicht und es funktioniert.
    <?php
    function Counter($Dateiname){
          $handle=fopen($Dateiname,"r+");
          $hits=fread($handle,filesize($Dateiname));
          rewind($handle);
          ftruncate($handle, 1);
          echo("Lese:$hits<br>");
          $hits+=1;
          fwrite($handle,$hits);
          fclose($handle);
          echo("Schreibe:$hits");
    }
    Counter("Text.txt");
    ?>


    Hast du die Fehlermeldungen eingeschaltet?
    Liegt die Datei wirklich auf dem Server?
  13. Autor dieses Themas

    bastians-seite

    Kostenloser Webspace von bastians-seite

    bastians-seite hat kostenlosen Webspace.

    test42test schrieb:
    Mehr steht bei mir nicht und es funktioniert.
    <?php
    function Counter($Dateiname){
          $handle=fopen($Dateiname,"r+");
          $hits=fread($handle,filesize($Dateiname));
          rewind($handle);
          ftruncate($handle, 1);
          echo("Lese:$hits<br>");
          $hits+=1;
          fwrite($handle,$hits);
          fclose($handle);
          echo("Schreibe:$hits");
    }
    Counter("Text.txt");
    ?>


    Hast du die Fehlermeldungen eingeschaltet?
    Liegt die Datei wirklich auf dem Server?


    Ich hatte es probiert mit error_reporting(-1); aber nachdem ich etwa 3 - 4 mal die Text.txt übertragen hatte mittels FileZilla ging es endlich, vielen Dank für deine Hilfe! :)
  14. Oh, Verzeihung! r+ kann keine Datei erstellen. Daran hatte ich gerade nicht gedacht.
  15. Vielen Dank für den Tipp!
  16. 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!