Foros del Web » Programando para Internet » PHP »

Pequeño error en script para editar archivos de texto

Estas en el tema de Pequeño error en script para editar archivos de texto en el foro de PHP en Foros del Web. Hola... estaba preparando un script para editar archivos vie url, me funciona bien, pero tiene un pequeño fallo y es que si el archivo pedido ...
  #1 (permalink)  
Antiguo 09/10/2008, 08:01
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 19 años, 3 meses
Puntos: 638
Pequeño error en script para editar archivos de texto

Hola... estaba preparando un script para editar archivos vie url, me funciona bien, pero tiene un pequeño fallo y es que si el archivo pedido no existe me manda un error y ya mi cabecita no me dio para mas y tambien quiero ver como hacer para editar los archivos via URL, pues ahora solo los edita en el server local. osea, que funciona con rutas del tipo /carpeta/file.html pero no con http://localhost/carpeta/file.html

El error que da es:
Warning: file(eyj) [function.file]: failed to open stream: No such file or directory in D:\WAMP-SERVER\wamp\www\foo\file-edit.php on line 63

Warning: Invalid argument supplied for foreach() in D:\WAMP-SERVER\wamp\www\foo\file-edit.php on line 63

aqui el codigo:
Código php:
Ver original
  1. <?php
  2. if(!isset($_SESSION)){
  3.     session_start();
  4. }
  5.  
  6. // comprobamos si el formulario
  7. // ha sido enviado correctamente
  8. if(isset($_POST['abrir']) && $_POST['abrir'] == 'Abrir archivo'){
  9.     if (!empty($_POST['archivo'])){
  10.         $archivo = $_POST['archivo'];
  11.         $_SESSION['archivo'] = $archivo;
  12.         // comprobamos que existe el archivo
  13.         if (!file_exists($archivo) && !is_file($archivo)){
  14.             $msg = "El archivo no existe";
  15.         } else {
  16.             //$archivo_abierto = $archivo;
  17.             $msg = "La ruta del archivo es <b>$archivo</b>";
  18.         }
  19.     } else {
  20.         $msg = "Debe introducir la diraccion del archivo a editar";
  21.     }
  22. }
  23.  
  24. // editamos el archivo abierto
  25. if(isset($_POST['editar']) && $_POST['editar'] == 'Editar archivo'){
  26.     $archivo = $_SESSION['archivo'];
  27.     $archivo_editado = $_POST['archivo_editado'];
  28.     if(is_writable($archivo)){
  29.         if(!$gestor = fopen($archivo, 'w')){
  30.             $msg = "No se puede abrir el archivo $archivo";
  31.             exit;
  32.         }
  33.         // editamos el archivo
  34.         if(fwrite($gestor, html_entity_decode($archivo_editado)) === false){
  35.             $msg = "No se puede escribir en el archivo $archivo";
  36.         }
  37.         // Exito...!
  38.         $msg = "El archivo $archivo se edito con exito";
  39.         fclose($gestor);
  40.         //unset($_SESSION['archivo']);
  41.     }else{
  42.         $msg = "No se peude escribir en el archivo $archivo_editado";
  43.     }
  44. }
  45.  
  46. // guardamos el archivo
  47. // y destruimos todas las variables
  48. if(isset($_POST['guardar']) && $_POST['guardar'] == 'Guardar'){
  49.     unset($archivo);
  50.     unset($_SESSION['archivo']);
  51. }
  52. ?>
  53.  
  54. <form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST">
  55.     <p>URL: <input type="text" name="archivo" value="" size="50" />
  56.     <input type="submit" name="abrir" value="Abrir archivo" /></p>
  57. <?php echo "<p>".$msg."</p>"; ?>
  58.     <textarea name="archivo_editado" rows="25" cols="100">
  59. <?php
  60. // mostramos el contenido
  61. // del archivo abierto
  62. if($archivo){    
  63.     foreach (file($archivo) as $lineas){
  64.         echo htmlentities($lineas);
  65.     }
  66. }
  67. ?>
  68.     </textarea>
  69.     <p>
  70.     <input type="submit" name="editar" value="Editar archivo" />
  71.     <input type="submit" name="guardar" value="Guardar" />
  72.     <input type="reset" value="Restablecer" />
  73.     </p>
  74. </form>

