From 75471ecd99d1b3583a2c87dd71b56a72358de4f2 Mon Sep 17 00:00:00 2001
From: Jacek Kowalski <Jacek@jacekk.info>
Date: Sun, 30 Jun 2019 20:41:08 +0000
Subject: [PATCH] Reuse FTP connection if possible

---
 lib/fetch.php |   36 ++++++++++--------------------------
 1 files changed, 10 insertions(+), 26 deletions(-)

diff --git a/lib/fetch.php b/lib/fetch.php
index bb36a1a..57ffaaa 100644
--- a/lib/fetch.php
+++ b/lib/fetch.php
@@ -1,4 +1,6 @@
 <?php
+require_once(__DIR__.'/FtpConnection.php');
+
 function ftp_fetch_if_newer($url, $file = NULL) {
 	$url = parse_url($url);
 	if(!isset($url['scheme']) || $url['scheme'] != 'ftp') {
@@ -30,24 +32,9 @@
 		$localSize = filesize($file);
 	}
 	
-	$ftp = ftp_connect($url['host'], $url['port'], 10);
-	if($ftp === FALSE) {
-		throw new Exception('FTP connection failed');
-	}
-	if(!ftp_login($ftp, $url['user'], $url['pass'])) {
-		throw new Exception('FTP login failed');
-	}
-	if(!ftp_pasv($ftp, TRUE)) {
-		throw new Exception('Passive FTP request failed');
-	}
-	$remoteSize = ftp_size($ftp, $url['path']);
-	if($remoteSize < 0) {
-		throw new Exception('FTP file size fetch failed');
-	}
-	$remoteTime = ftp_mdtm($ftp, $url['path']);
-	if($remoteTime < 0) {
-		throw new Exception('FTP modification time fetch failed');
-	}
+	$ftp = FtpConnection::create($url['host'], $url['port'], $url['user'], $url['pass']);
+	$remoteSize = $ftp->size($url['path']);
+	$remoteTime = $ftp->mdtm($url['path']);
 	
 	$updated = FALSE;
 	
@@ -55,16 +42,13 @@
 		if(file_exists($file.'.tmp')) {
 			unlink($file.'.tmp');
 		}
-		if(ftp_get($ftp, $file.'.tmp', $url['path'], FTP_BINARY)) {
-			touch($file.'.tmp', $remoteTime);
-			if(!rename($file.'.tmp', $file)) {
-				throw new Exception('Temporary file rename failed');
-			}
-			$updated = TRUE;
+		$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;
 	}
-	
-	ftp_close($ftp);
 	
 	return $updated;
 }

--
Gitblit v1.9.1