Frage

Ich habe eine hitcounter, so dass jedes Mal, wenn jemand auf meiner Seite geht, von 7 verschiedenen Sidebars Lasten auf. Es gibt eine Datei mit dem Namen counter.php, die in einer Textdatei schreibt genannt hitcounter.txt. Alle Verweise auf Dateien scheinen relativ zu sein, aber wenn ich sie in ein neues Verzeichnis auf meinem neuen Host verschoben habe ich diesen Fehler anstelle eines glücklichen Trefferzähler:

  

Warnung : fopen (hitcounter.txt) [ function.fopen ]: failed to open stream: Permission denied in / usr / local / apache / sites /MY-SITE/counter.php in Zeile 5

counter.php ist unten in seiner Gesamtheit eingefügt, Zeile 5 die erste Referenz ist sowohl counter.php fopen und 775 Berechtigungen hitcounter.txt hat, gleich wie sie auf dem alten Wirt taten.

Was mache ich falsch? Mir fehlt offensichtlich etwas wirklich einfach und peinlich, so fühlen sich frei, mir jede Hohn oder Missbrauch mit zu geben, während mir helfen.

counter.php:

<?php
    $count_my_page = ("hitcounter.txt");
    $hits = file($count_my_page);
    $hits[0]++;
    $fp = fopen($count_my_page , "w");
    if ($fp) {
        fputs($fp , "$hits[0]");
        fclose($fp);
    }
    if($hits[0]<=1)
        $random_number=0;
    else if($hits[0]>1 && $hits[0]<=2)
        $random_number=1;
    else if($hits[0]>2 && $hits[0]<=3)
        $random_number=2;
    else if($hits[0]>3 && $hits[0]<=4)
        $random_number=3;
    else if($hits[0]>4 && $hits[0]<=5)
        $random_number=4;
    else if($hits[0]>5 && $hits[0]<=6)
        $random_number=5;
    else if($hits[0]>6 && $hits[0]<=7)
        $random_number=6;
    else if($hits[0]>7 && $hits[0]<=8)
        $random_number=7;
    else if($hits[0]>8 && $hits[0]<=9) {
        $random_number=8;
        if($hits[0]==9) {
            $count_my_page=("hitcounter.txt");
            $fp = fopen($count_my_page , "w");
            $hits[0]=0;
            fputs($fp , "$hits[0]");
            fclose($fp);
        }
    }
?>
War es hilfreich?

Lösung

Als erstes müssen Sie nicht 775 Berechtigungen. Sie müssen 666 Berechtigungen für die hitcounter.txt. Die PHP-Datei kann 644 sein.

Der Web-Server ist wahrscheinlich nicht ein Mitglied der Gruppe, auf dem Host-abhängig, so dass Sie die Gruppe ‚Jeder‘ Schreibrechte zu geben braucht.

„Execute“ Bit ist für Ordner benötigt, aber nicht für einzelne Dateien, da sie durch das Betriebssystem nicht ausgeführt werden.

Damit Sie wissen, die 775 ist: Eigentümer, Gruppe Jeder

  • Owner = Lesen + Schreiben + Ausführen

  • Group = Lesen + Schreiben + Ausführen

  • Jeder = Lesen + Ausführen

666 Mittel

  • Owner = Lesen + Schreiben

  • Group = Lesen + Schreiben

  • Jeder = Lesen + Schreiben

644 Mittel

  • Owner = Lesen + Schreiben

  • Gruppe = Read

  • Jeder = Lesen

Andere Tipps

Es hat wahrscheinlich etwas mit Berechtigungen zu tun. Setzen Sie ihn auf 777 und sehen, was passiert. Wenn Apache läuft mit eigenen Berechtigungen und ist nicht Teil Ihres dies der Grund sein könnte, aber ich habe ein paar Vorschläge:

  • Verwendung file_put_contents / file_ get_ Inhalte für einfache Schreib- / schreibt!
  • Sie bitte $ random_number = rand (0,8) OR mt_rand (0,8), wenn möglich, anstelle dieser unzähligen Linien verwenden und als Bonus aller Datei lesen loswerden / Schreiben

Viel Glück!

Aktualisieren

Nichts geht über ein schönes Beispiel:

<?php 
  $random_number = mt_rand(0,8);
  file_put_contents("hitcounter.txt", $random_number); /* dont know if you still need it */
?>

Wenn Sie wirklich wollen (btw nicht zufällig.!):

<?php 
  $file = "hitcounter.txt";
  $number = (int)file_get_contents($file);
  $number = ++$number % 9;
  file_put_contents($file, $number);
?>

Versuchen Sie Berechtigungen auf 777. Einstellung Wenn das nicht funktioniert, Ihre Gastgeber tut Dateimanipulation auf dem Server sein könnte erlauben

Überprüfen Sie Ihre include_path um sicherzustellen, dass es einen Punkt (aktuelles Verzeichnis) in ihm hat. Nicht sicher, warum es nicht will, aber man kann nie wissen, ob Ihr Host wonkey ist. Sie können Ihre include path aus einem PHP-Skript drucken mit ini_get :

ini_get('include_path');

Other than that, müssen Sie wahrscheinlich unterschiedliche Dateiberechtigungen. Hier ist eine nützliche Website viele Informationen beschreiben auf Dateiberechtigungen .

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top