quisiera me ayudaran a descubrir por donde estan los fallos aqui, que le sobre y que le falta

gracias de antemano
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #2 (permalink)  
Antiguo 09/10/2008, 09:12
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Pequeño error en script para editar archivos de texto

Hola rogertm,

El problema es que en la linea 63, asumes que el archivo esta abierto y existe, en ninguna parte de tu código tienes un control de flujo para ver si existe o no.

Te recomiendo re-escribas tu algoritmo para que tengas un control de flujo valido y puedas hacer lo que pides.

Saludos.
  #3 (permalink)  
Antiguo 09/10/2008, 09:16
Avatar de pateketrueke
Modernizr
 
Fecha de Ingreso: abril-2008
Ubicación: Mexihco-Tenochtitlan
Mensajes: 26.399
Antigüedad: 16 años, 7 meses
Puntos: 2534
Respuesta: Pequeño error en script para editar archivos de texto

que manera mas limpia de escribir PHP ... :P

pero, tu error... tal ves sea unsetear $archivo...

y no comprobar que existe antes de usarlo en el foreach

suerte!!
__________________
Y U NO RTFM? щ(ºдºщ)

No atiendo por MP nada que no sea personal.
  #4 (permalink)  
Antiguo 09/10/2008, 10:13
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 19 años, 3 meses
Puntos: 638
Respuesta: Pequeño error en script para editar archivos de texto

bueno, ya pase por eso (creo) ahora lo que hice fue meter el foreach dentro de la comprobacion, cuando defino $archivo:
Código php:
Ver original
  1. if(isset($_POST['abrir']) && $_POST['abrir'] == 'Abrir archivo'){
  2.     if (!empty($_POST['archivo'])){
  3.         $archivo = $_POST['archivo'];
  4.         $_SESSION['archivo'] = $archivo;
  5.         // comprobamos que existe el archivo
  6.         if (!file_exists($archivo) && !is_file($archivo)){
  7.             $msg = "El archivo no existe";
  8.         } else {
  9.             //$archivo_abierto = $archivo;
  10.             if($archivo){
  11.                 foreach (file($archivo) as $lineas){
  12.                     $codigo = htmlentities($lineas);
  13.                 }
  14.             }
  15.             $msg = "La ruta del archivo es <b>$archivo</b>";
  16.         }
  17.     } else {
  18.         $msg = "Debe introducir la diraccion del archivo a editar";
  19.     }
  20. }
y al menos no me da el error... pero como llamo a $codigo en el text area??? porque con echo no pincha

nomeacabodeaprenderlapalabrejaesahighlight
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #5 (permalink)  
Antiguo 09/10/2008, 10:20
Avatar de GatorV
$this->role('moderador');
 
Fecha de Ingreso: mayo-2006
Ubicación: /home/ams/
Mensajes: 38.567
Antigüedad: 18 años, 6 meses
Puntos: 2135
Respuesta: Pequeño error en script para editar archivos de texto

El problema es tu ciclo, por cada vuelta sobreescribes el valor de $codigo, tienes que agregar usando .= en tu foreach.

Saludos.
  #6 (permalink)  
Antiguo 09/10/2008, 10:45
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 19 años, 3 meses
Puntos: 638
Respuesta: Pequeño error en script para editar archivos de texto

Resuelto... ademas le meti otro foreach cuando por fin se puede escribir y editar el archivo, y redefino $codigo, porque si no no me volvia a mostrar el contenido del archivo una vez editado y asi lo puedes ir editando cuantas veces quieras y guardarlo una vez terminado todo, al final quedo todo asi:

