Editando archivos de texto de forma remota, usando PHP.
Pienso que puede ser útil tener bajo la manga alguna manera de editar archivos que tengamos en nuestro servidor, de forma remota. Por eso me di a la tarea de preparar este script, y aunque no me salio de primer momento, lo pude resolver gracias a los asiduos al foro 18 en Foros del Web y aquí se los muestro a ustedes hoy.
Introducción:
En nuestro único archivo (editor.php), tendremos un formulario dividido en dos partes.
La primera constará de un campo de texto donde introduciremos la dirección del fichero que queremos editar y un botón que nos servirá para abrir el fichero como tal.
La segunda estará conformada por un área de texto donde mostraremos el contenido del archivo a modificar, un par de botones del tipo submit: Editar y Guardar y otro reset, para restablecer los cambios en caso de algún fallo humano.
Como podrán notar, nuestro formulario tiene hasta tres botones del tipo submit, es por eso que necesitamos guardar una variable en una sesión y así asegurarnos que esté presente en cada parte del script.
Codigo PHP:
<?php
if(!isset($_SESSION)){
session_start();
}
// comprobamos si el formulario
// ha sido enviado correctamente
if(isset($_POST['abrir']) && $_POST['abrir'] == 'Abrir archivo'){
if (!empty($_POST['archivo'])){
$archivo = $_POST['archivo'];
// creamos la variable de sesion
$_SESSION['archivo'] = $archivo;
// comprobamos que existe el archivo
if (!file_exists($archivo) && !is_file($archivo)){
$msg = "El archivo no existe";
} else {
if($archivo){
// mediante file_get_contents
// mostramos el contenido del archivo en forma de cadena
$codigo = htmlentities(file_get_contents($archivo));
}
$msg = "La ruta del archivo es <b>$archivo</b>";
}
} else {
$msg = "Debe introducir la diraccion del archivo a editar";
}
}
// vamos a editar el archivo
if(isset($_POST['editar']) && $_POST['editar'] == 'Editar archivo'){
$archivo = $_SESSION['archivo'];
$archivo_editado = $_POST['archivo_editado'];
// comprobamos si podemos escribir en el
if(is_writable($archivo)){
if(!$gestor = fopen($archivo, 'w')){
$msg = "No se puede abrir el archivo <b>$archivo</b>";
exit;
}
// escribimos en el archivo
// el contenido de $archivo_editado
if(fwrite($gestor, html_entity_decode($archivo_editado)) === false){
$msg = "No se puede escribir en el archivo $archivo";
}
// Exito...!
$msg = "El archivo <b>$archivo</b> se edito con exito";
if($archivo){
// otra vez mostramos el contenido del archivo
$codigo = htmlentities(file_get_contents($archivo));
}
fclose($gestor);
}else{
$msg = "No se peude escribir en el archivo <b>$archivo</b>";
}
}
// guardamos el archivo
// y destruimos todas las variables
if(isset($_POST['guardar']) && $_POST['guardar'] == 'Guardar'){
unset($archivo);
unset($_SESSION['archivo']);
}
?>
<!-- el formulario -->
<form action="<?php $_SERVER['PHP_SELF']; ?>" method="POST">
<p>URL: <input type="text" name="archivo" value="" size="50" />
<input type="submit" name="abrir" value="Abrir archivo" /></p>
<?php echo "<p>".$msg."</p>"; ?>
<textarea name="archivo_editado" rows="25" cols="100">
<?php
// mostramos el codigo
// o el texto del archivo a editar
echo $codigo;
?>
</textarea>
<p>
<input type="submit" name="editar" value="Editar archivo" />
<input type="submit" name="guardar" value="Guardar" />
<input type="reset" value="Restablecer" />
</p>
</form>
Algunas anotaciones y fuentes:
En primer lugar, este pedazo de programa lo cree con la idea de editar archivos de extensión .php o .html, por eso el uso de las funciones de cadenas htmlentities() y html_entity_decode(), para convertir todas las entidades html a sus caracteres correspondientes y viceversa, pero igual se puede escribir en ficheros de texto .txt.
También decirles que crear este tipo de algoritmo no es tan complicado, pues con solo ver los ejemplos que vienen en el Manual de PHP podemos crear los nuestros propios. En este ejemplo me guié fundamentalmente en los de las funciones de sistema de archivos: fopen(), file_get_contents() y fwrite(), además de file_exists(), is_file(), is_writable() y fclose().
Nota: Éste método que les acabo de mostrar solo funciona en un servidor local (que es donde lo pude probar). Para documentarse correctamente sobre este tema lea las Funciones del Sistema de Archivos en el Manual de PHP.
Nota Importante: Por cuestiones de seguridad, nunca deje este archivo al alcance de los usuarios.
Conclusiones:
Pienso que se puede hacer mucho más con este sencillo ejemplo que les acabo de mostrar aquí, como verificar las extensiones de los ficheros que vamos a editar, o crear la opción de ver el archivo una vez editado. ¿Algo mas que se te ocurra?
Como siempre espero esto sea útil a alguien, pues lo creé con tres objetivos, uno entretenerme (en estos días tengo poco trabajo xD), segundo tenerlo para mi, pues en algún momento me hará falta algo así y tercero y no menos importante, compartirlo con ustedes. Entonces, opiniones, sugerencias y alguna critiquilla serán siempre bien recibidos.
Saludos y Suerte.
Post relacionados
4 Comentarios »
RSS feed para comentarios en este post. TrackBack URL



Interesante. Pero no entiendo cual es la diferencia entre el botón editar y el guardar, ya que una vez abierto el archivo basta que presione editar y los cambios quedan almacenados.
Saludos de Chile.
Hola @Luis, la diferencia está en que con el botón Guardar cierras el archivo y eliminas la variable de sesión $_SESSION['archivo'] que se usa en el script
Saludos
andaba buscando esto, es excelente, gracias por compartirlo
cuando guardo el archivo en las partes de “” me las transforma en \”\” porque sucede esto ? ayuda porfa