Foros del Web

Foros del Web (http://www.forosdelweb.com/)
-   PHP (http://www.forosdelweb.com/f18/)
-   -   Pequeño error en script para editar archivos de texto (http://www.forosdelweb.com/f18/pequeno-error-script-para-editar-archivos-texto-632645/)

rogertm 09/10/2008 08:01

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

GatorV 09/10/2008 09:12

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.

pateketrueke 09/10/2008 09:16

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!!

rogertm 09/10/2008 10:13

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

GatorV 09/10/2008 10:20

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.

rogertm 09/10/2008 10:45

Respuesta: Pequeño error en script para editar archivos de texto
 
Resuelto... :aplauso: 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

okram 09/10/2008 11:22

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, :adios:

rogertm 09/10/2008 11:37

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


yoni-jaa 10/11/2008 20:19

Respuesta: Pequeño error en script para editar archivos de texto
 
Muy bien:aplauso: tu script Funciona pero no guarda por favor areclalo para que huarde el archivo:si:


La zona horaria es GMT -6. Ahora son las 22:06.

Desarrollado por vBulletin® Versión 3.8.7
Derechos de Autor ©2000 - 2026, Jelsoft Enterprises Ltd.