downloads | documentation | faq | getting help | mailing lists | licenses | wiki | reporting bugs | php.net sites | links | conferences | my php.net

search for in the

curl_init> <curl_exec
Last updated: Fri, 14 Aug 2009

view this page in

curl_getinfo

(PHP 4 >= 4.0.4, PHP 5)

curl_getinfoLit les informations détaillant un transfert cURL

Description

mixed curl_getinfo ( resource $ch [, int $opt= 0 ] )

curl_getinfo() lit les informations concernant le transfert ch .

Liste de paramètres

ch

Un gestionnaire cURL retourné par la fonction curl_init().

opt

Ce paramètre peut prendre l'une des valeurs suivantes :

  • CURLINFO_EFFECTIVE_URL : dernière URL réelle
  • CURLINFO_HTTP_CODE : dernier code HTTP reçu
  • CURLINFO_FILETIME : date distante du document, et -1 si la date du document distant est inconnue.
  • CURLINFO_TOTAL_TIME : durée de la transaction en secondes pour le dernier transfert
  • CURLINFO_NAMELOOKUP_TIME : durée de résolution du nom de domaine en secondes
  • CURLINFO_CONNECT_TIME : durée d'établissement de la connexion en secondes
  • CURLINFO_PRETRANSFER_TIME : durée en secondes, entre le début de la transaction et de début du transfert de fichiers
  • CURLINFO_STARTTRANSFER_TIME : durée en secondes jusqu'à ce que le premier octet soit sur le point d'être transféré
  • CURLINFO_REDIRECT_TIME : durée en secondes de toutes les étapes de redirection avant que la transaction finale ne soit débutée
  • CURLINFO_SIZE_UPLOAD : nombre total d'octets envoyés
  • CURLINFO_SIZE_DOWNLOAD : nombre total d'octets téléchargés
  • CURLINFO_SPEED_DOWNLOAD : vitesse moyenne de téléchargement
  • CURLINFO_SPEED_UPLOAD : vitesse moyenne d'envoi
  • CURLINFO_HEADER_SIZE : taille des en-têtes reçus
  • CURLINFO_HEADER_OUT : la chaîne de requête envoyée. Disponible depuis PHP 5.1.3
  • CURLINFO_REQUEST_SIZE : taille totale des requêtes envoyées. Actuellement, uniquement pour les requêtes HTTP
  • CURLINFO_SSL_VERIFYRESULT : résultat de la vérification de la certification SSL demandée par CURLOPT_SSL_VERIFYPEER
  • CURLINFO_CONTENT_LENGTH_DOWNLOAD : taille du corps du téléchargement, lu dans l'en-tête Content-Length:
  • CURLINFO_CONTENT_LENGTH_UPLOAD : taille spécifiée de l'envoi.
  • CURLINFO_CONTENT_TYPE : Content-Type: du fichier téléchargé. NULL indique que le serveur n'a pas envoyé d'en-tête Content-Type:

Valeurs de retour

Si opt est fourni, la valeur retournée sera une chaîne. Sinon, ce sera un tableau associatif contenant les éléments suivants : (qui correspond à opt ):

  • "url"
  • "content_type"
  • "http_code"
  • "header_size"
  • "request_size"
  • "filetime"
  • "ssl_verify_result"
  • "redirect_count"
  • "total_time"
  • "namelookup_time"
  • "connect_time"
  • "pretransfer_time"
  • "size_upload"
  • "size_download"
  • "speed_download"
  • "speed_upload"
  • "download_content_length"
  • "upload_content_length"
  • "starttransfer_time"
  • "redirect_time"

Historique

Version Description
5.1.3 Ajout de CURLINFO_HEADER_OUT.

Exemples

Exemple #1 Exemple avec curl_getinfo()

<?php
// Création d'un gestionnaire curl
$ch curl_init('http://www.yahoo.com/');

// Exécution
curl_exec($ch);

