Autor Tema: PHP acceder a archivos por encima de directorio raíz public_html, httpdocs, www  (Leído 6846 veces)

Príncipe_Azul

  • Principiante
  • **
  • Mensajes: 71
    • Ver Perfil
    • Foro ArgentinaIRC - Ayuda de Programación General, IRC y mIRC Scripting!
Hola amigos!!! :)

Les comento, tengo un problema al intentar leer un archivo, el problema que tengo es que no se muestran las líneas que hay en un archivo, yo intento leer la información de un archivo Log del Servidor de chat que tengo, pero cuando pruebo códigos para leer archivos, ninguno funciona, simplemente cuando entro a la URL donde debería aparecer las conexiones entrantes y salientes de mi chat, simplemente no se muestra nada, es como si fuese que el archivo estaría vacío.

He probado 3 o 4 métodos para leer archivos y no hay caso, no se muestra la info, he mirado los permisos y los he cambiado de varias formas posible y tampoco se muestra nada, he actualizado muchas veces la página y nada, he probado con 2 navegadores y nada, he visto el código HTML y no hay nada, ni siquiera 1 solo caracter, realmente no entiendo porque no se muestra la info.

En primer lugar, el archivo por supuesto que existe, es más yo leo ese archivo con un programa en Python y lo lee perfectamente, el problema es con PHP.
En segundo lugar, el archivo no está vacío, recién cuando hice las prubas contenía 173 líneas y hace varios días lo he borrado y logicamente ya se han escrito más líneas, desde que lo comencé a probar por supuesto que habían más de 100 líneas, pero acá el problema es que no lee ni siquiera 1 sola línea, ni aún usando la función fgets(), estoy desconcertado  ::)

Aquí dejo el código para que lo vean, seguro está bien, pero bueno, veamos que me dicen ustedes que saben mucho más que yo de PHP.


Código: (PHP) [Seleccionar]
<?php 

$archivoLog 
fopen('/home/usuario/Unreal3.2.10.2/ircd.log''r');

while(!
feof($archivoLog)) {
    
$linea fgets($archivoLog);
    echo 
'Linea: ' $linea '<br />';
}

fclose($archivoLog);

?>

He probado hasta incluso en cambiar las doble comillas "" por comillas simples '' y tampoco funciona.

Para solucionar esto, una posible solución que a mi siempre o casi siempre me funciona, es usar un capturador de errores, en Python cuando algo pasa, uso un capturador de errores y logro saber porque está fallando X cosa, pero en PHP no sé como se hace y no sé si será tomado como un error.

Quiero comentar que he probado el código que he dejado arriba y cuando lo ejecuto en mi navegador por la URL, me salen miles de veces la palabra Linea:, así:

Linea:
Linea:
Linea:
Linea:
Linea:
etc...


o sea... el código se pierde en un bucle infinito, porque lógico el archivo no tiene miles de líneas, además que como dije, lo revisé recién y no llega ni a 200 líneas.

Saludos y muchas gracias!! :)
« Última modificación: 24 de Julio 2015, 00:29 por Alex Rodríguez »

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Re:Archivo PHP no lee el contenido de un archivo Log
« Respuesta #1 en: 16 de Julio 2015, 14:23 »
Hola principe_azul es raro lo que comentas. Puede deberse a un problema con el formato de archivo o a algún detalle de configuración del servidor. Si subes el archivo o pones la url para descargarlo (basta que tenga 30 o 40 lineas, es solo para probar) me lo bajo y lo pruebo a ver si a mí me ocurre lo mismo usando otro servidor. Saludoss

Príncipe_Azul

  • Principiante
  • **
  • Mensajes: 71
    • Ver Perfil
    • Foro ArgentinaIRC - Ayuda de Programación General, IRC y mIRC Scripting!
Re:PHP no lee el contenido de un archivo Log fgets no funciona while feof
« Respuesta #2 en: 18 de Julio 2015, 07:14 »
Hola amigo Mastermind!! :)

Mirá estube probando de varias formas y no hay caso, he probado cambiando la extensión de .log a .txt y no lee el archivo, he probado a poner el mismo archivo .log en el directorio root para ingresar por ejemplo así:

http://www.URLWeb.net/ircd.log

y me lo descarga perfectamente, al probar de esa forma, el archivo PHP si me lee lo que contiene dentro, pero el problema es cuando el archivo está uno o más directorios antes de public_html y PHP es solo para trabajos webs, o sea, se entiende... no puede trabajar sobre un directorio que no es public_html (cd ..), creo que no se puede.

