Pergunta

Criei um hitcounter de modo que cada vez que alguém vai para o meu site, uma das 7 diferentes barras laterais cargas para cima. Há um arquivo chamado counter.php que grava em um arquivo de texto chamado hitcounter.txt. Todas as referências a arquivos parecem ser relativo, mas quando me mudei-los para um novo diretório para o meu novo hospedeiro Eu tenho esse erro em vez de um contador de visitas feliz:

Aviso : fopen (hitcounter.txt) [ function.fopen ]: failed to fluxo aberto: Permissão negada no / usr / local / apache / sites /MY-SITE/counter.php na linha 5

Counter.php é colado na íntegra abaixo, a linha 5 é a primeira referência para fopen, tanto counter.php e hitcounter.txt tem 775 permissões, mesmo que eles fizeram no velho host.

O que estou fazendo de errado? Estou obviamente faltando alguma coisa realmente simples e embaraçoso, tão à vontade para me dar qualquer desprezo ou abuso com ao mesmo tempo ajudar-me para fora.

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);
        }
    }
?>
Foi útil?

Solução

Em primeiro lugar, você não precisa de 775 permissões. Você precisa de 666 permissões no hitcounter.txt. O arquivo PHP pode ser 644.

O servidor web provavelmente não é um membro do grupo, dependendo do hospedeiro, assim que você precisa para dar os 'todos' permissões de escrita de grupo.

O "executar" bit é necessário para pastas mas não para arquivos individuais, já que eles não estão sendo executados pelo sistema operacional.

Então, você sabe, o 775 é: Proprietário, Grupo, Todos

  • Proprietário = Read + Write + Executar

  • Grupo = Read + Write + Executar

  • Todos = Ler + Executar

666 meios

  • Proprietário = Read + Write

  • Grupo = Read + Write

  • Todos = Ler + Escrever

644 meios

  • Proprietário = Read + Write

  • Grupo = Leitura

  • Todos = Leitura

Outras dicas

Ele provavelmente tem algo a ver com permissões. Configurá-lo para 777 e ver o que acontece. Se o Apache é executado com próprias permissões e não faz parte do seu essa pode ser a razão, mas eu tenho um par de sugestões:

  • uso file_put_contents / file_ get_ conteúdos para simples leitura / escrita!
  • use $ random_number = rand (0,8) OR mt_rand (0,8), se possível, em vez de estas inúmeras linhas e como um bônus se livrar de todo o arquivo de leitura / escrita

Boa sorte!

Atualizar

Nada bate um exemplo agradável:

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

Se você realmente quer (aliás não é aleatória.!):

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

Tente configurar permissões para 777. Se isso não funcionar, pode ser o seu does not anfitrião permitem a manipulação de arquivos no servidor

Verifique se o seu include_path para ter certeza que tem um período (diretório atual) nele. Não tenho certeza por que ele não iria, mas você nunca sabe se o seu anfitrião é wonkey. Você pode imprimir o seu include path a partir de um script PHP usando ini_get :

ini_get('include_path');

Além disso, você provavelmente precisa de diferentes permissões de arquivo. Aqui está um site útil descrevendo um monte de informações sobre permissões de arquivo .

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top