Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <?php
- /*
- * Zde je konfigurace připojení a nalezení projektu.
- * Cesty zapisujte relativně v závislosti na pozici programu Updater.
- * Updater musí být umístěn v rootu projektu
- * Všechny adresy uvádějte bez konečného lomítka:
- * Napříkad: "/www/projekt1/trunk" ne takhle: "/www/projekt1/thrunk/"!!!!!!!!!!!
- */
- //link na FPT
- $source_ftp = "ftp.promitanivlukavci.unas.cz";
- //$source_ftp = "guardian.ebozp.cz";
- //usrname na server na FTP
- $source_usrname = "promitanivlukavci.unas.cz";
- //$source_usrname = "guardian.ebozp.cz";
- //heslo na FTP
- $source_password = "m67ukmsc";
- //$source_password = "vykoureny4pera";
- //folder na FTP
- $remote_folder = "test";
- //logovaci soubor
- $source_log = "updater_log";
- //ingnor list
- $source_ignore_list = "updater_ignorelist";
- //zdrojova hashovaci tabulka
- $source_hash_table = "updater_hashtable";
- /*
- * Začátek samotného programu
- * Inicializuji si třídu FTP, která vše vykoná
- */
- $ftp = new ftp($source_ftp, $source_usrname, $source_password, $source_ignore_list, $source_log, $remote_folder, $source_hash_table);
- if ($ftp->connect()) {
- $ftp->write_log("Přihlášen na FTP!");
- //jdu do dir na webu
- $ftp->chdir($ftp->remote_folder);
- //inituju deletelist
- $ftp->init_delete_list($ftp->dir_list($ftp->current_dir()));
- $cykly = 0;
- //projizdim locale adresar
- for ($i = 0; $i + 1 <= sizeof($ftp->directory_todo); $i++) {
- //osetreni deletovani adresaru na netu
- if ($i != 0) {
- $ftp->chdir("/" . $ftp->remote_folder . "/" . $ftp->directory_todo[$i]);
- $ftp->init_delete_list($ftp->dir_list($ftp->current_dir()));
- }
- //start rootu localu
- $directory = $ftp->dir_list_local($ftp->directory_todo[$i]);
- //projizdim adresáře
- foreach ($directory as $key => $value) {
- $cykly++;
- echo "DIR:" . $ftp->directory_todo[$i];
- echo "-> TODO:" . $value;
- $value_ke_kopceni_souboru = $value;
- $ftp->chdir("/" . $ftp->remote_folder . "/" . $ftp->directory_todo[$i]);
- //osetreni zanorenych adresářů
- if ($value != "." && $value != ".." && $i != 0)
- $value = $ftp->directory_todo[$i] . $value;
- //relevantni adresare pridavam do fronty
- if ($ftp->is_relevant_dir_local($value) && !$ftp->is_ignored($value)) {
- $ftp->directory_todo[] = $value . "/";
- echo " - davam do fronty";
- //directory nemazu
- $ftp->deletelist["/" . $ftp->remote_folder . "/" . $value] = false;
- $x = strrchr($value, "/");
- $y = substr($value, $x - 1);
- if ($ftp->make_dir($y)) {
- $ftp->make_folder += 1;
- }
- echo ": make";
- }
- //relevantni soubory ke kopceni
- elseif ($ftp->is_relevant_file_local($value) && !$ftp->is_ignored($value)) {
- echo " - zkousim";
- //soubor nemazu
- $ftp->deletelist["/" . $ftp->remote_folder . "/" . $value] = false;
- if ($ftp->compare($value)) {
- echo ": stejne";
- } else {
- echo ": jine - kopiruju: " . $value . " ";
- $ftp->copy_file += 1;
- $ftp->copy_file_byte += ( filesize($value) / 1024);
- echo "(" . $value . ":" . $value_ke_kopceni_souboru . ") ->";
- if ($ftp->put($value, $value_ke_kopceni_souboru))
- echo "true";
- else
- echo "false";
- }
- }
- else
- echo " -ignore";
- echo "<br />";
- }
- }
- //mazu server files
- $ftp->delete_remote_files();
- //savuje hashtable
- $ftp->save_hashtable();
- echo "<br>Počet prozkoušených adresářů:" . $i;
- echo "<br>Počet prozkoušených INODů:" . $cykly;
- $ftp->write_log("Operace proběhla úspěšně! Na serveru vytvořeno " . $ftp->make_folder . " adresářů a zkopírováno " . $ftp->copy_file . " souborů o velikosti " . $ftp->copy_file_byte . " KB.");
- } else {
- $ftp->write_log("Nepodařilo se přihlásit na FTP!");
- die();
- }
- /*
- * Definice tříd
- */
- class ftp {
- private $conn_id;
- private $host;
- private $username;
- private $password;
- private $port;
- public $directory_todo;
- public $ignorelist;
- public $source_ignorelist;
- public $hashtable;
- public $new_hashtable;
- public $source_hashtable;
- public $source_log;
- public $timeout = 90;
- public $passive = false;
- public $ssl = false;
- public $system_type = '';
- public $remote_folder;
- public $deletelist;
- //pocitadla
- public $delete_folder = 0;
- public $delete_file = 0;
- public $make_folder = 0;
- public $copy_file = 0;
- public $copy_file_byte = 0;
- private $fstream_log;
- public function __construct($host, $username, $password, $source_ignore_list, $source_log, $remote_folder, $source_hash_table, $port = 21) {
- $this->host = $host;
- $this->username = $username;
- $this->password = $password;
- $this->port = $port;
- $this->directory_todo[0] = __DIR__;
- $this->ignorelist = $this->load_ignore_list($source_ignore_list);
- $this->source_ignorelist = $source_ignore_list;
- $this->source_log = $source_log;
- $this->source_hashtable = $source_hash_table;
- $this->hashtable = $this->load_hash_table($source_hash_table);
- $this->fstream_log = fopen($source_log, "a");
- $this->remote_folder = $remote_folder;
- }
- public function connect() {
- if ($this->ssl == false) {
- $this->conn_id = ftp_connect($this->host, $this->port);
- } else {
- if (function_exists('ftp_ssl_connect')) {
- $this->conn_id = ftp_ssl_connect($this->host, $this->port);
- } else {
- return false;
- }
- }
- $result = ftp_login($this->conn_id, $this->username, $this->password);
- if ($result == true) {
- ftp_set_option($this->conn_id, FTP_TIMEOUT_SEC, $this->timeout);
- if ($this->passive == true) {
- ftp_pasv($this->conn_id, true);
- } else {
- ftp_pasv($this->conn_id, false);
- }
- $this->system_type = ftp_systype($this->conn_id);
- return true;
- } else {
- return false;
- }
- }
- public function put($local_file_path, $remote_file_path, $mode = FTP_ASCII) {
- if (ftp_put($this->conn_id, $remote_file_path, $local_file_path, $mode)) {
- return true;
- } else {
- return false;
- }
- }
- public function get($local_file_path, $remote_file_path, $mode = FTP_ASCII) {
- if (ftp_get($this->conn_id, $local_file_path, $remote_file_path, $mode)) {
- return true;
- } else {
- return false;
- }
- }
- public function chmod($permissions, $remote_filename) {
- if ($this->is_octal($permissions)) {
- $result = ftp_chmod($this->conn_id, $permissions, $remote_filename);
- if ($result) {
- return true;
- } else {
- return false;
- }
- } else {
- throw new Exception('$permissions must be an octal number');
- }
- }
- public function chdir($directory) {
- ftp_chdir($this->conn_id, $directory);
- }
- public function delete($remote_file_path) {
- if (ftp_delete($this->conn_id, $remote_file_path)) {
- return true;
- } else {
- return false;
- }
- }
- public function make_dir($directory) {
- if (ftp_mkdir($this->conn_id, $directory)) {
- return true;
- } else {
- return false;
- }
- }
- public function rename($old_name, $new_name) {
- if (ftp_rename($this->conn_id, $old_name, $new_name)) {
- return true;
- } else {
- return false;
- }
- }
- public function remove_dir($directory) {
- if (ftp_rmdir($this->conn_id, $directory)) {
- return true;
- } else {
- return false;
- }
- }
- public function dir_list($directory) {
- $contents = ftp_nlist($this->conn_id, $directory);
- return $contents;
- }
- public function cdup() {
- ftp_cdup($this->conn_id);
- }
- public function current_dir() {
- return ftp_pwd($this->conn_id);
- }
- private function is_octal($i) {
- return decoct(octdec($i)) == $i;
- }
- public function __destruct() {
- if ($this->conn_id)
- ftp_close($this->conn_id);
- fclose($this->fstream_log);
- }
- public function compare($value) {
- $local = md5(fread(fopen($value, r), filesize($value)));
- if ($this->hashtable[$value] == $local) {
- $this->new_hashtable[$value] = $local;
- return true;
- } else {
- $this->new_hashtable[$value] = $local;
- return false;
- }
- }
- public function dir_list_local($directory) {
- if ($handle = opendir($directory)) {
- while ($file = readdir($handle)) {
- $polozky[count($polozky)] = $file;
- }
- closedir($handle);
- sort($polozky);
- return $polozky;
- }
- }
- public function is_relevant_dir_local($directory) {
- if (is_dir($directory) && $directory != "." && $directory != "..")
- return true;
- else
- return false;
- }
- public function is_relevant_file_local($directory) {
- if (!is_dir($directory) && ($directory != "updater.php" && $directory != "updater_tmp" && $directory != $this->source_ignorelist && $directory != $this->source_log && $directory != $this->source_hashtable))
- return true;
- else
- return false;
- }
- public function load_ignore_list($ignorelist) {
- if (File_Exists($ignorelist)) {
- $data = file($ignorelist);
- return $data;
- }
- }
- public function load_hash_table($ignorelist) {
- if (File_Exists($ignorelist)) {
- $data = file($ignorelist);
- foreach ($data as $key => $value) {
- $split = explode("**", $value);
- $parcsplit = chop($split[0]);
- $return[$parcsplit] = chop($split[1]);
- }
- return $return;
- }
- }
- public function save_hashtable() {
- $fstream = fopen($this->source_hashtable, "w");
- foreach ($this->new_hashtable as $key => $value) {
- fwrite($fstream, $key . "**" . $value . "\n");
- }
- fclose($fstream);
- }
- public function is_ignored($file) {
- foreach ($this->ignorelist as $key => $value) {
- if ($file == chop($value))
- return true;
- }
- return false;
- }
- public function init_delete_list($list) {
- foreach ($list as $key => $value) {
- if (!array_key_exists($value, $this->deletelist))
- $this->deletelist[$value] = true;
- }
- $this->deletelist[$this->current_dir() . "/."] = false;
- $this->deletelist[$this->current_dir() . "/.."] = false;
- }
- public function delete_remote_files() {
- echo "***MAZANI***<br />";
- foreach ($this->deletelist as $key => $value) {
- if ($value == true) {
- echo "MAZU: \"" . $key . "\"";
- if($this->recursive_remove_directory($key) || $this->delete($key)) echo "-> true";
- else echo "-> false";
- }
- else
- echo "NEMAZU: \"" . $key . "\"";
- echo "<br />";
- }
- }
- public function recursive_remove_directory($directory, $empty=FALSE) {
- if (substr($directory, -1) == '/')
- $directory = substr($directory, 0, -1);
- $handle = $this->dir_list($directory);
- foreach ($handle as $key => $value) {
- if (substr($value, -1) == '.')
- $value = substr($value, 0, -2);
- if (substr($value, -2) == '..')
- $value = substr($value, 0, -3);
- $path = $value;
- //echo "*" . $path . "*!" . $path . "! ";
- $this->delete($path);
- $this->recursive_remove_directory($path);
- }
- if ($empty == FALSE) {
- if ($this->remove_dir($directory))
- return FALSE;
- }
- return TRUE;
- }
- public function write_log($string) {
- fwrite($this->fstream_log, date("H:i:s j.n.Y") . ": " . $string . "\n");
- }
- }
- ?>
Add Comment
Please, Sign In to add comment