Hoy vamos a resolver un ejercicio propuesto en PHP. Vamos a verificar si dos archivos son iguales tanto en tamaño como peso. El ejercicio dice así:
Realiza un programa que dados dos ficheros de texto, compruebe si el fichero 1 (fichero1.txt
) tiene el mismo tamaño que el fichero 2 (fichero2.txt
) y el mismo contenido.
Opciones:
- Tamaño igual y contenido igual.
- Tamaño igual y contenido diferente.
- Tamaño diferente y, por lo tanto, contenido diferente.
Toda la información se guardará en un fichero de texto llamado resultado.txt
.
Veamos entonces cómo resolver este ejercicio en PHP.
Explicación del algoritmo
Lo que vamos a hacer es obtener el contenido de ambos archivos, así como el tamaño.
Para obtener todo el contenido vamos a usar file_get_contents y para calcular el tamaño usaremos la función strlen.
Ya después haremos simples comparaciones para los 3 posibles escenarios, y vamos a escribir el resultado en el archivo de texto usando la función file_put_contents.
Entonces básicamente será leer el contenido, comparar y escribir el resultado.
Obteniendo tamaño y contenido
Primero obtenemos el contenido y el tamaño del mismo:
<?php
$fichero1 = "fichero1.txt";
$fichero2 = "fichero2.txt";
$contenidoFichero1 = file_get_contents($fichero1);
$contenidoFichero2 = file_get_contents($fichero2);
$tamanioFichero1 = strlen($contenidoFichero1);
$tamanioFichero2 = strlen($contenidoFichero2);
Comparando
Ahora hacemos un if para evaluar:
<?php
$resultado = "";
if ($tamanioFichero1 === $tamanioFichero2 && $contenidoFichero1 === $contenidoFichero2) {
$resultado = "TAMAÑO IGUAL\nTamaño: " . $tamanioFichero1 . " bytes\nCONTENIDO IGUAL\nContenido 1 y 2: " . $contenidoFichero1;
} else if ($tamanioFichero1 === $tamanioFichero2 && $contenidoFichero1 !== $contenidoFichero2) {
$resultado = "TAMAÑO IGUAL\nTamaño: " . $tamanioFichero1 . " bytes\nCONTENIDO DIFERENTE\nContenido 1: " . $contenidoFichero1 . "\nContenido 2: " . $contenidoFichero2;
} else {
$resultado = "TAMAÑO DIFERENTE\nTamaño: " . $tamanioFichero1 . "bytes - " . $tamanioFichero2 . "bytes\nCONTENIDO DIFERENTE\nContenido 1: " . $contenidoFichero1 . "\nContenido 2: " . $contenidoFichero2;
}
Lo que resta es escribir el resultado en el archivo de salida.
Poniendo todo junto
Veamos el código completo en PHP sobre este ejercicio que acabamos de resolver. Queda así:
<?php
$fichero1 = "fichero1.txt";
$fichero2 = "fichero2.txt";
$contenidoFichero1 = file_get_contents($fichero1);
$contenidoFichero2 = file_get_contents($fichero2);
$tamanioFichero1 = strlen($contenidoFichero1);
$tamanioFichero2 = strlen($contenidoFichero2);
$resultado = "";
if ($tamanioFichero1 === $tamanioFichero2 && $contenidoFichero1 === $contenidoFichero2) {
$resultado = "TAMAÑO IGUAL\nTamaño: " . $tamanioFichero1 . " bytes\nCONTENIDO IGUAL\nContenido 1 y 2: " . $contenidoFichero1;
} else if ($tamanioFichero1 === $tamanioFichero2 && $contenidoFichero1 !== $contenidoFichero2) {
$resultado = "TAMAÑO IGUAL\nTamaño: " . $tamanioFichero1 . " bytes\nCONTENIDO DIFERENTE\nContenido 1: " . $contenidoFichero1 . "\nContenido 2: " . $contenidoFichero2;
} else {
$resultado = "TAMAÑO DIFERENTE\nTamaño: " . $tamanioFichero1 . "bytes - " . $tamanioFichero2 . "bytes\nCONTENIDO DIFERENTE\nContenido 1: " . $contenidoFichero1 . "\nContenido 2: " . $contenidoFichero2;
}
# Escribir el resultado en el archivo de salida
file_put_contents("resultado.txt", $resultado);
El resultado va a cambiar dependiendo de los ficheros de entrada, pero lo he probado y funciona perfectamente. Aquí te muestro un ejemplo cuando los ficheros tienen el mismo peso pero distinto contenido:
También te invito a leer más sobre PHP en el blog de Parzibyte.