Me gustaría obtener la última fecha de modificación de un archivo remoto mediante curl. ¿Alguien sabe cómo hacer eso?Obtener la última fecha de modificación de un archivo remoto
Respuesta
De 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() es la clave aquí. Pero no estoy seguro de si puede obtener la última fecha de modificación de un archivo remoto, ya que el servidor debería enviársela ... ¿Quizás en los encabezados HTTP?
Probablemente se podría hacer algo como esto utilizando curl_getinfo()
:
<?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
}
Me he dado cuenta de que este código a veces no funciona, funciona nativo php get_headers mejor para mi. – Pons
sería algo así como este trabajo, desde web developer forum
<? $last_modified = filemtime("content.php"); print("Last Updated - ");
print(date("m/d/y", $last_modified)); ?
// OR
$last_modified = filemtime(__FILE__);
el enlace proporciona algunos insite útil sobre los podrá utilizar
Puede activar la recepción de los encabezados de la respuesta con curl_setopt($handle, CURLOPT_HEADER, true)
. También puede activar CURLOPT_NOBODY para recibir solo los encabezados, y luego explotar el resultado por \ r \ n e interpretar los encabezados individuales. La cabecera Last-Modified
es el que está interesado en
Sí, solo solicite los encabezados –
Suponiendo que envían el encabezado Last-Modified –
En PHP puede utilizar la función nativa 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
}
"Si" la condición no funcionó correctamente ... 'if (! $ H || strpos ($ h [0], '200')! == falso) {'funciona mejor para mí! – dino
dino es correcto. Parece que un operador '!' Se omitió en el código anterior por accidente. La instrucción if realmente debería ser 'if (! (! $ H || strstr ($ h [0], '200') === FALSE)) {' – Steven
Puede que desee combinar y agregar el código en minúscula de Pons a este también. 'if (strtolower (trim ($ k)) == 'last-modified')' – Armstrongest
veces Header vienen con diferentes letras minúsculas superior, esto debería ayudar:
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;
}
}
}
por la respuesta de la edición h4kuna creé esto:
$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>';
Tuve que resolver un problema similar, pero para mí descargarlo una vez al día era suficiente, así que solo comparé el día de modificación del archivo de caché local (descargado). El archivo remoto no tenía encabezado Last-Modified.
$xml = 'test.xml';
if (is_file($xml) || date('d', filemtime($xml)) != date('d')) {
$xml = file_get_contents(REMOTE_URL);
}
- 1. Conseguir un archivo de fecha de última modificación
- 2. Directorio última fecha de modificación
- 3. Obtener la fecha de la última modificación de una URL
- 4. play-marco conseguir la fecha de última modificación de archivo
- 5. Obtener la última fecha de modificación de un archivo en VB6
- 6. Obtener la última fecha de modificación de un archivo en C
- 7. ¿Cómo obtener la última fecha de modificación del archivo en la línea de comandos de Windows?
- 8. Obtener archivo Última modificación de tiempo y comparar
- 9. Obtener la fecha de modificación del archivo en VB.NET
- 10. Última modificación de carpetas
- 11. ¿Es posible recuperar la última fecha de modificación de un archivo utilizando Javascript?
- 12. Buscar la fecha de última modificación de un archivo en Cocoa
- 13. ¿Cómo puedo obtener la fecha de la última modificación del conjunto?
- 14. ¿Recibe la última fecha de modificación del archivo de los archivos de datos de la aplicación?
- 15. Obtener la fecha de modificación mediante FTP usando PHP/CURL
- 16. Última modificación de un directorio en OSX
- 17. ¿Cómo obtengo la última modificación de un recurso de Java?
- 18. Django: modelos última fecha de modificación y número de mod
- 19. ¿Cómo puedo obtener la fecha de última modificación de los objetos S3 con boto?
- 20. ¿Cómo convertir el archivo con la última marca de modificación a una fecha?
- 21. ¿Cómo obtengo la fecha de modificación del archivo en C#?
- 22. ¿Cómo obtener las fechas de creación/última modificación de un archivo en Delphi?
- 23. ¿Cómo ordenar la salida de "grep -l" cronológicamente por la última fecha de modificación?
- 24. Obtener carpeta (o subarchivos/carpetas) última fecha y hora de modificación
- 25. ¿Obtener la fecha de la última ejecución de trabajo exitosa?
- 26. copia de archivos PHP sin cambiar la fecha de última modificación
- 27. ¿Cómo obtengo la última hora de modificación de un archivo en Perl?
- 28. Obteniendo la última fecha de modificación de archivos en el directorio usando PHP
- 29. Python: obtener la fecha y hora de la última hora
- 30. Objective-c: Obtener la fecha de creación del archivo
Del manual: "A partir de PHP 5.0.0, esta función también se puede usar con * algunos * contenedores de URL." – nickf
Para mi experiencia este método no funciona siempre (depende de tu php.ini) así que get_headers nativos funcionó mejor para mí. – Pons
@Pons, estoy de acuerdo, no funciona conmigo –