Был такой скрипт который сверял файлы на моём сайте и на другом, он смотрел вроде бы на дату скаченного файла и на дату с другого сайта, если файлы были одинаковые то скрипт ничего не качал, по заголовкам вроде определял. Если файлы были разными тогда качал. Работал он на баше (sh скрипте) раньше, сейчас хочу перевести на php.
Вот собственно он:
Скрипт скачивал file.json.gz другого сайта и распаковывал (или копировал) уже ко мне в папку с сайтом
#!/bin/bash
FNAME="file.json"
URL="http://site2.ru/fff.json"
GNAME="/home/user/bin/getdata/${FNAME}.gz"
curl --fail -R -z "${GNAME}" -o "${GNAME}" -H "Accept-Encoding: gzip" "${URL}" && \
gunzip -c "${GNAME}" > /home/user/mysite.ru/files/"${FNAME}"
А вот чуток не доработанный мой скрипт на PHP
<?php
class getJson{
static public function get($localFile,$urls,$remoteFile)
{
$urls .=$remoteFile;
if (file_exists($localFile)) {
$timestamp = filemtime($localFile);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$urls); //conf
curl_setopt($ch, CURLOPT_RETURNTRANSFER,1); //вывод строчкой
curl_setopt($ch, CURLOPT_HEADER, true); // читать заголовок
curl_setopt($ch, CURLOPT_NOBODY, 1); // читать ТОЛЬКО заголовок без тела
curl_setopt($ch, CURLOPT_CONNECTTIMEOUT, 60); // таймаут соединения
curl_setopt($ch, CURLOPT_TIMEOUT, 60); // таймаут ответа
curl_setopt($ch, CURLOPT_FRESH_CONNECT, TRUE); //без кеша
curl_setopt($ch, CURLOPT_FILETIME, TRUE); //получить timestamp файла
curl_setopt($ch, CURLOPT_ENCODING, "gzip"); //установка кодировки
curl_setopt($ch, CURLOPT_TIMEVALUE, $timestamp); //время изменения файла на моём сервере
curl_setopt($ch, CURLOPT_TIMECONDITION, CURL_TIMECOND_IFMODSINCE);
$content = curl_exec( $ch );
$err = curl_errno( $ch );
$errmsg = curl_error( $ch );
$header = curl_getinfo( $ch );
curl_close( $ch );
$header['errno'] = $err;
$header['errmsg'] = $errmsg;
$header['content'] = $content;
return $header;
//ответ на подобии такого
//array(25) { ["url"]=> string(42) "http://serv1.ru/files/11.json" ["content_type"]=> string(9) "text/html" ["http_code"]=> int(200) ["header_size"]=> int(185) ["request_size"]=> int(147) ["filetime"]=> int(1523617841) ["ssl_verify_result"]=> int(0) ["redirect_count"]=> int(0) ["total_time"]=> float(0.188) ["namelookup_time"]=> float(0) ["connect_time"]=> float(0.094) ["pretransfer_time"]=> float(0.094) ["size_upload"]=> float(0) ["size_download"]=> float(0) ["speed_download"]=> float(0) ["speed_upload"]=> float(0) ["download_content_length"]=> float(-1) ["upload_content_length"]=> float(0) ["starttransfer_time"]=> float(0.188) ["redirect_time"]=> float(0) ["certinfo"]=> array(0) { } ["redirect_url"]=> string(0) "" ["errno"]=> int(0) ["errmsg"]=> string(0) "" ["content"]=> string(185) "HTTP/1.1 200 Forbidden Referrer-Policy: same-origin Last-Modified: Mon, 07 May 2018 11:33:05 GMT Content-type: text/html Date: Mon, 07 May 2018 03:46:11 GMT Server: TrashServer
}
}
?>
$getJsonLinks = array(
'http://serv1.ru/files',
'http://serv2.com/loadings/',
'http://serv3.jp/oth/'
);
getJsonPooling('localfile.json',$getJsonLinks,0,'remotefile.json');
function getJsonPooling($localFile,$arr,$num,$remoteFile){
$getJson = new getJson();
$gg = $getJson->get($localFile, $arr[$num] ,$remoteFile);
if ( ($gg['errno']) && ($num <= count($arr)-2 ) ) {
$num++;
echo $num;
getJsonPooling($localFile,$arr,$num,$remoteFile);
}
var_dump($gg);
}
Лучше определяйте по md5 hash, если он разный то файл 100% изменялся на сервере.
Вот набросал пример, под себя думаю подгоните.
// Локальный файл
$filename_local = file_get_contents('http://site.com/test.txt');
$md5file_local = md5_file($filename_local);
// Файл на сервере
$filename_dev = file_get_contents('http://site.com/dev/test.txt');
$md5file_dev = md5_file($filename_dev);
// Сверяем md5 hash и если он отличается, значит файл изменен, закачиваем его
if ($md5file_local != $md5file_dev) {
file_put_contents('test.txt', $md5file_dev);
}
Современные инструменты для криптотрейдинга: как технологии помогают принимать решения
Апостиль в Лос-Анджелесе без лишних нервов и бумажной волокиты
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости