Taller > PHP > Manejo de archivos
Copiar Archivos en PHP
Copiar archivos es una operación común en aplicaciones web que manipulan archivos, como cuando se quiere duplicar o hacer un respaldo de un archivo. PHP ofrece varias formas de copiar archivos, que van desde leer y escribir manualmente cada línea hasta el uso de funciones integradas que simplifican todo el proceso.
Método 1: Copiar un archivo línea por línea
El primer método implica leer un archivo línea por línea y escribir esas líneas en un nuevo archivo. Este método es útil si deseas procesar o modificar cada línea antes de copiarla.
Sintaxis básica:
fopen() se usa para abrir los archivos fuente y destino.
fgets() lee una línea del archivo fuente.
fputs() escribe la línea en el archivo de destino.
Ejemplo: Leer y escribir archivo línea por línea
<?php
$archivo_origen = fopen("archivo_fuente.txt", "r");
$archivo_destino = fopen("archivo_destino.txt", "w");
if ($archivo_origen && $archivo_destino) {
while (!feof($archivo_origen)) {
$linea = fgets($archivo_origen);
fputs($archivo_destino, $linea);
}
fclose($archivo_origen);
fclose($archivo_destino);
echo "Archivo copiado con éxito.";
} else {
echo "No se pudo abrir uno de los archivos.";
}
?>
Explicación:
fopen("archivo_fuente.txt", "r"): Abre el archivo fuente en modo de solo lectura.
fgets($archivo_origen): Lee una línea del archivo fuente.
fputs($archivo_destino, $linea): Escribe esa línea en el archivo de destino.
feof($archivo_origen): Verifica si se ha llegado al final del archivo fuente.
Este enfoque es útil cuando deseas realizar algún procesamiento en el contenido del archivo mientras lo copias.
Método 2: Usar file_get_contents() y file_put_contents()
El segundo método es mucho más simple y rápido. PHP proporciona dos funciones útiles: file_get_contents() para leer todo el contenido de un archivo en una cadena, y file_put_contents() para escribir esa cadena en un nuevo archivo.
Sintaxis básica:
file_get_contents(): Lee todo el contenido de un archivo y lo almacena en una variable.
file_put_contents(): Escribe una cadena en un archivo.
Ejemplo: Copiar un archivo con file_get_contents() y file_put_contents()
<?php
$archivo_origen = "archivo_fuente.txt";
$archivo_destino = "archivo_destino.txt";
$contenido = file_get_contents($archivo_origen);
file_put_contents($archivo_destino, $contenido);
echo "Archivo copiado con éxito.";
?>
Explicación:
file_get_contents($archivo_origen): Lee todo el contenido del archivo archivo_fuente.txt y lo almacena en la variable $contenido.
file_put_contents($archivo_destino, $contenido): Escribe el contenido leído en archivo_destino.txt.
Este método es ideal cuando no necesitas procesar cada línea individualmente, y simplemente deseas copiar el contenido completo de un archivo a otro.
Método 3: Usar la función copy()
El tercer método es el más directo y eficiente. PHP ofrece una función específica para copiar archivos: copy(). Esta función toma el archivo fuente y crea una copia en el destino especificado.
Sintaxis:
copy(string $from, string $to, ?resource $context = null): bool
$from: Ruta del archivo fuente.
$to: Ruta del archivo de destino.
$context (opcional): Un contexto de flujo que puede modificar el comportamiento de la función.
Ejemplo: Copiar un archivo con copy()
<?php
$archivo_origen = "archivo_fuente.txt";
$archivo_destino = "archivo_destino.txt";
if (copy($archivo_origen, $archivo_destino)) {
echo "Archivo copiado con éxito.";
} else {
echo "No se pudo copiar el archivo.";
}
?>
Explicación:
copy($archivo_origen, $archivo_destino): Copia todo el archivo archivo_fuente.txt al archivo archivo_destino.txt. Si la copia es exitosa, la función devuelve true.
Este método es ideal cuando simplemente necesitas copiar un archivo sin ningún procesamiento adicional. Es rápido, eficiente y fácil de usar.
Comparación de los métodos
| Método | Ventajas | Desventajas |
|---|---|---|
| Línea por línea | Control completo sobre el proceso de copia | Más lento para archivos grandes |
| file_get_contents() y file_put_contents() | Rápido y fácil para archivos pequeños y medianos | Usa más memoria; no es adecuado para archivos grandes |
| copy() | Método más sencillo y directo | No permite manipular el contenido del archivo |