Foros del Web » Programando para Internet » PHP »

Problema con permisos...

Estas en el tema de Problema con permisos... en el foro de PHP en Foros del Web. Hola gente, les comento que en mi sitio tengo un contador que muestra, en forma de texto, las visitas que tuvo el sitio... El problema ...
  #1 (permalink)  
Antiguo 01/08/2009, 02:56
Avatar de MasterXNicoX  
Fecha de Ingreso: junio-2008
Ubicación: ../Arg/SanLuis.city
Mensajes: 943
Antigüedad: 15 años, 10 meses
Puntos: 28
Pregunta Problema con permisos...

Hola gente, les comento que en mi sitio tengo un contador que muestra, en forma de texto, las visitas que tuvo el sitio...

El problema es que en donde me tendría que mostrar las visitas aparece esto:


Cita:
Warning: fopen(c.txt) [function.fopen]: failed to open stream: Permission denied in /www/misitio.com/htdocs/web/v.php on line 1

Warning: fwrite(): supplied argument is not a valid stream resource in /www/misitio.com/htdocs/web/v.php on line 1

Warning: fclose(): supplied argument is not a valid stream resource in /www/misitio.com/htdocs/web/v.php on line 1
Ya se Mostraron: 3851371 Páginas de MiSitio!
-------------------------

Estoy usando este script de php...

Cita:
<? $archivo = "c.txt";$contador = 0;$fp = fopen($archivo,"r");$contador = fgets($fp, 26);fclose($fp);++$contador;$fp = fopen($archivo,"w+");fwrite($fp, $contador, 26);fclose($fp);echo "Ya se Mostraron: $contador Páginas de Misitio!";?>
Lo que este último hace es:

Abrir el archivo "c.txt"... Este contiene solamente un número que es el que se muestra en el site y a medida que hay una visita nueva se le agrega 1 al numero que contenía este archivo...

---

No se que puede estar fallando en el código... Alguien me puede dar una mano??

Lo que no entiendo es porque aparece esto... ya que dias anteriores ese error no aparecia y no he modificado el código del script....

Aclaro que el archivo "c.txt" tiene permisos "777".

Saludos y espero que puedan ayudarme

Que tengan un lindo día!!
__________________
Adivino del Foro y Admirador de Sabios
  #2 (permalink)  
Antiguo 01/08/2009, 05:22
 
Fecha de Ingreso: mayo-2008
Ubicación: En la guarida del mal, tratando de conquistar el mundo
Mensajes: 174
Antigüedad: 15 años, 10 meses
Puntos: 2
Respuesta: Problema con permisos...

Sería mas fácil localizar el error si dejas una linea después de cada ; así el log te marca la linea que provoca el error :P.
  #3 (permalink)  
Antiguo 01/08/2009, 06:20
Avatar de MasterXNicoX  
Fecha de Ingreso: junio-2008
Ubicación: ../Arg/SanLuis.city
Mensajes: 943
Antigüedad: 15 años, 10 meses
Puntos: 28
Respuesta: Problema con permisos...

Ok, gracias, ahora lo intento...

es que en este momento no me aparece el error :

Pasa de a ratos solamente

Saludos!!
__________________
Adivino del Foro y Admirador de Sabios
  #4 (permalink)  
Antiguo 01/08/2009, 07:37
 
Fecha de Ingreso: enero-2009
Mensajes: 408
Antigüedad: 15 años, 3 meses
Puntos: 14
Respuesta: Problema con permisos...

Hola , por lo que comentas pueden ser o un error de php , seria util que pongas lo siguiente en tu php debajo de:

Código php:
Ver original
  1. <?php
  2. ?>

Y por otro lado podria ser que si ese fichero esta trabajando en un web hosting , hayan instalado algun patch para securizar y esten bloqueando algunas funciones.

Saludos!
  #5 (permalink)  
Antiguo 01/08/2009, 07:39
 
Fecha de Ingreso: julio-2009
Mensajes: 118
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Problema con permisos...

mira haber si /www/misitio.com/htdocs/web/c.txt existe, de lo contrario igual se encuentra en /www/misitio.com/htdocs/c.txt y no funciona
  #6 (permalink)  
Antiguo 01/08/2009, 08:11
Avatar de MasterXNicoX  
Fecha de Ingreso: junio-2008
Ubicación: ../Arg/SanLuis.city
Mensajes: 943
Antigüedad: 15 años, 10 meses
Puntos: 28
Respuesta: Problema con permisos...

