2009-05-10 9 views

Antwort

14

Von php's article:

<?php 
// outputs e.g. somefile.txt was last modified: December 29 2002 22:16:23. 

$filename = 'somefile.txt'; 
if (file_exists($filename)) { 
    echo "$filename was last modified: " . date ("F d Y H:i:s.", filemtime($filename)); 
} 
?> 

filemtime() ist hier der Schlüssel. Aber ich bin mir nicht sicher, ob Sie das letzte Änderungsdatum einer entfernten Datei erhalten können, da der Server es Ihnen senden sollte ... Vielleicht in den HTTP-Headern?

+2

Aus dem Handbuch: "Ab PHP 5.0.0 kann diese Funktion auch mit * einigen * URL Wrapper verwendet werden." – nickf

+3

Für meine Erfahrung funktioniert diese Methode nicht immer (es hängt von Ihrer php.ini ab), also arbeiteten native get_headers besser für mich. – Pons

+0

@Pons, ich stimme zu, es funktioniert nicht mit mir –

36

Sie könnten wahrscheinlich etwas tun curl_getinfo() mit:

<?php 
$curl = curl_init('http://www.example.com/filename.txt'); 

//don't fetch the actual page, you only want headers 
curl_setopt($curl, CURLOPT_NOBODY, true); 

//stop it from outputting stuff to stdout 
curl_setopt($curl, CURLOPT_RETURNTRANSFER, true); 

// attempt to retrieve the modification date 
curl_setopt($curl, CURLOPT_FILETIME, true); 

$result = curl_exec($curl); 

if ($result === false) { 
    die (curl_error($curl)); 
} 

$timestamp = curl_getinfo($curl, CURLINFO_FILETIME); 
if ($timestamp != -1) { //otherwise unknown 
    echo date("Y-m-d H:i:s", $timestamp); //etc 
} 
+1

Ich habe bemerkt, dass dieser Code manchmal nicht funktioniert, native PHP get_headers funktioniert Besser für mich. – Pons

0

wäre so etwas wie dieses Werk, von web developer forum

<? $last_modified = filemtime("content.php"); print("Last Updated - "); 
print(date("m/d/y", $last_modified)); ? 

// OR 

$last_modified = filemtime(__FILE__); 

der Link auf einige nützliche Insite bietet können sie

3
verwenden

Sie können den Empfang der Header der Antwort mit curl_setopt($handle, CURLOPT_HEADER, true) aktivieren. Sie können CURLOPT_NOBODY auch aktivieren, um nur die Header zu erhalten, und danach das Ergebnis durch \ r \ n auflösen und die einzelnen Header interpretieren. Der Header Last-Modified ist derjenige, der Sie interessiert sind

+0

Yep - nur die Header –

+1

Angenommen, sie senden die Last-Modified-Header –

18

In PHP Sie die native Funktion können get_headers().

<?php 
$h = get_headers($url, 1); 

$dt = NULL; 
if (!($h || strstr($h[0], '200') === FALSE)) { 
    $dt = new \DateTime($h['Last-Modified']);//php 5.3 
} 
+5

"Wenn" Bedingung nicht richtig funktioniert ... 'If (! $ H || strpos ($ h [0], '200')! == false) {'funktioniert besser für mich! – dino

+0

Dino ist richtig. Es sieht so aus, als ob ein "!" - Operator versehentlich im obigen Code weggelassen wurde. Die if-Anweisung sollte wirklich 'if (! (! $ H || strstr ($ h [0], '200') === FALSE)) {' – Steven

+2

Könnte den kleinen Code aus Pons kombinieren und hinzufügen auch. 'if (strtolower (trim ($ k)) == 'last-modified')' – Armstrongest

3

Manchmal mit unterschiedlichen oberen Kleinbuchstaben kommen header, sollte dies helfen:

function remoteFileData($f) { 
    $h = get_headers($f, 1); 
    if (stristr($h[0], '200')) { 
     foreach($h as $k=>$v) { 
      if(strtolower(trim($k))=="last-modified") return $v; 
     } 
    } 
} 
1

Durch Antwort der Bearbeitung h4kuna ich diese erstellt:

$fileURL='http://www.yahoo.com'; 
$headers = get_headers($fileURL, 1); 
$date = "Error"; 
//echo "<pre>"; print_r($headers); echo "</pre>"; 
if ($headers && (strpos($headers[0],'200') !== FALSE)) { 
    $time=strtotime($headers['Last-Modified']); 
    $date=date("d-m-Y H:i:s", $time); 
} 
echo 'file: <a href="'.$fileURL.'" target="_blank">'.$fileURL.'</a> (Last-Modified: '.$date.')<br>'; 
0

Hatte ähnliches Problem zu lösen, aber für mich Download einmal am Tag war genug, also verglich ich nur den Modifiziertag der lokalen (heruntergeladenen) Cache-Datei. Die Remote-Datei hatte keinen Last-Modified-Header.

$xml = 'test.xml'; 
if (is_file($xml) || date('d', filemtime($xml)) != date('d')) { 
    $xml = file_get_contents(REMOTE_URL); 
} 
Verwandte Themen