2010-02-19 18 views
12

Estoy haciendo una aplicación web en PHP y quiero leer contenido de otro dominio. Parece que mis principales opciones son fopen y curl.¿Cuáles son las mayores diferencias entre fopen y curl?

¿Cuáles son las principales diferencias entre estos dos métodos, especialmente con respecto a la seguridad y las opciones disponibles?

¿Importa si la url es un sitio http o https?

+0

La cuestión no es tanto lo que 'fopen' puede hacer, sino lo que pueden hacer los wrappers HTTP/HTTPS. Compruebe http://de.php.net/manual/en/wrappers.http.php – Gordon

Respuesta

16

Curl utiliza una biblioteca externa y tiene mucho más poder para personalizar la solicitud: encabezados personalizados, generación de solicitud POST, carga de archivos. Todo lo que necesitas debo decir.

Fopen se limita a solo hacer una solicitud GET de la url sin ninguna otra personalización.

En cuanto a la seguridad, CURL no está influenciada por la configuración de seguridad en PHP (como fopen forbidden of remote URLS y tal).

Las dos posibilidades le devuelven datos que puede utilizar de todas las formas que desee. Si realiza un agujero de seguridad en su proyecto, después de todo, es su culpa después de obtener los datos.

Además, no estoy muy seguro, pero creo que fopen no puede manejar las conexiones SSL (https). Tanto fopen como CURL son compatibles con SSL (como notó Andy Shellam en un comentario a continuación).

+2

fopen no es compatible con HTTPS siempre que haya compilado PHP contra OpenSSL. –

+0

¡Gracias por la nota, Andy! Ahora sé una cosa más sobre PHP :) – bisko

+0

También es posible hacer una solicitud POST con fopen. Por ejemplo, http://wezfurlong.org/blog/2006/nov/http-post-from-php-without-curl/ En mi opinión, curl se usa donde la gente quiere rodear la configuración de seguridad PHP, yo personalmente he usado fopen solo y sin problemas hasta el momento. –

2

Consulte What are the important differences between using fopen($url) and curl in PHP? para conocer algunas configuraciones de seguridad que afectan a fopen, es decir, allow_url_include.

Además, tenga en cuenta que con curl si activa CURLOPT_FOLLOWLOCATION, curl sigue los redireccionamientos a file: // para recuperar datos (aún sujeto a open_basedir). Los redireccionamientos a otros esquemas como ftp: // podrían ser peores (no se han probado ftp: //). Sin ese setopt curl no sigue redirecciones en absoluto. fopen parece funcionar con 302 por defecto, pero solo http: // -> http: // y no http: // -> file: //.

Cuestiones relacionadas