Правильно ли я переделал bash скрипт в PHP?

Был такой скрипт который сверял файлы на моём сайте и на другом, он смотрел вроде бы на дату скаченного файла и на дату с другого сайта, если файлы были одинаковые (или дата скаченного файла больше чем дата файла с другого сайта) то скрипт ничего не качал, по заголовкам вроде определял. Если файлы были разными тогда качал. Работал он на баше (sh скрипте) раньше, сейчас хочу перевести на php.

Скрипт скачивал file.json.gz c другого сайта и распаковывал уже ко мне в папку с сайтом
#!/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:

<?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>');
}


Вроде работает )
Что тут можно подправить для оптимизации/лаконичности, или это всё в пару строк пишется вообще ?
  • Вопрос задан
  • 273 просмотра
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы
YCLIENTS Москва
от 200 000 до 350 000 ₽
Ведисофт Екатеринбург
от 25 000 ₽
ИТЦ Аусферр Магнитогорск
от 100 000 до 160 000 ₽