単一のファイルを複数のマシンにアップロードするtool_PHP チュートリアル

WBOY
リリース: 2016-07-12 08:55:08
オリジナル
902 人が閲覧しました

単一のファイルを複数のマシンにアップロードするツール

使用例:
./mooon_upload -h=192.168.10.11,192.168.10.12 -p=6000 -u=root -P='root123' -s=./abc - d=/tmp/
は、ローカル ファイル ./abc を 2 つのマシン 192.168.10.11 および 192.168.10.12 の /tmp/ ディレクトリにアップロードすることを意味します

  1. #include "mooon/net/libssh2.h"
  2. # include "mooon/sys/stop_watch.h"
  3. #include "mooon/utils/args_parser.h"
  4. #include "mooon/utils/print_color.h"
  5. #include "mooon/utils/string_utils. h"
  6. #include "mooon/utils/tokener.h"
  7. #include
  8. #include

  9. // リモートホストのカンマ区切りリスト
  10. STRING_ARG_DEFINE(h, "", "remote hosts port");
  11. // リモートホストの sshd ポート番号
  12. INTEGER_ARG_DEFINE(uint16_t, p, 22, 10, 65535, "remote hosts port");
  13. // ユーザー名
  14. STRING_ARG_DEFINE(u, "root", "リモートホストユーザー");
  15. // パスワード
  16. STRING_ARG_DEFINE(P, "", "リモートホストパスワード");

  17. //アップロードされたファイルのパス
  18. STRING_ARG_DEFINE(s, "", "アップロードされたソースファイル");
  19. // アップロード後にファイルが保存されるディレクトリのパス
  20. STRING_ARG_DEFINE (d, "", "保存するディレクトリ");

  21. // 秒単位の接続タイムアウト
  22. INTEGER_ARG_DEFINE(uint16_t, t, 10, 1, 65535, "リモートホストへのタイムアウト秒数");

  23. //結果情報
  24. struct ResultInfo
  25. {
  26. bool // Trueは実行が成功したことを示します
  27. //リモートホストのIPアドレス
    ;
  28. uint32_t 秒; // 実行にかかった時間、秒単位で正確です

  29. ResultInfo()
  30. : success(false)、秒(0)
  31. {
  32. }

  33. std::string str( ) const
  34. {
  35. std::stringタグ = 成功? "成功": "失敗";
  36. return mooon::utils::CStringUtils::format_string(" [%s %s]: %u 秒", ip.c_str(), tag.c_str(), 秒);
  37. }
  38. };

  39. inline std::ostream& 演算子 < <(std::ostream& out, const struct ResultInfo& result)
  40. {
  41. std::string tag = result.success?: "FAILURE";
  42. out << PRINT_COLOR_YELLOW << result.ip << PRINT_COLOR_NONE " << result.秒 < " 秒";
  43. }

  44. int main(int argc, char* argv[])
  45. {
  46. // コマンドラインパラメータを解析
  47. std::string errmsg;
  48. if (!mooon: :utils::parse_arguments(argc, argv , &errmsg))
  49. {
  50. fprintf(stderr, "パラメータ エラー: %sn", errmsg.c_str());
  51. exit(1);
  52. }

  53. uint 16_t port = mooon::argument::p->value();
  54. std::string ソース = mooon::argument::s->value();
  55. std::string ディレクトリ = mooon:: argument::d->value();
  56. std::string ホスト = mooon::argument::h->value();
  57. std::文字列ユーザー = mooon::argument::u ->value();
  58. std::string パスワード = mooon::argument::P->value();
  59. mooon::utils::CStringUtils ::trim(ソース);
  60. mooon::utils::CStringUtils::trim(ディレクトリ);
  61. mooon::utils::CStringUtils::trim(ホスト);
  62. mooon::utils:: CStringUtils::trim(user);
  63. mooon::utils::CStringUtils::trim(password);

  64. // パラメータをチェック (-s)
  65. if (source.empty())
  66. {
  67. fprintf(stderr , "parameter[-s] の値が設定されていません");
  68. exit(1);
  69. }

  70. // パラメータをチェックします (-d )
  71. if (directory.empty( ))
  72. {
  73. fprintf(stderr, "パラメータ[-d]の値が設定されていません");
  74. exit(1);
  75. }

  76. // パラメータを確認します ( -h)
  77. if (hosts.empty())
  78. {
  79. // 環境変数から値を取得してみます
  80. const char* hosts_ = getenv("HOSTS");
  81. if (NULL == hosts_)
  82. {
  83. fprintf(stderr, "パラメータ[-h]の値が設定されていません");
  84. exit(1);
  85. }

  86. hosts= hosts_ ;
  87. mooon::utils::CStringUtils::trim(hosts);
  88. if (hosts.empty())
  89. {
  90. fprintf (stderr, "parameter[-h] の値が設定されていません");
  91. exit(1);
  92. }
  93. }

  94. // パラメータを確認します (-u)
  95. if (user.empty())
  96. {
  97. fprintf(stderr, "パラメータ[-u]の値が設定されていません");
  98. exit(1);
  99. }

  100. // 检查パラメータ(-P)
  101. if (password.empty())
  102. {
  103. fprintf(stderr, "パラメータ[-P]の値が設定されていません");
  104. exit(1);
  105. }

  106. std::vector hosts_ip;
  107. const std::string&remote_hosts_ip = hosts;
  108. int num_remote_hosts_ip = mooon::utils::CTokener::split(&hosts_ip, Remote_hosts_ip, ",", true);
  109. if (0 == num_remote_hosts_ip)
  110. {
  111. fprintf(stderr, "parameter[-h] errorn");
  112. exit(1);
  113. }

  114. std::string リモートファイルパス = ディレクトリ +標準::string("/") + mooon::utils::CStringUtils::extract_filename(source);
  115. std::vector results(num_remote_hosts_ip);
  116. for (int i=0; i
  117. {
  118. bool color = true;
  119. const std::string&remote_host_ip = hosts_ip[i];
  120. results[i].ip = remote_host_ip;
  121. results[i].success = false;

  122. fprintf(stdout, "["PRINT_COLOR_YELLOW"%s"PRINT_COLOR_NONE"]n",remote_host_ip. c_str());
  123. fprintf(stdout, PRINT_COLOR_GREEN);

  124. mooon::sys::CStopWatch stop_watch;
  125. try
  126. {
  127. int file_size = 0;
  128. ムーン::net::CLibssh2 libssh2(remote_host_ip, ポート, ユーザー, パスワード, mooon::argument::t->value());
  129. libssh2.upload(source, リモートファイルパス, &file_size);

  130. fprintf(stdout, "["PRINT_COLOR_YELLOW"%s"PRINT_COLOR_NONE"] 成功: %d bytesn",remote_host_ip.c_str(), file_size);
  131. results[i].success = true;
  132. }
  133. catch (mooon::sys::CSyscallException& ex)
  134. {
  135. if (color)
  136. fprintf(stdout, PRINT_COLOR_NONE); // color = true;

  137. fprintf(stderr, "["PRINT_COLOR_RED"%s"PRINT_COLOR_NONE"] 失敗しました: %sn", Remote_host_ip.c_str(), ex.str().c_str());
  138. }
  139. catch (mooon::utils::CException& ex)
  140. {
  141. if (color)
  142. fprintf(stdout, PRINT_COLOR_NONE); // color = true;

  143. fprintf(stderr, "["PRINT_COLOR_RED"%s"PRINT_COLOR_NONE"] 失敗しました: %sn", Remote_host_ip.c_str(), ex.str().c_str());
  144. }

  145. results[i].秒 = stop_watch.get_elapsed_microseconds() / 1000000;
  146. std::cout << std::endl;
  147. }

  148. // 出总结
  149. std::cout << std::endl;
  150. std::cout << "=================================" << std::endl;
  151. int num_success = 0; // 成功した数
  152. int num_failure = 0; // 失われた数
  153. for (std::vector::size_type i=0; i
  154. {
  155. const struct ResultInfo& result_info = results[i];
  156. std::cout <<結果情報 << std::endl;

  157. if (result_info.success)
  158. ++num_success;
  159. else
  160. ++num_failure;
  161. }
  162. std: :cout << "成功: " << num_success << "、失敗: " << num_failure << std::endl;

  163. return 0;
  164. }
http://www.bkjia.com/PHPjc/1117250.html

www.bkjia.com

tru​​e

技術記事上にあるファイルを多台机ツールに転送 使用例: ./mooon_upload -h=192.168.10.11,192.168.10.12 -p=6000 -u=root -P='root123' -s=./abc -d=/tmp/表示将本の地の文./abc 上传...
関連ラベル:
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート