クラス Ssh2_crontab_manager {
プライベート $connection;
プライベート $パス;
プライベート $ハンドル;
プライベート $cron_file;
関数 __construct($host=NULL, $port=NULL, $username=NULL, $password=NULL)
{
$path_length = strrpos(__FILE__, "/");
$this->path = substr(__FILE__, 0, $path_length) 。 '/';
$this->ハンドル = 'crontab.txt';
$this->cron_file = "{$this->パス}{$this->ハンドル}";
試してみてください
{
if (is_null($host) || is_null($port) || is_null($username) || is_null($password)) throw new Exception("ホスト、ポート、ユーザー名、およびパスワードの引数を指定する必要があります!");
$this->connection = @ssh2_connect($host, $port);
if ( ! $this->connection) throw new Exception("SSH2 接続を確立できませんでした。");
$authentication = @ssh2_auth_password($this->connection, $username, $password);
if ( ! $authentication) throw new Exception("パスワード '{$password}' を使用して '{$username}' を認証できませんでした。");
}
catch (例外 $e)
{
$this->error_message($e->getMessage());
}
}
パブリック関数 exec()
{
$argument_count = func_num_args();
試してみてください
{
if ( ! $argument_count) throw new Exception("実行するものが何もありません。引数が指定されていません。");
$arguments = func_get_args();
$command_string = ($argument_count > 1) ? implode(" && ", $arguments) : $arguments[0];
$stream = @ssh2_exec($this->connection, $command_string);
if ( ! $stream) throw new Exception("指定されたコマンドを実行できません: {$command_string}");
}
catch (例外 $e)
{
$this->error_message($e->getMessage());
}
$this を返します;
}
パブリック関数 write_to_file($path=NULL, $handle=NULL)
{
if ( ! $this->crontab_file_exists())
{
$this->handle = (is_null($handle)) ? $this->ハンドル : $handle;
$this->path = (is_null($path)) ? $this->path : $path;
$this->cron_file = "{$this->パス}{$this->ハンドル}";
$init_cron = "crontab -l > {$this->cron_file} && [ -f {$this->cron_file} ] || > {$this->cron_file}";
$this->exec($init_cron);
}
$this を返します。
}
パブリック関数remove_file()
{
if ($this->crontab_file_exists()) $this->exec("rm {$this->cron_file}");
$this を返します;
}
パブリック関数 append_cronjob($cron_jobs=NULL)
{
if (is_null($cron_jobs)) $this->error_message("追加するものはありません! cron ジョブまたは cron ジョブの配列を指定してください。");
$append_cronfile = "エコー '";
$append_cronfile .= (is_array($cron_jobs)) ? implode("n", $cron_jobs) : $cron_jobs;
$append_cronfile .= "' >> {$this->cron_file}";
$install_cron = "crontab {$this->cron_file}";
$this->write_to_file()->exec($append_cronfile, $install_cron)->remove_file();
$this を返します。
}
パブリック関数remove_cronjob($cron_jobs=NULL)
{
if (is_null($cron_jobs)) $this->error_message("削除するものはありません! cron ジョブまたは cron ジョブの配列を指定してください。");
$this->write_to_file();
$cron_array = file($this->cron_file, FILE_IGNORE_NEW_LINES);
if (空($cron_array))
{
$this->remove_file()->error_message("削除するものはありません! cronTab はすでに空です。");
}
$original_count = count($cron_array);
if (is_array($cron_jobs))
{
foreach ($cron_jobs を $cron_regex として) $cron_array = preg_grep($cron_regex, $cron_array, PREG_GREP_INVERT);
}
それ以外
{
$cron_array = preg_grep($cron_jobs, $cron_array, PREG_GREP_INVERT);
}
return ($original_count === count($cron_array)) ? $this->remove_file() : $this->remove_crontab()->append_cronjob($cron_array);
}
パブリック関数remove_crontab()
{
$this->remove_file()->exec("crontab -r");
$this を返します;
}
プライベート関数 crontab_file_exists()
{
return file_exists($this->cron_file);
}
プライベート関数 error_message($error)
{
die(" エラー: {$error} ");
}
}
|