3 millones en foros del web

Registrarte Políticas Wiki 120segs Ayuda Iniciar sesion

Avisos

Retroceder   Foros del Web > Programación para sitios web > PHP
Respuesta
 
Herramientas Desplegado
Antiguo 09-oct-2008, 09:01   #1 (permalink)
Colaborador
rogertm (Reg: julio-2005)
 
1.528 Mensajes
Ubicación: 23.133355, -82.353773
rogertm está desconectado
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 originalCopiar
  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
__________________
mi twitter @roger213tm
Kilómetro Cero
Bloggers Cuba
  Responder Citando
Antiguo 09-oct-2008, 10:12   #2 (permalink)
$this->role('moderador');
GatorV (Reg: mayo-2006)
 
26.480 Mensajes
Ubicación: /home/ags/
GatorV está desconectado
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.
__________________
Blog Web
  Responder Citando
Antiguo 09-oct-2008, 10:16   #3 (permalink)
Colaborador
pateketrueke (Reg: abril-2008)
 
7.880 Mensajes
Ubicación: Mexihco-Tenochtitlan
Enviar un mensaje por MSN a pateketrueke Enviar un mensaje por Skype™ a pateketrueke pateketrueke está desconectado
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!!
__________________
¿Buscas un framework Amigable para PHP?
→ Como contactar conmigo
  Responder Citando
Antiguo 09-oct-2008, 11:13   #4 (permalink)
Colaborador
rogertm (Reg: julio-2005)
 
1.528 Mensajes
Ubicación: 23.133355, -82.353773
rogertm está desconectado
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 originalCopiar
  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
__________________
mi twitter @roger213tm
Kilómetro Cero
Bloggers Cuba
  Responder Citando
Antiguo 09-oct-2008, 11:20   #5 (permalink)
$this->role('moderador');
GatorV (Reg: mayo-2006)
 
26.480 Mensajes
Ubicación: /home/ags/
GatorV está desconectado
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.
__________________
Blog Web
  Responder Citando
Antiguo 09-oct-2008, 11:45   #6 (permalink)
Colaborador
rogertm (Reg: julio-2005)
 
1.528 Mensajes
Ubicación: 23.133355, -82.353773
rogertm está desconectado
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 originalCopiar
  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
__________________
mi twitter @roger213tm
Kilómetro Cero
Bloggers Cuba
  Responder Citando
Antiguo 09-oct-2008, 12:22   #7 (permalink)
Colaborador
okram (Reg: abril-2005)
 
3.398 Mensajes
Ubicación: *
okram está desconectado
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 originalCopiar
  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 originalCopiar
  1. if($archivo){
  2.     $codigo = htmlentities(file_get_contents($archivo));
  3. }

Igual en la línea 44.

Saludos,
  Responder Citando
Antiguo 09-oct-2008, 12:37   #8 (permalink)
Colaborador
rogertm (Reg: julio-2005)
 
1.528 Mensajes
Ubicación: 23.133355, -82.353773
rogertm está desconectado
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
__________________
mi twitter @roger213tm
Kilómetro Cero
Bloggers Cuba
  Responder Citando
Antiguo 10-nov-2008, 20:19   #9 (permalink)
yoni-jaa (Reg: agosto-2008)
 
8 Mensajes
yoni-jaa está desconectado
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
  Responder Citando
Respuesta
Calificación: Calificación de Tema: 1 votos, 5,00 de promedio.
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.

Herramientas
Desplegado

Normas de Publicación
No puedes crear nuevos temas
No puedes responder temas
No puedes subir archivos adjuntos
No puedes editar tus mensajes

BB code está Activado
Caritas están Activado
[IMG] está Activado
Código HTML está Desactivado
Trackbacks está Desactivado
Pingbacks está Desactivado
Refbacks está Desactivado



La zona horaria es GMT -6. Ahora son las 10:28.
Políticas de Uso de Foros del Web


Message Board Statistics

SEO by vBSEO 3.3.2

1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104