Comunidad de diseño web y desarrollo en internet online

Escribir en un log

Citar            
MensajeEscrito el 02 Dic 2011 10:35 am
Hola,

Tengo un archivo logs.php, donde tengo definida una función que escribe en un archivo log (default.log), la función es la siguiente:

function mostrar_log($texto, $usuario){
$ddf = fopen("log/default.log","a");
fwrite($ddf,"[".date("r")."] $texto $usuario" . PHP_EOL);
fclose($ddf);
}

En local me funciona perfectamente, escribe en el log sin problemas, el problema es cuando lo subo al servidor, en este caso no me funciona y me da el siguente error:

[02-Dec-2011 10:56:50] PHP Warning: fopen(log/default.log) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: Permission denied in logs.php on line 3

[02-Dec-2011 10:56:50] PHP Warning: fwrite(): supplied argument is not a valid stream resource in logs.php on line 4

[02-Dec-2011 10:56:50] PHP Warning: fclose(): supplied argument is not a valid stream resource in logs.php on line 5

La linea 3 es: $ddf = fopen("log/default.log","a");

Para más datos, el SO del servidor, es un Windows Server 2003 R2, ¿puede ser un problema de permisos?, le he dado permisos de escritura en el IIS y me sigue sin funcionar.

Por favor, ¿alguien sabe cuál puede ser el problema?, muchas gracias

Por eladerezador

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 02 Dic 2011 02:40 pm
No tienes permiso de escritura en el directorio "log" del servidor.

Por DriverOp

Claber

2510 de clabLevel



 

opera
Citar            
MensajeEscrito el 02 Dic 2011 04:59 pm
El problema es el "/", debes usar "\" porque es un servidor M@aligno (jejejejejeje) y sus manejos de ruta de archivos son distintos al resto del universo jejeje ;)

Pruébalo y nos cuentas :)

Por ElSiniestro

Claber

285 de clabLevel


1 articulo

Genero:Masculino  

Alguien que Ayuda

chrome
Citar            
MensajeEscrito el 07 Dic 2011 03:59 pm
He comprobado que este marcado el permiso de escritura en el IIS, tanto en el sitio web en general como en la propia carpeta "log".

También he probado a usar "\" y nada de nada, me sigue mostrando el siguiente error:

[07-Dec-2011 00:37:55] PHP Warning: fopen(log\default.log) [<a href='function.fopen'>function.fopen</a>]: failed to open stream: Permission denied in ruta\logs.php on line 3

[07-Dec-2011 00:37:55] PHP Warning: fwrite(): supplied argument is not a valid stream resource in ruta\logs.php on line 4

[07-Dec-2011 00:37:55] PHP Warning: fclose(): supplied argument is not a valid stream resource in ruta\logs.php on line 5

¿Se os ocurre otra que pueda ser?

Muchas gracias por las sugerencias

Por eladerezador

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 07 Dic 2011 06:18 pm
Hola
¿Has mirado la configuración del php.ini?
Mira que valor tiene open_basedir, y si es algún directorio distinto a log y log está fuera del directorio de tu script la veo difícil (nah, hazte un directorio dentro de la carpeta donde tienes el script de nombre log)

¿probaste poniendo "." antes de la ruta donde está el archivo?

algo como:
fopen(".log\default.log");

Esperamos respuesta

Por ElSiniestro

Claber

285 de clabLevel


1 articulo

Genero:Masculino  

Alguien que Ayuda

chrome
Citar            
MensajeEscrito el 14 Dic 2011 11:11 am
Hola,

He revisado el archivo php.ini, y la variable open_basedir está comentada no tiene ningún valor asignado, el directorio log, está ubicado en el directorio raiz de la aplicación al igual que el archivo php (logs.php) que trata de acceder al archivo log (log/default.log)

He probado con fopen(".log\default.log"); pero me sigue dando el mismo error de permisos.

¿Que puedo hacer?, muchas gracias

Por eladerezador

5 de clabLevel



 

firefox
Citar            
MensajeEscrito el 14 Dic 2011 02:18 pm

eladerezador escribió:

Hola,

He revisado el archivo php.ini, y la variable open_basedir está comentada no tiene ningún valor asignado, el directorio log, está ubicado en el directorio raiz de la aplicación al igual que el archivo php (logs.php) que trata de acceder al archivo log (log/default.log)

He probado con fopen(".log\default.log"); pero me sigue dando el mismo error de permisos.

¿Que puedo hacer?, muchas gracias

recuerda que el Simbolo
\ es un simbolo de escape en php por lo cual si quieres representarlo tendria que quedar asi

Código PHP :

 fopen(".\\log\\default.log");  

aunque esgun entiendo php es indiferente en las funciones fopen del tipo de slash que uses
por lo que eso y esto

Código PHP :

 fopen("./log/default.log");  

son equivalentes
cambia tu codigo a esto

Código PHP :

<?php
function mostrar_log($texto, $usuario)
{
    echo "Tratando de escribir en la ruta: " . realpath('./log/default.log');
    echo "<br />\n";
    $ddf = fopen("./log/default.log","a");
    if(is_resource($ddf))
    {
        fwrite($ddf,"[".date("r")."] $texto $usuario" . PHP_EOL);
        fclose($ddf);
    }
    else
    {
        echo "No se puede escribir en el archivo";
    }
}
?>

fijate la ruta que te devuelve realpath y ahi es donde tienes que tener permisos

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 15 Dic 2011 03:59 pm
Efectivamente, no estaba dando el permiso a la carpeta correcta, muchas gracias por la ayuda, ya está solucionado.

Por eladerezador

5 de clabLevel



 

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.