Hola y gracias x las respuestas...

Jona, eso es para que no se muestre el error?? Lo tengo que aplicar dentro de mi archivo php???

---

Albert, el fichero si existe, todo funciona perfectamente la mayor parte del tiempo, sólo a veces aparecen esos errores...
__________________
Adivino del Foro y Admirador de Sabios
  #7 (permalink)  
Antiguo 01/08/2009, 08:26
 
Fecha de Ingreso: enero-2009
Mensajes: 408
Antigüedad: 15 años, 3 meses
Puntos: 14
Respuesta: Problema con permisos...

Lo tenes que incluir dentro de v.php o el script que te genere ese permission denied , y al contrario es el maximo nivel de error , es para que te muestre sugerencias de optimización y todos los errores.

Saludos!
  #8 (permalink)  
Antiguo 01/08/2009, 08:30
 
Fecha de Ingreso: julio-2009
Mensajes: 118
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Problema con permisos...

Pues ahora mismo lo único que se me ocurre es que solo aparece ese error cuando dos usuarios acceden al fichero al mismo tiempo.

usa algo como esto:

Código php:
Ver original
  1. <?
  2. $archivo = "../numero.dat";
  3. $abre = fopen($archivo, "r");
  4. $total = fread($abre, filesize($archivo));
  5. fclose($abre);
  6. $abre = fopen($archivo, "w");
  7. $total = $total + 1;
  8. if ( flock( $abre, LOCK_EX ) ) {
  9.    $grabar = fwrite($abre, $total);
  10.    flock( $abre, LOCK_UN );
  11. }
  12. fclose($abre);
  13. ?>
  #9 (permalink)  
Antiguo 01/08/2009, 08:34
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Problema con permisos...

El problema del script esta en la mala utilizacion de la funcion

Edito:
error en fopen no en fwrite


Este es el codigo limpio.
Código PHP:
Ver original
  1. $archivo = "c.txt";
  2.  
  3. $contador = 0;
  4.  
  5. $fp = fopen($archivo,"r");
  6.  
  7. $contador = fgets($fp, 26);
  8.  
  9. fclose($fp);
  10. $contador++;
  11. $fp = fopen($archivo,"w+");
  12. fwrite($fp, $contador,26);
  13. fclose($fp);
  14. echo "Ya se Mostraron: $contador Páginas de Misitio!";

Edito:
Seria bueno agregarle esta linea al codigo antes de $contador++

Código PHP:
Ver original
  1. if(empty($contador)){
  2. $contador = 1;
  3. }

Última edición por gjx2; 01/08/2009 a las 08:53
  #10 (permalink)  
Antiguo 01/08/2009, 08:38
Avatar de MasterXNicoX  
Fecha de Ingreso: junio-2008
Ubicación: ../Arg/SanLuis.city
Mensajes: 943
Antigüedad: 15 años, 10 meses
Puntos: 28
Respuesta: Problema con permisos...

Ok, gracias a los tres

Ahora pruebo todas las soluciones y les comento como me fué...

-----

Albert, para que sirve el flock?
__________________
Adivino del Foro y Admirador de Sabios
  #11 (permalink)  
Antiguo 01/08/2009, 08:42
Avatar de MasterXNicoX  
Fecha de Ingreso: junio-2008
Ubicación: ../Arg/SanLuis.city
Mensajes: 943
Antigüedad: 15 años, 10 meses
Puntos: 28
Respuesta: Problema con permisos...

gjx2 qué problema habia con el fwrite??

Podrias explicarme un poco???

Y me podrían explicar para que sirve el numerito 26???

Saludos!!

Les dejo karma a los que me ayudaron
__________________
Adivino del Foro y Admirador de Sabios

Última edición por MasterXNicoX; 01/08/2009 a las 08:49 Razón: Gramática
  #12 (permalink)  
Antiguo 01/08/2009, 08:47
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Problema con permisos...

Otro correccion le hago a mi codigo

