PHP: curl() vrs file_get_contents()
Por estos dias me encuentro trabajando en una aplicación que utilizara Facebook y otras redes sociales como soporte de conección y muchas otras cosas más, dentro del trabajo con la GraphApi de Facebook y su sistema de autenticación Oauth (en especial, ya que es la red social que más utilizaremos) y también el uso de la API de bit.ly para acortar urls me he encontrado con un pequeño dilema acerca de la función correcta para recoger la respuesta de los servidores de dichas aplicaciones. Veamos un poco de cada una y luego una grafica de rendimientos:
curl()
Curl es mucho más de lo que generalmente utilizamos dentro de los desarrollos, no es una simple función, es una libreria que ha sido incluida dentro de PHP para la comunicación con otros servidores, esta nos ayuda de una forma sencilla y muy configurable el poder realizar llamados a páginas en especifico y poder utilizar los datos devueltos por el mismo… recordemos que en la actualidad muchos aplicaciónes y redes estan utilizando sistemas OAuth que practicamente se basan en los resultados de urls especificas (al igual que muchas otras Apis de aplicaciones). Link a Manual PHP
file_get_content()
Esta funcion practicamente nos devuelve en un string el contenido (respuesta de servidor) de una web o página en especifico. Su uso general también esta enfocado en obtener resultados de otros servidores y páginas, tanto internos como externos a nuestro directorio principal. Link a Manual PHP
Aqui lo interesante
He realizado una prueba, en la que mido el tiempo de ejecución (sin impresión) de estos escripts obteniendo el resultado al apuntar hacia www.google.com, esto incluido en un ciclo de 10 repeticiones. Les dejo la gráfica, donde notablemente podemos observar la eficiencia de la librería curl() en compraranción con file_get_contents().
Otra ventaja que no puedo dejar de mencionar sobre curl() es el hecho de poder conectarse a cualquier protocolo (http, https, ftp, gopher, telnet, dict, file y ldap), es algo que file_get_contents() no puede realizar, ya que como creo comprender no fue diseñado exactamente para el trabajo pesado en la obtención de datos externos.
Asi que… nos quedamos y seguiremos utilizando curl() cada vez que sea necesario. Es muy común utilizar funciones de una forma erronea, aunque esto nos resuelva los problemas y haga exactamente lo que necesitamos… el deber es dejar de hacerlo y utilizar la cosas exactamente como deben ser.
Saludos,










Precisamente yo también me encontré con las dos opciones que tu mencionaste arriba cuando estaba codificando y usando un API, y claro curl() me dio la solución, ya que yo requería conectarme vía https. Conclusión, curl() lo hace muy bien.
Ve pues, ta chilero tu blog colocho!!
Me dan ganas de regresar a bloggear por estos días, a ver si me animo. Aparte, lo ce curl, me parece genial, yo uso muco el get_file_contents y la verdad es que me parece que si ya está algo pasado de moda.
@attakinsky: Se le agrade su comentario y lo de chilero XD …
Igual yo utiliza file_get_contents() todo el tiempo, hasta que en este proyecto me ha tocado que tener mas cuidado con todo y me meti en ese dilema.
Buena onda
@abner:
Excelente, asi es como uno aprende poco a poco de las cosas, con cada proyecto aprendes algo bueno.
Saludos abner