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