Answer the question
In order to leave comments, you need to log in
Am I correct in converting the bash script to PHP?
There was such a script that checked the files on my site and on another, it seemed to look at the date of the downloaded file and the date from another site, if the files were the same (or the date of the downloaded file is greater than the date of the file from another site), then the script did not download anything , according to the headings like determined. If the files were different then downloaded. It worked on a bash (sh script) before, now I want to translate it into php.
The script downloaded file.json.gz from another site and unpacked it to my folder with the site
#!/bin/bash
FNAME="file.json"
URL="http://remotesite.ru/fff.json"
GNAME="/home/user/bin/getjson/${FNAME}.gz"
curl --fail -R -z "${GNAME}" -o "${GNAME}" -H "Accept-Encoding: gzip" "${URL}" && \
gunzip -c "${GNAME}" > /home/user/mysite.ru/files/"${FNAME}"
<?php
function getJsonPooling($localFile,$arr,$num,$remoteFile){
$numReq = $num+1;
echo 'ПОПЫТКА ПОДКЛЮЧЕНИЯ: '.$numReq.'<br>';
echo 'Подключаемся к: '.$arr[$num].'<br>';
$getJson = new getJson();
$gg= $getJson->get($localFile, $arr[$num] ,$remoteFile);
if ( ($gg['returnurl']['errno']) ||
($gg['returnfile']['errno']) &&
($num <= count($arr)-2 ) ) {
$num++;
getJsonPooling($localFile,$arr,$num,$remoteFile);
}
var_dump($gg);
}
class getJson{
static public function get($localFile,$url,$remoteFile)
{
$url .=$remoteFile;
if (file_exists($localFile)) {
$timestamp = filemtime($localFile);
}
$ch = curl_init();
curl_setopt($ch, CURLOPT_URL,$url); //conf
/*curl_setopt($ch, CURLOPT_PROXY, '51.255.138.248:3128'); //PROXY's*/
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); //Если файл не изменился получаем код 304
curl_exec( $ch );
$returnurl = curl_getinfo( $ch );
$returnurl['errno'] = curl_errno( $ch );
$returnurl['errmsg'] = curl_error( $ch );
if(
($returnurl['http_code'] == '200') &&
($returnurl['errno'] == '0')
){
echo '<br> Файл изменился, качаем!';
echo '<hr>';
$ch2 = curl_copy_handle($ch); //Копируем предыдущий дескриптор
curl_setopt($ch2, CURLOPT_HEADER, false); // читать заголовок
curl_setopt($ch2, CURLOPT_NOBODY, false); // читать ТОЛЬКО заголовок без тела
$outData = curl_exec( $ch2 );
$isJSON = (is_string($outData) &&
(is_object(json_decode($outData)) ||
is_array(json_decode($outData)))) ? true : false;
$returnfile = curl_getinfo( $ch2 );
$returnfile['errno'] = curl_errno( $ch2 );
$returnfile['errmsg'] = curl_error( $ch2 );
$returnfile['valid'] = $isJSON;
curl_close($ch2);
if ($returnfile['http_code'] != '200') {
echo 'Ошибка на сервере при получении файла: '.$returnfile['http_code'];
}
if ($returnfile['errno'] != '0'){
echo '<br> Ошибка при получении файла: '.$returnfile['errno'].'<br>';
echo '<br>'.$returnfile['errmsg'].'<br>';
}
if($isJSON) {
echo '<br>Полученный файл корректный, записываем! <br>';
file_put_contents($localFile, $outData);
$GLOBALS['data'] = $outData;
unset($outData);
} else {
echo '<br>Полученный файл НЕ корректный <br>';
die();
}
} else if ($returnurl['http_code'] == '304'){
echo '<br> Файл не изменился <br>';
} else if ($returnurl['errno'] != '0'){
echo '<br> Ошибка: '.$returnurl['errno'].'<br>';
echo '<br>'.$returnurl['errmsg'].'<br>';
}
curl_close($ch);
$return['returnurl'] = $returnurl;
$return['returnfile'] = $returnfile;
return $return;
}
}
?>
$localFile = './files/local.json';
$remoteFile = 'remotefile.json';
//Зеркала
$getJsonLinks = array(
'http://serv1.ru/',
'http://serv2.com/',
'http://serv3.org/'
);
//локальный файл, массив с ссылками на сайт, номер ссылки из масива (если не работает ссылка идём к следующей ссылке), файл который качаем по ссылке
getJsonPooling($localFile,$getJsonLinks,0,$remoteFile);
if($data){
$data = json_decode($data, true);
} else {
die('<br> $data не получена die(); <br>');
}
Answer the question
In order to leave comments, you need to log in
Didn't find what you were looking for?
Ask your questionAsk a Question
731 491 924 answers to any question