Código PHP:
Ver original
  1. $archivo = "c.txt";
  2.  
  3. $contador = 0;
  4.  
  5.  if(!file_exists($archivo)){
  6.  fopen($archivo,"w+");
  7.  }
  8.  
  9. $fp = fopen($archivo,"r+");
  10.  
  11. $contador = fgets($fp, 26);
  12.  
  13. fclose($fp);
  14.  
  15. if(empty($contador)){
  16. $contador = 0;
  17. }
  18.  
  19. $contador++;
  20. $fp = fopen($archivo,"w");
  21. fwrite($fp, $contador);
  22. fclose($fp);
  23. echo "Ya se Mostraron: $contador Páginas de Misitio!";

Le agrege esta linea

Código PHP:
Ver original
  1. if(!file_exists($archivo)){
  2.  fopen($archivo,"w+");
  3.  }
Para que no genere error si no existe el archivo.
  #13 (permalink)  
Antiguo 01/08/2009, 08:47
 
Fecha de Ingreso: julio-2009
Mensajes: 118
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Problema con permisos...

Cita:
Iniciado por MasterXNicoX Ver Mensaje
Ok, gracias a los tres

Ahora pruebo todas las soluciones y les comento como me fué...

-----

Albert, para que sirve el flock?
para bloquear el archivo
  #14 (permalink)  
Antiguo 01/08/2009, 08:52
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Problema con permisos...

Cita:
Iniciado por MasterXNicoX Ver Mensaje
gjx2 que problema habia con el fwrite??

Podrias explicarme un poco???

Y me podrían explicar para que sirve el numerito 26???

Saludos!!

Les dejo karma a los que me ayudaron
No perdon quise decir en la fopen
Estavas leyendo un archivo que no existia
Cuando expecificas el 26 le estas diciendo que el maximo de caracteres que debe de escribir se limite a 26 :-s
  #15 (permalink)  
Antiguo 01/08/2009, 08:57
Avatar de MasterXNicoX  
Fecha de Ingreso: junio-2008
Ubicación: ../Arg/SanLuis.city
Mensajes: 943
Antigüedad: 15 años, 10 meses
Puntos: 28
Respuesta: Problema con permisos...

Pero ese archivo si existia xD osea.. es más, casi siempre funciona...

Lo del numerito 26 para qué sirve??
__________________
Adivino del Foro y Admirador de Sabios
  #16 (permalink)  
Antiguo 01/08/2009, 09:00
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Problema con permisos...

@fopen
@fgets
@fwrite
para que no te salgan los warn..

te decia que el 26 o 27 .... o lo qu tu quieras , es para indicarle la cantidad de char que debe de escribir en el archivo
al igual que cuando haces fgets el numerico le indica la cantidad de char que debe leer


Si quieres saber mas de fwrite
http://us3.php.net/manual/en/function.fwrite.php
  #17 (permalink)  
Antiguo 01/08/2009, 09:01
 
Fecha de Ingreso: julio-2009
Mensajes: 118
Antigüedad: 14 años, 9 meses
Puntos: 2
Respuesta: Problema con permisos...

Si casi siempre funciona te aconsejo poner error_reporting(0); antes del fopen y ya verás como no vuelven a salir esos errores :D

@gjx2 Te me has adelantado :p
  #18 (permalink)  
Antiguo 01/08/2009, 09:06
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Problema con permisos...

No importa albert1980
Eres de los mejores
Se me olvido mencionar
@fclose

Lo estrano es que este sr dice que antes le funcionaba :-s
y realmente aparenta que si
Ya se Mostraron: 3851371 Páginas de MiSitio!

quisas todo se hubiece evitado si la primera respuesta fuera
error_reporting(0)
o
@fopen
@fgets
@fclose
  #19 (permalink)  
Antiguo 01/08/2009, 09:12
 
Fecha de Ingreso: enero-2009
Mensajes: 408
Antigüedad: 15 años, 3 meses
Puntos: 14
Respuesta: Problema con permisos...

Hola , te presento otra solución quizas no quieres utilizar base de datos pero seria lo mas logico:

1) Creamos una tabla en la base de datos MYSQL que se llame contador , dicha tabla contendra un campon unico que sera del tipo integer , dicho campo se llamara valor.

2)

cuenta.php

Código php:
Ver original
  1. <?php
  2. $link=mysql_connect('localhost','username','password') or die('Error');
  3. if($link){
  4. mysql_select_db('tablename') or die('Error seleccionado tabla');
  5. }
  6. $sql="UPDATE contador SET valor=valor+1";
  7. $sql=mysql_query($sql,$link) or die('error contando visita');
  8. }
  9. $query="SELECT valor FROM contador";
  10. $query=mysql_query($sql,$link) or die("Error contando visita");
  11. $dato=mysql_fetch_row($query);
  12.  
  13. echo "Esta pagina contiene ".$dato['0']." impresiones ";
  14. ?>


