Diferencia entre revisiones de «Plantilla:PHP/Formularios/accionesFicheros»

De WikiEducator
Saltar a: navegación, buscar
(Leer de un fichero)
(Escribir en un fichero)
Línea 101: Línea 101:
 
</source>
 
</source>
  
 +
*Vamos a hacer un ejercicio dónde si presionamos un botón mostramos el contenido del fichero
 +
*En la primera  versión lo hacemos todo sencillo seǵun hemos estudado
 +
<source lang=php>
 +
<?php
 +
$index = null;
 +
if ($_POST['submit']) {
 +
$index = file_get_contents("index.php");
 +
}
 +
?>
 +
<!DOCTYPE html>
 +
<html>
 +
    <head>
 +
        <meta charset="UTF-8">
 +
        <title></title>
 +
    </head>
 +
    <body>
 +
        <fieldset>
 +
            <legend>Presionar</legend>
 +
 +
            <form action="index.php" method ='POST'>
 +
                <input type="submit" value="Ver contenido" name="submit">
 +
            </form>
 +
            <?php
 +
            if (!is_null($index)
 +
              echo htmlspecialchars($index));
 +
            ?>
 +
        </fieldset>
 +
    </body>
 +
</html>
 +
</source>
 +
*Vemos que el resultado no es muy agradable a la vista
 +
[[Archivo:get_content_file_index1.png]]
 
====Escribir en un fichero ====
 
====Escribir en un fichero ====
 
<source lang=php>
 
<source lang=php>
 
fwrite($fichero, "texto para escribir");
 
fwrite($fichero, "texto para escribir");
 
</source>
 
</source>
 +
 
===Acceso a un directorio===
 
===Acceso a un directorio===
 
<source lang=php>
 
<source lang=php>

Revisión de 21:39 15 oct 2018

Acceso a un fichero

  • Son muchas las acciones que podemos hacer con los ficheros
http://php.net/manual/es/book.filesystem.php
Acciones típicas sobre un fichero
  • Vamos a verlas según nuestras necesidades
1.-Crear un fichero para escribir en él
  • Si no existe que se intenta crear
  • Si sí que existe:
    • Agregar cosas sin perder lo que había.
    • Borrar lo que hubiera crearlo para escribir en él.
2.-Abrir un fichero para leer
  • Si no existe dará un error
  • Si sí que existe lo abrirá para obtener bytes de él

(Comment.gif: En ambos casos obtendremos un recurso descriptor del fichero para operarar con él)



Abrir un fichero

  • Parar poder acceder a un fichero necesitamos tener una referencia a él (Tanto para escribir como para leer).

(Comment.gif: Recuerda que es el usuario apache el que ha de tener los permisos necesarios (leer(r),escribir (w), ejecutar (x))


 $archivo = fopen($nombre_fichero,$modo)
  • $archivo Va a ser la variable con la que vamos a poder gestionar el archvio. Será de tipo recurso, un objeto de una clase del sistema.
  • $nombre_fichero Es el nombre del fichero. Nos movemos en ruta respecto a la ubiciación del script que se está ejecutando. Podemos indicar también la ruta
 //Ruta absoluta
 $archivo = fopen('/var/www/html/log.txt',$modo);
 //Ruta relativa al directorio donde se encuentra el proyecto
 $archivo = fopen('log.txt',$modo);
  • $modo Es el modo de apertura (lectura, creación, añadir )· Hay varios modos
r => Lectura.
w => Escritura (Trunca el contenido).
a => append o añadir.
  • Una vez abierto vamos a ver cómo leer o escribir de/en él.


Parámetro
Acción
Descripción
r Lee un fichero desde el principio. Se abre el fichero sólo para leer.
Sitúa el cursor al principio del archivo.
Si el fichero no existe o no hay permisos de lectura retorno false.
r+ Abre el fichero para lectura y permite la escritura. Abre el archivo para lectura y escritura.
Sitúa el cursor o puntero al principio del archivo.
Si el fichero no existe o no hay permisos de lectura retorno false.
w Escribe un archivo y corta su contenido. Abre el fichero sólo para escribir.
Sitúa el puntero al principio y perdiéndose cualquier contenido que hubiera si existía y contenía datos.
Si el archivo no existe, intenta crearlo, retornando false si no ha podido.
w+ Escribe un archivo desde el principio, corta su contenido, y permite la lectura. Abre un archivo para lectura y escritura.
Sitúa el puntero al principio dejando eliminando el contenido del archivo si hubiera algo.
Si el archivo no existe, intenta crearlo.
a Abre el fichero en modo añadir . Abierto sólo en escritura.
Sitúa el puntero al final del archivo.
Si el archivo no existe, intenta crearlo.
a+ Abre el fichero en modo lectura y añadir . Se abre el archivo para lectura y escritura.
Sitúa el puntero al final del archivo.
Si el archivo no existe, intenta crearlo.

Leer de un fichero

  • Podemos realizar una lectura de su contenido por partes

String fread ($fichero, $leng);

  • Leemos de un fichero la longuitd en bytes que indique el segundo parámetro
  • No será algo habitual pero en alguna ocasión puede venir bien
  • Podemos obtener todo el contenido de un fichero.
  • Para este cometido tenemos dos funciones
array file($fichero)
  • la función file()Esta función devuelve el contenido del fichero como un array indexado de cada una de sus líneas.
string file_get_content($fichero).


Icon activity.jpg
usando la función file()

Crea un fichero con nombres en cada línea

María Ruiz
Mercedes Naranjo
Manuel Romero
Sara Rodríguez
Jorge Martínez
Eduarlo Laborda
Nieves Rodera
  • Usando file visualiza de cada nombre



  • la función file_get_contents() retorna el contenido del fichero como un string.
echo "<div class='fichero'>";
echo "<h2>Fichero index.php </h2>";
echo "<pre class=\"prettyprint\">".htmlspecialchars($index)."</pre>";
echo "<hr />";
echo "</div> ";
  • Vamos a hacer un ejercicio dónde si presionamos un botón mostramos el contenido del fichero
  • En la primera versión lo hacemos todo sencillo seǵun hemos estudado
<?php
$index = null;
if ($_POST['submit']) {
 $index = file_get_contents("index.php");
}
?>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <fieldset>
            <legend>Presionar</legend>
 
            <form action="index.php" method ='POST'>
                <input type="submit" value="Ver contenido" name="submit">
            </form>
            <?php
            if (!is_null($index)
               echo htmlspecialchars($index));
            ?>
        </fieldset>
    </body>
</html>
  • Vemos que el resultado no es muy agradable a la vista

Archivo:Get content file index1.png

Escribir en un fichero

fwrite($fichero, "texto para escribir");

Acceso a un directorio

<?php
 
 
$base = "/var/www/";
 
$dir = scandir($base);
 
var_dump($dir);
 
foreach ($dir as $directorio){
    if (is_dir("$base$directorio")){
        if ($directorio!="." && $directorio!=".."){
               $ficheros = scandir ($directorio);
               if (in_array("index.php", $ficheros)){
                   $txt .= "<h2><a href=$directorio/index.php>$directorio</a></h2>";
               }
        }
    }
}
 
 
 
?>
 
 
<!DOCTYPE html>
<!--
To change this license header, choose License Headers in Project Properties.
To change this template file, choose Tools | Templates
and open the template in the editor.
-->
<html>
    <head>
        <meta charset="UTF-8">
        <title></title>
    </head>
    <body>
        <?php
        echo $txt;
        ?>
    </body>
</html>