Был такой скрипт который сверял файлы на моём сайте и на другом, он смотрел вроде бы на дату скаченного файла и на дату с другого сайта, если файлы были одинаковые то скрипт ничего не качал, по заголовкам вроде определял. Если файлы были разными тогда качал. Работал он на баше (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);
}
Я совсем новичок в парсинге контента с сайтах прошу не кидать помидоры
есть страница с выводом всей таблицы из БД, в каждой ячейке кнопка для редактирования строки таблицыПо клику на кнопку назначаю обработчик...
Написал чат на django все работает отлично но с перезагрузкой отправил сообщение перезагрузка и для получение перезагружает страницу чтобы...
Как с помощью Js или jQuery сделать возможность взаимодействия с двумя разными объектами