From bcd661488de087afab096c18aa55eda42e8c5226 Mon Sep 17 00:00:00 2001 From: Jacek Kowalski <Jacek@jacekk.info> Date: Sun, 30 Jun 2019 21:59:01 +0000 Subject: [PATCH] Move functions into classes to make them autoloader-compatibile --- lib/Fetch.php | 70 +++++++++++++++++++++++++++++++++++ 1 files changed, 70 insertions(+), 0 deletions(-) diff --git a/lib/Fetch.php b/lib/Fetch.php new file mode 100644 index 0000000..78e5bfe --- /dev/null +++ b/lib/Fetch.php @@ -0,0 +1,70 @@ +<?php +class Fetch { + static function ftp($url, $file = NULL) { + $url = parse_url($url); + if(!isset($url['scheme']) || $url['scheme'] != 'ftp') { + throw new Exception('Only FTP URLs are supported'); + } + if(!isset($url['host'])) { + throw new Exception('Hostname not present in the URL'); + } + if(!isset($url['path'])) { + throw new Exception('Path component not present in the URL'); + } + if(!isset($url['port'])) { + $url['port'] = 21; + } + if(!isset($url['user'])) { + $url['user'] = 'anonymous'; + } + if(!isset($url['pass'])) { + $url['pass'] = 'anonymous@mpk.jacekk.net'; + } + if($file == NULL) { + $file = basename($url['path']); + } + + $localTime = -1; + $localSize = -1; + if(is_file($file)) { + $localTime = filemtime($file); + $localSize = filesize($file); + } + + $ftp = FtpConnection::create($url['host'], $url['port'], $url['user'], $url['pass']); + $remoteSize = $ftp->size($url['path']); + $remoteTime = $ftp->mdtm($url['path']); + + $updated = FALSE; + + if($localTime < $remoteTime || ($localTime == $remoteTime && $localSize != $remoteSize)) { + if(file_exists($file.'.tmp')) { + unlink($file.'.tmp'); + } + $ftp->get($file.'.tmp', $url['path'], FTP_BINARY); + touch($file.'.tmp', $remoteTime); + if(!rename($file.'.tmp', $file)) { + throw new Exception('Temporary file rename failed'); + } + $updated = TRUE; + } + + return $updated; + } + + static function generic($url, $file = NULL) { + if($file == NULL) { + $file = basename($url['url']); + } + $data = file_get_contents($url); + if($data === FALSE) { + throw new Exception('URL fetch failed'); + } + if(file_put_contents($file.'.tmp', $data) === FALSE) { + throw new Exception('Temporary file creation failed'); + } + if(!rename($file.'.tmp', $file)) { + throw new Exception('Temporary file rename failed'); + } + } +} -- Gitblit v1.9.1