Blog de programación, errores, soluciones

Chose Language:
Author: Admin/Publisher |not checked

Creando archivos con PHP

Veremos como crear archivos en PHP de diferentes modos. A continuación dejo una lista del contenido en esta entrada.

contenido:

Introducción

En PHP hay 2 maneras de crear archivos. La primera es la que abrimos el archivo y lo cerramos lugo como en muchos otros lenguajes y otra es directamente que lo haga con otra función de PHP.

Veamos la Primera, el uso de fopen().

Creando el archivo con fopen()

Aunque en este post utilizaremos la función fopen de PHP para crear el archivo, tenga en cuenta que esta función la podemos utilizar para leer el archivo sin hacerle ninguna modificación dependiendo de los parámetros que se le pasen.

la sintaxis de fopen es la siguiente:

Sintaxis
 fopen ( string $filename , string $mode [, bool $use_include_path = FALSE [, resource $context ]] ) : resource

$filename es el archivo que se abrirá por ejemplo «/var/www/html» en un servidor windows deberemos escapar las barras invertidas "c:\\ micarpeta\\miarchivo" agregandole una \ delante de la otra

El parametro $mode es el modo en que se abrira r(read) es el modo de lectura y w(write) de escritura. El parámetro mode especifica el tipo de acceso que se necesita para el flujo. Esto no quiere decir que ya abierto lo esté leyendo o ya lo varamos a escribir, para ello necesitamos otras funciones como fread() o fwrite()

Abajo están los distintos modos disponibles:

modeDescripción
‘r’ Apertura para sólo lectura; coloca el puntero al fichero al principio del fichero.
‘r+’ Apertura para lectura y escritura; coloca el puntero al fichero al principio del fichero.
‘w’ Apertura para sólo escritura; coloca el puntero al fichero al principio del fichero y trunca el fichero a longitud cero. Si el fichero no existe se intenta crear.
‘w+’ Apertura para lectura y escritura; coloca el puntero al fichero al principio del fichero y trunca el fichero a longitud cero. Si el fichero no existe se intenta crear.
‘a’ Apertura para sólo escritura; coloca el puntero del fichero al final del mismo. Si el fichero no existe, se intenta crear. En este modo, fseek() solamente afecta a la posición de lectura; las lecturas siempre son pospuestas.
‘a+’ Apertura para lectura y escritura; coloca el puntero del fichero al final del mismo. Si el fichero no existe, se intenta crear. En este modo, fseek() no tiene efecto, las escrituras siempre son pospuestas.
‘x’ Creación y apertura para sólo escritura; coloca el puntero del fichero al principio del mismo. Si el fichero ya existe, la llamada a fopen() fallará devolviendo FALSE y generando un error de nivel E_WARNING. Si el fichero no existe se intenta crear. Esto es equivalente a especificar las banderas O_EXCL|O_CREAT para la llamada al sistema de open(2) subyacente.
‘x+’ Creación y apertura para lectura y escritura; de otro modo tiene el mismo comportamiento que ‘x’.
‘c’ Abrir el fichero para sólo escritura. Si el fichero no existe, se crea. Si existe no es truncado (a diferencia de ‘w’), ni la llamada a esta función falla (como en el caso con ‘x’). El puntero al fichero se posiciona en el principio del fichero. Esto puede ser útil si se desea obtener un bloqueo asistido (véase flock()) antes de intentar modificar el fichero, ya que al usar ‘w’ se podría truncar el fichero antes de haber obtenido el bloqueo (si se desea truncar el fichero, se puede usar ftruncate() después de solicitar el bloqueo).
‘c+’ Abrir el fichero para lectura y escritura; de otro modo tiene el mismo comportamiento que ‘c’.
‘e’ Establecer la bandera ‘close-on-exec’ en el descriptor de fichero abierto. Disponible solamente en PHP compilado en sistemas que se ajustan a POSIX.1-2008.

Luego tiene 2 parámetros más que son opcionales. No los tocaré en este momento, tal vez en una futura revisión.

Leer un archivo con fread() en PHP

Bueno, hagamos algún ejemplo de lectura de un archivo primero.