Código php:
Ver original
  1. <?php
  2. if(!isset($_SESSION)){
  3.     session_start();
  4. }
  5.  
  6. // comprobamos si el formulario
  7. // ha sido enviado correctamente
  8. if(isset($_POST['abrir']) && $_POST['abrir'] == 'Abrir archivo'){
  9.     if (!empty($_POST['archivo'])){
  10.         $archivo = $_POST['archivo'];
  11.         $_SESSION['archivo'] = $archivo;
  12.         // comprobamos que existe el archivo
  13.         if (!file_exists($archivo) && !is_file($archivo)){
  14.             $msg = "El archivo no existe";
  15.         } else {
  16.             //$archivo_abierto = $archivo;
  17.             if($archivo){
  18.                 foreach (file($archivo) as $lineas){
  19.                     $codigo .= htmlentities($lineas);
  20.                 }
  21.             }
  22.             $msg = "La ruta del archivo es <b>$archivo</b>";
  23.         }
  24.     } else {
  25.         $msg = "Debe introducir la diraccion del archivo a editar";
  26.     }
  27. }
  28.  
  29. // editamos el archivo abierto
  30. if(isset($_POST['editar']) && $_POST['editar'] == 'Editar archivo'){
  31.     $archivo = $_SESSION['archivo'];
  32.     $archivo_editado = $_POST['archivo_editado'];
  33.     if(is_writable($archivo)){
  34.         if(!$gestor = fopen($archivo, 'w')){
  35.             $msg = "No se puede abrir el archivo $archivo";
  36.             exit;
  37.         }
  38.         // editamos el archivo
  39.         if(fwrite($gestor, html_entity_decode($archivo_editado)) === false){
  40.             $msg = "No se puede escribir en el archivo $archivo";
  41.         }
  42.         // Exito...!
  43.         $msg = "El archivo $archivo se edito con exito";
  44.         if($archivo){
  45.             foreach (file($archivo) as $lineas){
  46.                 $codigo .= htmlentities($lineas);
  47.             }
  48.         }
  49.         fclose($gestor);
  50.     }else{
  51.         $msg = "No se peude escribir en el archivo $archivo_editado";
  52.     }
  53. }
  54.  
  55. // guardamos el archivo
  56. // y destruimos todas las variables
  57. if(isset($_POST['guardar']) && $_POST['guardar'] == 'Guardar'){
  58.     unset($archivo);
  59.     unset($_SESSION['archivo']);
  60. }
  61. ?>
  62.  
  63. <form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST">
  64.     <p>URL: <input type="text" name="archivo" value="" size="50" />
  65.     <input type="submit" name="abrir" value="Abrir archivo" /></p>
  66. <?php echo "<p>".$msg."</p>"; ?>
  67.     <textarea name="archivo_editado" rows="25" cols="100">
  68. <?php
  69. // mostramos el codigo
  70. // o el texto del archivo a editar
  71. echo $codigo;
  72. ?>
  73.     </textarea>
  74.     <p>
  75.     <input type="submit" name="editar" value="Editar archivo" />
  76.     <input type="submit" name="guardar" value="Guardar" />
  77.     <input type="reset" value="Restablecer" />
  78.     </p>
  79. </form>

gracias milllll
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #7 (permalink)  
Antiguo 09/10/2008, 11:22
okram
Invitado
 
Mensajes: n/a
Puntos:
Respuesta: Pequeño error en script para editar archivos de texto

No entiendo porqué usas file() para partir tu archivo en líneas ycrear un ciclo paracada una de ellas si después vas a juntar todo nuevamente en la variable $codigo. Me refiero a esta parte:

Código php:
Ver original
  1. if($archivo){
  2.     foreach (file($archivo) as $lineas){
  3.         $codigo .= htmlentities($lineas);
  4.     }
  5. }
Si puedes usar en vez file_get_contents():

Código php:
Ver original
  1. if($archivo){
  2.     $codigo = htmlentities(file_get_contents($archivo));
  3. }

Igual en la línea 44.

Saludos,
  #8 (permalink)  
Antiguo 09/10/2008, 11:37
Avatar de rogertm
Mod->Cuba
 
Fecha de Ingreso: julio-2005
Ubicación: /home/Cuba/Habana/rogertm/
Mensajes: 2.922
Antigüedad: 19 años, 3 meses
Puntos: 638
Respuesta: Pequeño error en script para editar archivos de texto

Gracias Okram... tienes toda la razon...
Cita:
No te acostaras sin aprender algo nuevo...
rogertm
__________________
Friki y Blogger por Cuenta Propia:213
Twenty'em: Theming is Prose
  #9 (permalink)  
Antiguo 10/11/2008, 20:19
Avatar de yoni-jaa  
Fecha de Ingreso: agosto-2008
Mensajes: 8
Antigüedad: 16 años, 3 meses
Puntos: 0
Respuesta: Pequeño error en script para editar archivos de texto

Muy bien tu script Funciona pero no guarda por favor areclalo para que huarde el archivo
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

SíEste tema le ha gustado a 1 personas




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