Comunidad de diseño web y desarrollo en internet online

Duda sobre el uso de file_get_contents

Citar            
MensajeEscrito el 19 Oct 2011 12:47 am
¿Cuando usas file_get_contents('arc.txt',null,null,20,14); solo lee los bits de esos caracteres o lee y carga todo el archivo?, es decir que si el archivo pesa 5megas, carga los 5 completos o solo carga la parte correspondiente al número de caracteregs solicitados.

Por sgb004

Claber

148 de clabLevel

1 tutorial

Genero:Masculino  

soy sgb

safari
Citar            
MensajeEscrito el 19 Oct 2011 01:47 pm
pues como lo usas no no va a cargar los 5mb , segun tengo entendido el file_get_contents es la funcion mas optimizada que hay en php

file_get_contents() is the preferred way to read the contents of a file into a string. It will use memory mapping techniques if supported by your OS to enhance performance.

file_get_contents () es la mejor forma de leer el contenido de un archivo en una cadena. Se utilizan técnicas de asignación de memoria compatible con su sistema operativo para mejorar el rendimiento.

pero bueno podrias hacer un pequeño benchmark

en intentar leer algun archivo de cientos de megas como un video y ver cuanto tardo en sacar un par de bytes

Código PHP :

function microtime_float()
{
list($useg, $seg) = explode(" ", microtime());
return ((float)$useg + (float)$seg);
}

$tiempo_inicio = microtime_float();

// leemos el video
echo strlen(file_get_contents('naruto_shipudden.avi',null,null,20,10));

$tiempo_fin = microtime_float();
$tiempo = $tiempo_fin - $tiempo_inicio;

echo "Tiempo empleado: " . ($tiempo_fin - $tiempo_inicio); 


ahora una vez obtenido el datos hacemos otro benchmark pero sin especificar los parametros del file_get_contents

Código PHP :

echo strlen(file_get_contents('naruto_shipudden.avi'));

bueno nos comentas como te fue y que tiempos obtuviste :)

Por tuadmin

Claber

598 de clabLevel



Genero:Masculino  

firefox
Citar            
MensajeEscrito el 19 Oct 2011 06:18 pm
Gracias al código de tuadmin, pude realizar una pruebas teniendo los siguientes resultados:

Con un vídeo de 1.56 GB.

Obteniendo los 10 primeros caracteres después del carácter 20:

10Tiempo empleado: 0.0009000301361084

Obteniendo todo el archivo:

Devuelve un error de memoria.

Con un vídeo de 106MB.

Obteniendo los 10 primeros caracteres después del carácter 20:

10Tiempo empleado: 0.00048494338989258

Obteniendo todo el archivo:

111848562Tiempo empleado: 2.9983398914337

Sin embargo en la practica no solo queremos obtener la cantidad de caracteres, si no el contenido de estos, así que modificando el código y quitando strlen

Código PHP :

echo file_get_contents('DeathNote001.avi',null,null,20,10); 


Con el vídeo de 106MB.

Obteniendo los 10 primeros caracteres después del carácter 20:

hdrlavih8Tiempo empleado: 0.00057792663574219

Obteniendo todo el archivo:

Devuelve un error de memoria.

Modificando de nuevo el código, para obtener los 10 últimos caracteres del archivo:

Código PHP :

echo file_get_contents('DeathNote001.avi',null,null,111848552,10); 


111848552 es el número que se obtuvo del total de caracteres del archivo de 106MB, anteriormente visto.

Obteniendo los 10 últimos caracteres del archivo:

Ë•¢Tiempo empleado: 0.00065398216247559

Conclusión:

file_get_contents solo extrae la parte de caracteres que le solicitamos sin importar si es al principio o final, se tarará aproximadamente el mismo tiempo, si el número caracteres es el mismo.

En las pruebas anteriores solo se obtuvieron 10 caracteres de aproximadamente el principio (carácter 20) y del final obteniendo un promedio por los dos archivos: 0.00065422058105469

Si bien la velocidad depende de el número de caracteres a obtener y el tamaño del archivo, puedo decir que file_get_contents es excelente para obtener una parte de un archivo, de forma rápida y sin necesidad de cargar todo el contenido del archivo.

También hay que considerar que estas pruebas se realizaron en WampServer, por lo que faltaría probar el tiempo de respuesta en un servidor de un webhosting para comprobar de manera 100% efectiva esta función de PHP.

Por sgb004

Claber

148 de clabLevel

1 tutorial

Genero:Masculino  

soy sgb

firefox

 

Cristalab BabyBlue v4 + V4 © 2011 Cristalab
Powered by ClabEngines v4, HTML5, love and ponies.