2015-04-04 1 views
0

Я хочу проверить, был ли удаленный файл изменен, прежде чем сохранять его на моем сервере. Сначала я проверил, существует ли файл перед выполнением сравнения, используя md5_file между удаленным файлом и локальным файлом, но это очень медленно. Есть ли более быстрый способ проверить это?Более быстрый способ проверить, был ли удаленный файл изменен, чем md5_file()

$channelName = htmlspecialchars($_GET['channel'], ENT_QUOTES); 

$json_array = json_decode(file_get_contents('http://api.hitbox.tv/media/live/'.strtolower($channelName)), true); 
$getImage = $json_array['livestream'][0]['channel']['user_logo_small']; 
$imageURL = "http://edge.vie.hitbox.tv/$getImage"; 
$imagePath = str_replace("/static/img/channel/", "", $getImage); 
$ImageExtension = substr(strrchr($imagePath, '.'), 1); 
$imageOutput = "images/$channelName.".$ImageExtension; 

if (file_exists($imageOutput)) { 

    if (md5_file($imageURL) != md5_file($imageOutput)) { 
    file_put_contents($imageOutput, file_get_contents($imageURL)); 
    } 

} else { 
    file_put_contents($imageOutput, file_get_contents($imageURL)); 
} 

Может быть кто-то может помочь мне немного или привести меня в правильном направлении ^^

С уважением, Kazuto

+0

Начнем с того, вы можете проверить, если два файла имеют разный размер. Если они это сделают, вы знаете, что md5-ing даст разные результаты, и файл изменился. Кроме того, я бы поверил, что сравнение байтов файлов по байтам происходит быстрее, чем md5. – Suppen

+1

Эта проблема решена в http - используйте информацию в заголовке, возвращенном ранее удаленным сервером (последний-модифицированный, etag), чтобы создать условный запрос и СПРОСИТЬ, если он изменился (удаленный сервер ответит с 304, если он не изменился) – symcbean

+0

Спасибо @Suppen. Я не думал о сравнении файлов. Сравнение их должно быть достаточно, так как они всего около 3kb. – Kazuto

ответ

0

Я использовал пакет и функцию Распаковка сделать что-то подобное. Преобразовал изображение и файл pdf в двоичный, а не в md5. Я не уверен в производительности по сравнению с MD5, но это хорошо, чтобы взглянуть на него.

http://php.net/manual/en/function.pack.php

http://php.net/manual/en/function.unpack.php