Il contatore non funzionerà quando lo sposto su un altro server
-
10-07-2019 - |
Domanda
Ho creato un hitcounter in modo che ogni volta che qualcuno acceda al mio sito, si carichi una delle 7 barre laterali diverse. C'è un file chiamato counter.php che scrive in un file di testo chiamato hitcounter.txt. Tutti i riferimenti ai file sembrano essere relativi, ma quando li ho spostati in una nuova directory nel mio nuovo host ho ricevuto questo errore invece di un contatore di hit felice:
Avviso : fopen (hitcounter.txt) [ function.fopen ]: impossibile aprire il flusso: autorizzazione negata in / usr / local / apache / sites /MY-SITE/counter.php on line 5
Counter.php è incollato nella sua interezza di seguito, la riga 5 è il primo riferimento a fopen, sia counter.php che hitcounter.txt hanno 775 permessi, proprio come sul vecchio host.
Cosa sto facendo di sbagliato? Mi manca ovviamente qualcosa di veramente semplice e imbarazzante, quindi sentiti libero di darmi qualsiasi disprezzo o abuso mentre mi aiuti.
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);
}
}
?>
Soluzione
Innanzitutto, non sono necessarie 775 autorizzazioni. Sono necessari 666 permessi su hitcounter.txt. Il file PHP può essere 644.
Probabilmente il web server non è un membro del gruppo, a seconda dell'host, quindi è necessario assegnare le autorizzazioni di scrittura al gruppo "Tutti".
Il " Esegui " bit è necessario per le cartelle ma non per i singoli file, poiché non vengono eseguiti dal sistema operativo.
Quindi, sai, il 775 è: Proprietario, Gruppo, Tutti
-
Proprietario = Leggi + Scrivi + Esegui
-
Gruppo = Leggi + Scrivi + Esegui
-
Everyone = Leggi + Esegui
666 significa
-
Proprietario = Leggi + Scrivi
-
Gruppo = Leggi + Scrivi
-
Everyone = Leggi + Scrivi
644 significa
-
Proprietario = Leggi + Scrivi
-
Gruppo = Leggi
-
Everyone = Leggi
Altri suggerimenti
Probabilmente ha qualcosa a che fare con le autorizzazioni. Impostalo su 777 e guarda cosa succede. Se apache funziona con le proprie autorizzazioni e non fa parte del tuo, questo potrebbe essere il motivo, ma ho un paio di suggerimenti:
- usa file_put_contents / file_ get_ contenuto per semplici letture / scritture!
- per favore usa $ random_number = rand (0,8) O mt_rand (0,8) se possibile al posto di queste innumerevoli righe e come bonus sbarazzati di tutto il file che legge / scrive
Buona fortuna!
Aggiorna
Niente batte un bell'esempio:
<?php
$random_number = mt_rand(0,8);
file_put_contents("hitcounter.txt", $random_number); /* dont know if you still need it */
?>
Se vuoi davvero (tra l'altro NON casuale!):
<?php
$file = "hitcounter.txt";
$number = (int)file_get_contents($file);
$number = ++$number % 9;
file_put_contents($file, $number);
?>
Prova a impostare le autorizzazioni su 777. Se il problema persiste, l'host non consente la manipolazione dei file sul server
Controlla il tuo include_path
per assicurarti che contenga un punto (directory corrente). Non sei sicuro del perché, ma non sai mai se il tuo host è winkey. Puoi stampare il tuo includi percorso
da uno script PHP usando ini_get :
ini_get('include_path');
Oltre a ciò, probabilmente avrai bisogno di autorizzazioni per i file diverse. Ecco un sito utile che descrive molte informazioni su permessi sui file .