Como veras quizas es algo mas complicado pero te solucionara todo tipo de problema con ficheros y es muchisimo mas escalable , por otro lado utilize el termino impresiones ya que al no evaluar la ip lo que realmente estas contando no son visitas reales sino impresiones , la diferencia entre visita real (visitas unicas) e impresiones radica en que visitas unica cuenta una ip como una visita y si dicha ip existe no la vuelve a contar , impresiones cuenta siempre por mas que sea la misma ip.

Las soluciones que incluyen poner a 0 el error_reporting sinceramente son parches y no soluciones , es verdad que si el script se encuentra en un ambito de produccion que lo ve gente real y no solo los programadores es esencial poner dicho valor a 0 para evitar que muestre errores que afecten la seguridad de tu aplicacion web , pero estamos engañandonos xq si realmente hay un error no saldra y no obtendremos el resultado esperado , lo mas util es analizar el codigo y buscar el motiv del error , solventarlo y luego si aplicar error_reporting.

Como todos decimos en argentina , el argentino con un rollo de alambra soluciona todo , el tema cuando se acabe el alambre como solucionamos los problemas?.

Saludos!
  #20 (permalink)  
Antiguo 01/08/2009, 09:19
Avatar de MasterXNicoX  
Fecha de Ingreso: junio-2008
Ubicación: ../Arg/SanLuis.city
Mensajes: 943
Antigüedad: 15 años, 10 meses
Puntos: 28
Respuesta: Problema con permisos...

Claro xD jajaja...

gjx2.. lo de @fopen, @fgets, etc.. tengo que ponerlo asi por ejemplo??..

Cita:
$contador++;
$fp = fopen($archivo,"w");
@fwrite($fp, $contador);
@fclose($fp);
echo "Ya se Mostraron: $contador Páginas de Misitio!";
------------

Albert.. lo de "error_reporting(0);" va antes del primer fopen??
__________________
Adivino del Foro y Admirador de Sabios
  #21 (permalink)  
Antiguo 01/08/2009, 09:21
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Problema con permisos...

Si senior.
En las lineas donde te dice que se genera el wrnig.
  #22 (permalink)  
Antiguo 01/08/2009, 09:23
Avatar de MasterXNicoX  
Fecha de Ingreso: junio-2008
Ubicación: ../Arg/SanLuis.city
Mensajes: 943
Antigüedad: 15 años, 10 meses
Puntos: 28
Respuesta: Problema con permisos...

Jonathan muchas gracias

Con el tema este que te cito a continuación...

Cita:
Como veras quizas es algo mas complicado pero te solucionara todo tipo de problema con ficheros y es muchisimo mas escalable , por otro lado utilize el termino impresiones ya que al no evaluar la ip lo que realmente estas contando no son visitas reales sino impresiones , la diferencia entre visita real (visitas unicas) e impresiones radica en que visitas unica cuenta una ip como una visita y si dicha ip existe no la vuelve a contar , impresiones cuenta siempre por mas que sea la misma ip.
Ya lo sé xD por eso puse "ya se mostraron N páginas de mi sitio" y no "mi sitio tuvo N visitas"

Tendré en cuenta tu solución si es que me genera otro tipo de errores las soluciones que me dieron gjx2 y albert.
__________________
Adivino del Foro y Admirador de Sabios
  #23 (permalink)  
Antiguo 01/08/2009, 09:29
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Problema con permisos...

El unico problema que veo en un futuro
es con la funcion

fgets ya que le especificas un numero predeterminado de lectura

algo mas amplio

fgets($fp,100);

y con fwrite no expecificarle la cantidad de chr que escriba

solo dejarlo

fwrite($fp,$archivo);

Haci si el archivo sobre pasa los 26 chr no tendrias que volver a editar el script.

Suerte.
  #24 (permalink)  
Antiguo 01/08/2009, 09:37
Avatar de MasterXNicoX  
Fecha de Ingreso: junio-2008
Ubicación: ../Arg/SanLuis.city
Mensajes: 943
Antigüedad: 15 años, 10 meses
Puntos: 28
Respuesta: Problema con permisos...

Ok.. y por último....

