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);
        }
    }
?>
È stato utile?

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 .

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top