static function Open() { // Check if native PHP methods should be used - Test 1 self::$native = is_writable(DOC_ROOT) && getmyuid() == fileowner(DOC_ROOT) ? true : false; // Check if native PHP methods should be used - Test 2 if (self::$native) { // Create temporary file $native_check_file = DOC_ROOT . '/native-check' . time(); $handle = @fopen($native_check_file, 'w'); @fwrite($handle, 'Native Check'); // Check if webserver/PHP has filesystem access self::$native = fileowner($native_check_file) == getmyuid() ? true : false; // Remove temporary file @fclose($handle); @unlink($native_check_file); } // Login to server via FTP if PHP doesn't have write access if (!self::$native) { // Set FTP login settings global $settings; self::$ftp_hostname = $settings->ftp_hostname; self::$ftp_username = $settings->ftp_username; self::$ftp_password = $settings->ftp_password; self::$ftp_path = $settings->ftp_path; self::$ftp_ssl = $settings->ftp_ssl; // Connect to FTP host if (self::$ftp_ssl) { if (!function_exists('ftp_ssl_connect')) { throw new Exception("Your host doesn't support FTP over SSL connections."); } self::$ftp_stream = @ftp_ssl_connect(self::$ftp_hostname); } else { self::$ftp_stream = @ftp_connect(self::$ftp_hostname); } if (!self::$ftp_stream) { throw new Exception("Unable to connect to FTP host (" . self::$ftp_hostname . ")"); } // Login with username and password if (!@ftp_login(self::$ftp_stream, self::$ftp_username, self::$ftp_password)) { throw new Exception("Unable to login to FTP server (Username: '******', Password: '******')"); } } return self::$native ? 'native' : 'ftp'; }