Es lo mismo que ponga lo de "error_reporting(0);" o las arrobas antes de los fwrite,fopen... o tengo que poner ambas cosas para que los errores no se muestren??

-----

jonatan, el código funciona bién??
__________________
Adivino del Foro y Admirador de Sabios
  #25 (permalink)  
Antiguo 01/08/2009, 09:38
Avatar de MasterXNicoX  
Fecha de Ingreso: junio-2008
Ubicación: ../Arg/SanLuis.city
Mensajes: 943
Antigüedad: 15 años, 10 meses
Puntos: 28
Respuesta: Problema con permisos...

Cita:
El unico problema que veo en un futuro
es con la funcion

fgets ya que le especificas un numero predeterminado de lectura

algo mas amplio

fgets($fp,100);

y con fwrite no expecificarle la cantidad de chr que escriba

solo dejarlo

fwrite($fp,$archivo);

Haci si el archivo sobre pasa los 26 chr no tendrias que volver a editar el script.

Suerte.
Ah ok, ahora lo arreglo

Igual para que las impresiones sobrepasen los 26 caracteres tengo que tener billones de impresiones y no lo veo muy probable xD pero igual lo edito
__________________
Adivino del Foro y Admirador de Sabios
  #26 (permalink)  
Antiguo 01/08/2009, 09:41
 
Fecha de Ingreso: enero-2009
Mensajes: 408
Antigüedad: 15 años, 3 meses
Puntos: 14
Respuesta: Problema con permisos...

Hola , el arroba " @" suprime los errores en ejecución , con lo cual es más lento que utilizar error_reporting(0); , sinceramente no es aconsejable ni uno ni otro en el momento de desarrollo como te he dicho pero si quieres usar uno , usa error_reporting(0);.

Saludos!
  #27 (permalink)  
Antiguo 01/08/2009, 09:41
Avatar de gjx2  
Fecha de Ingreso: agosto-2008
Ubicación: R.D
Mensajes: 1.153
Antigüedad: 15 años, 8 meses
Puntos: 139
Respuesta: Problema con permisos...

Aprovecho el hilo para decir
Las @ te impiden salir los wrn de las lineas donde las especificaste.

El error_reporting(0) te impide cualquier error del archivo

En realidad para un script tan pequeno
es demaciada teoria vale lo mismo usar @ o error_reporting(0) .

Por otro lado



la funciona fgets no funciona con filezise () que seria la manera en la que tendrias algo mas dinamico.

en ves de fgets utiliza fread para que puedas usar el filezise

$contador = fread($fp,filezise($archivo));
  #28 (permalink)  
Antiguo 01/08/2009, 09:47
Avatar de MasterXNicoX  
Fecha de Ingreso: junio-2008
Ubicación: ../Arg/SanLuis.city
Mensajes: 943
Antigüedad: 15 años, 10 meses
Puntos: 28
Respuesta: Problema con permisos...

Cita:
Iniciado por jona
Hola , el arroba " @" suprime los errores en ejecución , con lo cual es más lento que utilizar error_reporting(0); , sinceramente no es aconsejable ni uno ni otro en el momento de desarrollo como te he dicho pero si quieres usar uno , usa error_reporting(0);.
Ok muchas gracias, y no es que menosprecie tu código, es más, ya lo guardé por cualquier inconveniente jejeje y te lo agradezco mucho

-------------------------

gjx2, me conformo con el fgets, sinceramente no busco algo más dinámico pero gracias igual por el consejo

-------------------------

Gracias nuevamente a todos chicos

Que estén bien!!!
__________________
Adivino del Foro y Admirador de Sabios
  #29 (permalink)  
Antiguo 01/08/2009, 09:52
 
Fecha de Ingreso: enero-2009
Mensajes: 408
Antigüedad: 15 años, 3 meses
Puntos: 14
Respuesta: Problema con permisos...

Jaja esta bien no dije nada , solo recomiendo lo que creo mejor y más eficiente y escalable.

Saludos .
  #30 (permalink)  
Antiguo 01/08/2009, 10:06
Avatar de MasterXNicoX  
Fecha de Ingreso: junio-2008
Ubicación: ../Arg/SanLuis.city
Mensajes: 943
Antigüedad: 15 años, 10 meses
Puntos: 28
Respuesta: Problema con permisos...

okisss!!! todo claro

Un abrazo!
__________________
Adivino del Foro y Admirador de Sabios
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 12:55.