Zähler werden nicht funktionieren, wenn ich es auf einem anderen Server
-
10-07-2019 - |
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);
}
}
?>
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 .