Question

J'ai mis en place un hitcounter afin que chaque fois qu'une personne accède à mon site, l'une des 7 barres latérales différentes se charge. Il existe un fichier appelé counter.php qui écrit dans un fichier texte appelé hitcounter.txt. Toutes les références aux fichiers semblent être relatives, mais lorsque je les ai déplacées dans un nouveau répertoire de mon nouvel hôte, j'ai reçu cette erreur au lieu d'un compteur de succès:

  

Avertissement : fopen (hitcounter.txt) [ function.fopen ]: échec de l'ouverture du flux: autorisation refusée dans / usr / local / apache / sites /MY-SITE/counter.php en ligne 5

Counter.php est collé dans son intégralité ci-dessous, la ligne 5 est la première référence à fopen. Counter.php et hitcounter.txt ont les mêmes autorisations que 775, comme sur l’ancien hôte.

Qu'est-ce que je fais mal? De toute évidence, il me manque quelque chose de très simple et d’embarrassant, alors n'hésitez pas à me faire part de tout mépris ou de tout abus lorsqu’il m’aide.

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);
        }
    }
?>
Était-ce utile?

La solution

D'abord, vous n'avez pas besoin des autorisations 775. Vous devez disposer d'autorisations 666 sur le fichier hitcounter.txt. Le fichier PHP peut être 644.

Le serveur Web n'est probablement pas un membre du groupe, en fonction de l'hôte. Vous devez donc donner des autorisations d'écriture au groupe "Tout le monde".

Le " Exécuter " Ce bit est nécessaire pour les dossiers mais pas pour les fichiers individuels, car ils ne sont pas exécutés par le système d'exploitation.

Vous savez donc que le 775 est: propriétaire, groupe, tout le monde

  • Propriétaire = Lecture + Écriture + Exécution

  • Groupe = Lecture + Écriture + Exécution

  • Tout le monde = Lecture + Exécution

666 signifie

  • Owner = Lecture + écriture

  • Groupe = Lecture + écriture

  • Tout le monde = Lecture + écriture

644 signifie

  • Owner = Lecture + écriture

  • Groupe = Lire

  • Tout le monde = Lire

Autres conseils

Cela a probablement quelque chose à voir avec les autorisations. Réglez-le sur 777 et voyez ce qui se passe. Si apache fonctionne avec des autorisations propres et ne fait pas partie de votre, cela pourrait en être la raison, mais j'ai quelques suggestions:

  • utilisez file_put_put content / file_ get_ contents pour des lectures / écritures simples!
  • veuillez utiliser $ random_number = rand (0,8) OU mt_rand (0,8) si possible au lieu de ces innombrables lignes et en prime, supprimez tout le fichier en lecture / écriture

Bonne chance!

Mettre à jour

Rien ne vaut un bel exemple:

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

Si vous voulez vraiment (au fait. PAS au hasard!):

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

Essayez de définir les autorisations sur 777. Si cela ne fonctionne pas, votre hôte pourrait ne pas autoriser la manipulation de fichiers sur le serveur

Vérifiez votre chemin_inclusion pour vous assurer qu'il contient un point (répertoire en cours). Vous ne savez pas pourquoi, mais vous ne savez jamais si votre hôte est déclaré gagnant. Vous pouvez imprimer votre chemin d'accès à partir d'un script PHP à l'aide de ini_get :

ini_get('include_path');

En dehors de cela, vous avez probablement besoin d'autorisations de fichier différentes. Voici un site utile décrivant de nombreuses informations sur les autorisations de fichiers .

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top