/** * Recursive deletes path. * @param string * @return void */ private function purge($path, $onlyContent = FALSE) { static $counter; echo str_pad(str_repeat('.', $counter++ % 40), 40), "\r"; if (!$onlyContent && $this->ftp->tryDelete($path)) { return; } foreach ((array) $this->ftp->nlist($path) as $file) { if ($file != NULL && !preg_match('#(^|/)\\.+$#', $file)) { // intentionally == $file = strpos($file, '/') === FALSE ? "{$path}/{$file}" : $file; if ($file !== $path) { $this->purge($file); } } } if (!$onlyContent) { $this->ftp->tryRmdir($path); } }
&style=bloco" class="btn btn-success" style="float: right; width: 100px;">Bloco</a> <?php } else { ?> <a href="<?php echo $Ftp->getPage() . "&ftp=" . $Ftp->getUrl(); ?> &style=lista" class="btn btn-primary" style="float: right; width: 100px;">Lista</a> <?php } echo "</div>"; ?> <div class="well"> <?php $lista = !empty($dir) ? $Ftp->nlist($dir) : $Ftp->nlist('.'); if (empty($file)) { $i = 0; $class = $style == 'lista' ? 'list-group' : 'row'; echo "<div class=\"{$class}\">"; foreach ($lista as $url) { $title = $Ftp->UrlToDir($url); if ($title != '.tmb' && $title != '.quarantine') { if (empty($style) || $style == "bloco") { if ($i % 6 == 0) { echo "</div><div class=\"row\">"; } } if (empty($style) || $style == "bloco") { if ($Ftp->ftp_is_dir($url)) { $Ftp->getIcon("&ftp={$url}", $title, "pasta");
/** * Copies files using FTP access * * @param string $source Absolute path (non-ftp) to source dir/file * @param string $destination Absolute path (non-ftp) to destination dir/file * @param array $ftp_access * array( * 'hostname', * 'username', * 'password', * 'directory' * ) * @return bool true if all files were copied or (string) Error message */ function fn_copy_by_ftp($source, $destination, $ftp_access) { try { $ftp = new Ftp(); $ftp->connect($ftp_access['hostname']); $ftp->login($ftp_access['username'], $ftp_access['password']); $ftp->chdir($ftp_access['directory']); $files = $ftp->nlist(''); if (!empty($files) && in_array('config.php', $files)) { $ftp_destination = str_replace(Registry::get('config.dir.root'), '', $destination); if (is_file($source)) { // File try { $file = ltrim($ftp_destination, '/'); $ftp->put($file, $source, FTP_BINARY); } catch (FtpException $e) { throw new FtpException('ftp_access_denied' . ':' . $e->getMessage()); } } else { // Dir $ftp->chdir($ftp_access['directory'] . $ftp_destination); $struct = fn_get_dir_contents($source, false, true, '', '', true); foreach ($struct as $file) { $dir = dirname($file); if (!$ftp->isDir($dir)) { try { $ftp->mkDirRecursive($dir); } catch (FtpException $e) { throw new FtpException('ftp_access_denied' . ':' . $e->getMessage()); } } try { $ftp->put($file, $source . $file, FTP_BINARY); } catch (FtpException $e) { throw new FtpException('ftp_access_denied' . ':' . $e->getMessage()); } } } return true; } else { throw new FtpException('ftp_directory_is_incorrect'); } } catch (FtpException $e) { return __('invalid_ftp_access') . ': ' . $e->getMessage(); } return false; }
/** * Gets a list of files to be uploaded based on the difference between HEAD * and the commit last deployed. * * @param \Ftp $ftp An active FTP connection. * * @return string[] An array of file names to upload. */ protected function getGitDiff(\Ftp $ftp) { $this->printTaskInfo('Checking remote site for Git info...'); $ftp->chdir($this->targetDirectory); if (in_array('.git-commit', $ftp->nlist('.'))) { $tempHandle = fopen('php://temp', 'r+'); if ($ftp->fget($tempHandle, '.git-commit', FTP_ASCII, 0)) { rewind($tempHandle); $commitId = stream_get_contents($tempHandle); $this->printTaskInfo('Remote site has version ' . $commitId . '.'); $this->printTaskInfo(' Scanning for changes...'); $result = $this->taskExec('git')->arg('diff')->arg('--name-only')->arg('--diff-filter=ACMRT')->arg($commitId)->arg('HEAD')->run(); return preg_split('/[\\r\\n]+/', trim($result->getMessage())); } } $this->printTaskInfo('No Git info found on remote site.'); $this->printTaskInfo('Adding all files in repo...'); // No commit saved on remote site; deploy everything in repo $result = $this->taskExec('git')->arg('ls-files')->run(); return preg_split('/[\\r\\n]+/', trim($result->getMessage())); }