PHP 8.3.4 Released!

curl_init

(PHP 4 >= 4.0.2, PHP 5, PHP 7, PHP 8)

curl_initInicia sesión cURL

Descripción

curl_init(?string $url = null): CurlHandle|false

Inicia una nueva sesión y devuelve el manipulador curl para el uso de las funciones curl_setopt(), curl_exec(), y curl_close().

Parámetros

url

Si se proporciona, se estabecerá en el valor de la opción CURLOPT_URL. Se puede establecer manualmente esta opción usando la función curl_setopt().

Nota:

El protocolo file es deshabilitado por cURL si open_basedir está establecido.

Valores devueltos

Devuelve un manipulador de cURL si todo fué bien, false si hay errores.

Historial de cambios

Versión Descripción
8.0.0 En caso de éxito, esta función devuelve una instancia CurlHandle ahora; anteriormente, se devolvía un resource.
8.0.0 url es ahora nullable.

Ejemplos

Ejemplo #1 Inicia una nueva sesión cURL y captura una página web

<?php
// Crea un nuevo recurso cURL
$ch = curl_init();

// Establece la URL y otras opciones apropiadas
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);

// Captura la URL y la envía al navegador
curl_exec($ch);

// Cierrar el recurso cURL y libera recursos del sistema
curl_close($ch);
?>

Ver también

add a note

User Contributed Notes 2 notes

up
2
NextgenThemes
11 months ago
This may be obvious, but:

Note that is MUCH faster to use use a single instance to make a series of curl requests rather than creating a new instance for each request.
up
-2
VictorWumble
4 months ago
NextgenThemes' note is applicable for very very limited situations. For completeness's sake, let's consider the following code snippet:

<?php

/*
Your localhost has a default Apache which simply returns "It works!"
*/

$repeatCount = 1000;

// begin section
// this section is slow

// call localhost, create new handle each time
$time = microtime(true);
foreach (
range(1, $repeatCount) as $ignored) {
$ch = curl_init("http://localhost");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
// do something with the response
unset($response);
curl_close($ch);
}
unset(
$ch);
$elapsed = microtime(true) - $time;
echo
"Recreate curl handle, time taken: " . $elapsed . "\n";

// end section

// begin section
// this section is much faster

// call localhost, but reuse the handle
$time = microtime(true);
$ch = curl_init("http://localhost");
foreach (
range(1, $repeatCount) as $ignored) {
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
$response = curl_exec($ch);
// do something with the response
unset($response);
}
curl_close($ch);
$elapsed = microtime(true) - $time;
echo
"Reuse curl handle, time taken: " . $elapsed . "\n";

// end section

/*
Example output:
Recreate curl handle, time taken: 11.289301872253
Reuse curl handle, time taken: 0.53790807723999
*/

?>

The above code supports the claim by NextgenThemes, however the "send curl requests in sequence" method in general is unnecessarily slow because:
- network transfer time (e.g. 100ms)
- remote processing time (e.g. 50ms)
- usually, no need to send requests in specific sequence

So, in practice, when you need to send multiple curl requests at the same time, just use the curl_multi_init method. Don't consider the "send curl requests in sequence" method unless you have very very specific/special needs.
To Top