Contador não trabalho será quando eu movê-lo para outro servidor
-
10-07-2019 - |
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);
}
}
?>
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 ??li>
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 .