Pregunta

Configuré un hitcounter para que cada vez que alguien vaya a mi sitio, se cargue una de las 7 barras laterales diferentes. Hay un archivo llamado counter.php que escribe en un archivo de texto llamado hitcounter.txt. Todas las referencias a archivos parecen ser relativas, pero cuando las moví a un nuevo directorio en mi nuevo host, recibí este error en lugar de un contador de visitas feliz:

  

Advertencia : fopen (hitcounter.txt) [ function.fopen ]: error al abrir la secuencia: Permiso denegado en / usr / local / apache / sites /MY-SITE/counter.php en línea 5

Counter.php se pega en su totalidad a continuación, la línea 5 es la primera referencia a fopen, ambos counter.php y hitcounter.txt tienen 775 permisos, igual que en el host anterior.

¿Qué estoy haciendo mal? Obviamente me estoy perdiendo algo realmente simple y vergonzoso, así que siéntete libre de darme cualquier desprecio o abuso mientras me ayudas.

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

Solución

Primero, no necesita permisos 775. Necesita 666 permisos en hitcounter.txt. El archivo PHP puede ser 644.

El servidor web probablemente no sea miembro del grupo, según el host, por lo que deberá otorgar permisos de escritura al grupo 'Todos'.

El " Ejecutar " bit es necesario para carpetas pero no para archivos individuales, ya que el sistema operativo no los ejecuta.

Para que sepa, el 775 es: Propietario, Grupo, Todos

  • Propietario = Leer + Escribir + Ejecutar

  • Group = Leer + Escribir + Ejecutar

  • Everyone = Leer + Ejecutar

666 significa

  • Propietario = Leer + Escribir

  • Group = Leer + Escribir

  • Everyone = Leer + Escribir

644 significa

  • Propietario = Leer + Escribir

  • Group = Leer

  • Everyone = Read

Otros consejos

Probablemente tenga algo que ver con los permisos. Ajústelo a 777 y vea qué sucede. Si apache se ejecuta con permisos propios y no es parte de usted, esta podría ser la razón, pero tengo un par de sugerencias:

    ¡
  • use file_put_contents / file_ get_ contents para lecturas / escrituras simples!
  • utilice $ random_number = rand (0,8) O mt_rand (0,8) si es posible en lugar de estas innumerables líneas y, como bonificación, elimine toda la lectura / escritura de archivos

¡Buena suerte!

Update

Nada es mejor que un buen ejemplo:

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

Si realmente quieres (¡por cierto, NO al azar!):

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

Intente configurar los permisos en 777. Si eso no funciona, podría ser que su host no permita la manipulación de archivos en el servidor

Verifique su include_path para asegurarse de que tenga un punto (directorio actual). No estoy seguro de por qué no lo haría, pero nunca se sabe si su host es wonkey. Puede imprimir su include path desde un script PHP usando ini_get :

ini_get('include_path');

Aparte de eso, probablemente necesite diferentes permisos de archivo. Aquí hay un sitio útil que describe una gran cantidad de información sobre permisos de archivos .

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top