// Vérification si une erreur est survenue
if(!curl_errno($ch))
{
 
$info curl_getinfo($ch);

 echo 
'La requête a mis ' $info['total_time'] . ' secondes à être envoyée à ' $info['url'];
}

// Fermeture du gestionnaire
curl_close($ch);
?>



curl_init> <curl_exec
Last updated: Fri, 14 Aug 2009
 
add a note add a note User Contributed Notes
curl_getinfo
raghuveer at spiderace dot com
23-Oct-2008 12:47
A code snippet that I had attempted to enumerate the Remote File Size and to post Amount of Time taken for that particular Curl Request.

<?php

/* borrowed the Byte Conversion code (byte_convert function) posted by "olafurw at gmail.com" and modified by "d.abromeit" in http://in.php.net/filesize. I did make changes in the notation of expression of multiples of bytes from KiB => KB, MiB => MB etc all symbols in this Byte Code*/

 
function byte_convert($bytes)
  {
   
$symbol = array('B', 'KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB');

   
$exp = 0;
   
$converted_value = 0;
    if(
$bytes > 0 )
    {
     
$exp = floor( log($bytes)/log(1024) );
     
$converted_value = ( $bytes/pow(1024,floor($exp)) );
    }

    return
sprintf( '%.2f '.$symbol[$exp], $converted_value );
  }

  
$userAgent = 'Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; .NET CLR 1.1.4322)';
  
$url = 'http://www.spiderace.com/samplefiles/testfile.zip';

   
// initialize curl with given url
   
$ch = curl_init($url);
   
// make sure we get the header
   
curl_setopt($ch, CURLOPT_HEADER, 1);
   
// make it a http HEAD request
   
curl_setopt($ch, CURLOPT_NOBODY, 1);
   
// add useragent
   
curl_setopt($ch, CURLOPT_USERAGENT, $userAgent);
   
//Tell curl to write the response to a variable
   
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   
// The maximum number of seconds to allow cURL functions to execute.
   
curl_setopt($ch,CURLOPT_CONNECTTIMEOUT,60);
   
// Tell curl to stop when it encounters an error
   
curl_setopt($ch, CURLOPT_FAILONERROR, 1);
   
   
$execute = curl_exec($ch);
   
   
// Check if any error occured
   
if(!curl_errno($ch))
    {
       
$bytes = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
       
// Display the File Size
       
echo byte_convert($bytes);
        echo
"<br><br>";
       
$total_time = curl_getinfo($ch, CURLINFO_TOTAL_TIME);
        echo
'Took ' . $total_time . ' seconds to send a request to ' . $url;
       
clearstatcache();
    }
   
curl_close($ch);

?>

NOTE: This code worked on Both Linux (tried on CentOS) & Windows Servers (tried on XAMPP For Windows on Windows XP PC), thank you. Hope this will be helpful to others as well.
master-No-sp-aM at io dot ua
17-Jul-2008 07:40
CURLINFO_CONTENT_LENGTH_DOWNLOAD contains zero in FTP request although Content-Length field is present.

Following workaround may helps:

<?php
$ch
= curl_init($url);
...
CURL OPTIONS ...
$result=curl_exec($ch);
$pu=parse_url($url);
if(
$pu['scheme']=='ftp'){
   
$regexp="/Content-Length: (\d*)/";
   
preg_match($regexp,$result,$matches);
   
$con_len=$matches[1];
}
else
$con_len = curl_getinfo($ch, CURLINFO_CONTENT_LENGTH_DOWNLOAD);
?>

Its worth to keep using CURLINFO_CONTENT_LENGTH_DOWNLOAD in http requests, becouse there could be several headers pack if CURLOPT_FOLLOWLOCATION is fired, and regular expression for this case is a little bit complicated.
nemetral
17-Jun-2008 02:57
Just a quick note: if you want to use curl_getinfo() with option CURLINFO_HEADER_OUT in order to debug your cURL request, you must add curl_setopt($handle, CURLINFO_HEADER_OUT, true); first while specifying the options.
luiheidsgoeroe at hotmail dot com
04-Feb-2008 11:02
Keep in mind that for CURLOPT_RETURNTRANSFER it has to be set with curl_setopt() before execution:

This doesn't work:
<?php
$ch
= curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_exec($ch);
var_dump(curl_getinfo($ch,CURLINFO_HEADER_OUT));
?>

This works:
<?php
$ch
= curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLINFO_HEADER_OUT, true);
curl_exec($ch);
var_dump(curl_getinfo($ch,CURLINFO_HEADER_OUT));
?>
Mark Evers
17-Jan-2008 06:14
There is a constant missing from that list.  CURLINFO_REDIRECT_COUNT will give you the number of redirects it went through if CURLOPT_FOLLOWLOCATION was set.
ssttoo at hotmail dot com
06-Apr-2004 07:13
Here are the response codes ready for pasting in an ini-style file. Can be used to provide more descriptive message, corresponding to 'http_code' index of the arrray returned by curl_getinfo().
These are taken from the W3 consortium HTTP/1.1: Status Code Definitions, found at
http://www.w3.org/Protocols/rfc2616/rfc2616-sec10.html

[Informational 1xx]
100="Continue"
101="Switching Protocols"

[Successful 2xx]
200="OK"
201="Created"
202="Accepted"
203="Non-Authoritative Information"
204="No Content"
205="Reset Content"
206="Partial Content"

[Redirection 3xx]
300="Multiple Choices"
301="Moved Permanently"
302="Found"
303="See Other"
304="Not Modified"
305="Use Proxy"
306="(Unused)"
307="Temporary Redirect"

[Client Error 4xx]
400="Bad Request"
401="Unauthorized"
402="Payment Required"
403="Forbidden"
404="Not Found"
405="Method Not Allowed"
406="Not Acceptable"
407="Proxy Authentication Required"
408="Request Timeout"
409="Conflict"
410="Gone"
411="Length Required"
412="Precondition Failed"
413="Request Entity Too Large"
414="Request-URI Too Long"
415="Unsupported Media Type"
416="Requested Range Not Satisfiable"
417="Expectation Failed"

[Server Error 5xx]
500="Internal Server Error"
501="Not Implemented"
502="Bad Gateway"
503="Service Unavailable"
504="Gateway Timeout"
505="HTTP Version Not Supported"

And an example usage:
<?php
$ch
= curl_init(); // create cURL handle (ch)
if (!$ch) {
    die(
"Couldn't initialize a cURL handle");
}
// set some cURL options
$ret = curl_setopt($ch, CURLOPT_URL,            "http://mail.yahoo.com");
$ret = curl_setopt($ch, CURLOPT_HEADER,         1);
$ret = curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
$ret = curl_setopt($ch, CURLOPT_RETURNTRANSFER, 0);
$ret = curl_setopt($ch, CURLOPT_TIMEOUT,        30);

// execute
$ret = curl_exec($ch);

if (empty(
$ret)) {
   
// some kind of an error happened
   
die(curl_error($ch));
   
curl_close($ch); // close cURL handler
} else {
   
$info = curl_getinfo($ch);
   
curl_close($ch); // close cURL handler

   
if (empty($info['http_code'])) {
            die(
"No HTTP code was returned");
    } else {
       
// load the HTTP codes
       
$http_codes = parse_ini_file("path/to/the/ini/file/I/pasted/above");
       
       
// echo results
       
echo "The server responded: <br />";
        echo
$info['http_code'] . " " . $http_codes[$info['http_code']];
    }

}
?>
12-Sep-2002 09:02
You can get some documentation about what these values mean in the libcurl C API documentation here:

http://curl.haxx.se/libcurl/c/curl_easy_getinfo.html

curl_init> <curl_exec
Last updated: Fri, 14 Aug 2009
 
 
show source | credits | stats | sitemap | contact | advertising | mirror sites