Primero necesitaremos un archivo txt para leer por ejemplo 1.txt que contenga un texto cualquiera, en mi caso el texto es "hola a todos y gracias por preferirnos ".

En el archivo .php que leerá a 1.txt:

<?php
        $file = fopen("/var/www/html/LF_php/files/1.txt","r");
	echo fread($file,filesize("/var/www/html/LF_php/files/1.txt"));

Listo con esto ya deberíamos obtener el texto dentro de 1.txt recuerde que estoy pasando el path del archivo dentro de mí PC.

Escribir un archivo con fwrite()

Creemos algo mucho mas elaborado, Primero creemos un formulario que le diga que archivo leer y luego cargar su contenido en un textarea para ser modificado y guardado

Antes de empezar debo explicar que no subiré ningún archivo, simplemente quiero sacar la información del archivo para luego abrirlo con fopen() presentarlo en el textarea con fread() y luego de hacer los cambios escribirlo con fwrite().

La sintaxis de fwrite es la siguiente:

 fwrite ( resource $handle , string $string [, int $length ] ) : int

¿Ya pensó como hacerlo?

Esta es la manera en que yo lo hice, un archivo index.php para el formulario utilice un archivo read.php para leer el archivo y mostrarlo en el textarea y un archivo write.php para escribirlo.

index.php
<form enctype="multipart/form-data" action="read.php" method="post">
	<label>Plese select a file to read</label>
	<input type="file" name="f">
    <input type="submit" value="confirm">
</form>
read.php
<?php 

$filename = $_FILES['f']['name'];
$filepath = __DIR__."/files/".$filename;
//"/var/www/html/LF_php/files/1.txt"
$file = fopen($filepath,"r");
echo "<form action=\"write.php\" method=\"post\">";
echo "<div><label>Change file</label></div>";
echo "<div><textarea name=\"content\" style=\"width:350px;\">";
echo fread($file,filesize($filepath));
echo "</textarea ></div>";
echo "<input type=\"hidden\" name=\"filepath\" value=$filepath>";
echo "<input type=\"submit\" value=\"confirm\">";
echo "</form>";
fclose($file);
?>
write.php
<?php
error_reporting(E_ALL); 
ini_set("display_errors", 1); 
$content = $_POST['content'];
$file = fopen($_POST['filepath'],"w");
$writed = fwrite($file,$content);
if(!$writed){
    echo "<p>el archivo no se a podido escribir</p>";
}else{
    echo "<p>el archivo se escribio con exito</p>";
}
echo "<p><a href=\"index.php\">go back</a></p>";

en caso de necesitar los permisos dejo esto por aquí.

~
sudo chown -R www-data:www-data [tu ruta a la carpeta de trabajo]
sudo chmod -R g+rw [tu ruta a la carpeta de trabajo]

Bueno y como creamos los archivos pues al hacer fopen con modo «w+» si no existe lo intenta crear esa es una manera fácil de crear un archivo.

¿Cuando puedo llegar a utilizar fopen?

En algún momento podemos crear un sistema el cual cree archivos de nuestro propio proyecto así que no es difícil llegar a usar fopen para crear archivos.

Crear el archivo con file_put_contents

Otra manera fácil de crear un archivo con PHP es la función file_put_contents. Tal como su nombre lo dice, esta función es para poner datos dentro de un archivo.

 file_put_contents ( string $filename , mixed $data [, int $flags = 0 [, resource $context ]] ) : int

Aunque esta función es más compleja que fopen tiene sus ventajas en cierto punto. Por ejemplo, agregar los datos sin sobreescribir el archivo de una forma mucho más sencilla que fopen utilizando los flags.

flagDescripción
FILE_USE_INCLUDE_PATH Buscar filename en el directorio incluido. Véase include_path para más información.
FILE_APPEND Si el fichero filename ya existe, añade la información al fichero en vez de sobrescribirlo.
LOCK_EX Adquirir acceso exclusivo al fichero mientras se está ejecutando la escritura. En otras palabras, ocurre una llamada a flock() entre la llamada a fopen() y la llamada a fwrite(). Esto no es indéntico a una llamada a fopen() con el modo «x».
Category: php
Something wrong? If you found an error or mistake in the content you can contact me on Twitter | @luisg2249_luis.
Last 4 post in same category