Quantcast
Channel: Using cURL and HTTP headers to cache an XML feed correctly with PHP - Stack Overflow
Viewing all articles
Browse latest Browse all 2

Using cURL and HTTP headers to cache an XML feed correctly with PHP

$
0
0

I am using cURL to get an XML feed and save it into an XML file, like so

if (file_exists($filename) && (filemtime($filename) > time() - 30)) {    // load cached XML from file    $output = simplexml_load_file($filename);    return $output;} else {    // Initiate the curl session    $ch = curl_init();    // Set the URL    curl_setopt($ch, CURLOPT_URL, $url);    // Removes the headers from the output    curl_setopt($ch, CURLOPT_HEADER, 0);    // Callback to get custom headers    curl_setopt($ch, CURLOPT_HEADERFUNCTION, array(&$this,'readHeader'));    // Return the output instead of displaying it directly    curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);    // Execute the curl session    $output = curl_exec($ch);    // Return headers    $headers = curl_getinfo($ch);    // Merge headers into one array    $this->response_meta_info = array_merge($headers, $this->response_meta_info);    // Close the curl session    curl_close($ch);    // Cache feed    file_put_contents($filename, $output);    // XML to object    $output = simplexml_load_string($output);    // Return the output as an array    return  $output;}

It returns the following http headers

Array(    [url] => http://example.com    [content_type] => text/xml    [http_code] => 200    [header_size] => 425    [request_size] => 108    [filetime] => -1    [ssl_verify_result] => 0    [redirect_count] => 0    [total_time] => 0.677605    [namelookup_time] => 0.181104    [connect_time] => 0.342955    [pretransfer_time] => 0.343036    [size_upload] => 0    [size_download] => 6579    [speed_download] => 9709    [speed_upload] => 0    [download_content_length] => 6579    [upload_content_length] => 0    [starttransfer_time] => 0.515733    [redirect_time] => 0    [expires] => Wed, 23 Nov 2011 15:49:24 GMT)

I want to use the [expires] => Wed, 23 Nov 2011 15:49:24 GMT header instead of using the time now minus 30 seconds bit of this if statement (file_exists($filename) && (filemtime($filename) > time() - 30)) { as then it will only update the cache when it needs to.

But I can't work out how to do this.


Viewing all articles
Browse latest Browse all 2

Latest Images

Trending Articles





Latest Images