He probado por última vez a intentar algo que quizás me funcionaba, lo que hice fué crear un enlace simbólico que apunte al archivo en cuestión y en el archivo PHP que apunte a esa URL que apunta al ircd.log, pero me pasa igual... no lo lee, sin embargo si yo entro por URL con el navegador, descarga el archivo sin problemas, así que ya no sé que más probar, me dí por vencido, igual no es algo para mí, sino para alguien de mi foro que le pueda servir ver el Log de conexiones de su servidor por medio de URL, algo largo de explicar... para eso haría que el dueño del chat tenga que poner una clave en la URL, entónces el PHP validaría si la clave es correcta, descarga el archivo o lo muestra, caso contrario, no hace nada.
Tampoco es importante... no creo que alguien le interese algo así.

De igual forma, para no ser descortés y además para valorar tu intento de ayudarme, te dejo igual el archivo con 50 líneas, vos que seguro sabés más que yo de PHP, fijate si podés hacer algo amigo, y si no se puede, no importa, al menos, la intención es más que suficiente :)

Saludos y muchas gracias!! :)

Mastermind

  • Experto
  • *****
  • Mensajes: 536
    • Ver Perfil
Re:PHP no lee el contenido de un archivo Log fgets no funciona while feof
« Respuesta #3 en: 18 de Julio 2015, 13:00 »
Hola amigo no parece que haya ningún problema con el archivo sino con la ruta donde tratas de acceder. En este caso con php el trabajo en directorios por encima de public_html está restringido por motivos de seguridad. Como comentas una solución sería poner el archivo con una protección de forma que puedas acceder vía php sólo si se suministra una clave determinada, eso no sería difícil de hacer, puedes hacerlo pasando en la misma url la clave y recuperándola mediante get, de este modo nadie que no conozca la clave podrá acceder.

Saludos!

Príncipe_Azul

  • Principiante
  • **
  • Mensajes: 71
    • Ver Perfil
    • Foro ArgentinaIRC - Ayuda de Programación General, IRC y mIRC Scripting!
Re:PHP no lee el contenido de un archivo Log fgets no funciona while feof
« Respuesta #4 en: 20 de Julio 2015, 14:23 »
Asi es amigo, se podría usar GET o POST, aunque prefiero más GET, ya que es un poco más fácil, pero el problema es que ese archivo es de un servidor de chat, entónces el mismo guarda todas las conexiones entrantes y salientes de mi chat, pero al ser un directorio que está antes de public_html, no puedo acceder a descargarlo, hasta incluso tampoco me funcionó usando un enlace simbólico en el código de PHP, sería como redirección, pasa lo mismo que ahora, se pierde en un bucle infinito.

Posible solución:
Usar 2 lenguajes, uno PHP y el otro Python, como sería?, bueno pienso que se podría crear un programa simple en Python y un código en PHP, cuando hagan una petición GET con la clave correcta que solo sabría esa clave el dueño de su chat, el código PHP ejecuta el programa Python y éste hace una copia del archivo Log del servidor y lo pone dentro de public_html con el nombre ircd.log por ejemplo, y el código PHP luego de ejecutar el programa, realiza un bucle infinito hasta encontrar ese archivo ircd.log, como Python vuela, practicamente el bucle daría una sola vuelta y entónces PHP al detectar que ese archivo ya existe, entónces lo muestra al usuario.

Sería algo así, ya que de PHP se muy poco, pero algo así sería la idea:

Petición GET ---> URL_del_archivo_PHP&clave=123456789

PHP detecta la petición y la clave que es correcta, ejecuta el programa Python.
Python hace una copia del ircd.log y lo manda a public_html, hasta eso, PHP se queda leyendo con un bucle el directorio public_html:

Código: [Seleccionar]
while (1) {
    if (file_exists("ircd.log") {
        leearchivo...
        lo muestra con "echo"
        elimina el archivo
    }
}

eso es lo único que creo que se podría lograr, no sería algo muuuuy elegante, pero al menos serviría.


Saludos y muchas gracias amigo!!

 

Sobre la educación, sólo puedo decir que es el tema más importante en el que nosotros, como pueblo, debemos involucrarnos.

Abraham Lincoln (1808-1865) Presidente estadounidense.

aprenderaprogramar.com: Desde 2006 comprometidos con la didáctica y divulgación de la programación

Preguntas y respuestas

¿Cómo establecer o cambiar la imagen asociada (avatar) de usuario?
  1. Inicia sesión con tu nombre de usuario y contraseña.
  2. Pulsa en perfil --> perfil del foro
  3. Elige la imagen personalizada que quieras usar. Puedes escogerla de una galería de imágenes o subirla desde tu ordenador.
  4. En la parte final de la página pulsa el botón "cambiar perfil".