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