我需要编写一个脚本,每天晚上作为 cron 作业运行,通过 sftp 将一些报告文件传输到另一台服务器。
报告文件每晚使用另一个 cron 以“support_[date].csv”和“download_[date].csv”格式创建。
我想知道您是否对如何执行以下操作有任何指示:
- 查找最近 [日期] 创建的 2 个文件
- 使用 SFTP 将这些文件复制到另一台服务器
我已经尝试了几个使用 ssh2 扩展的 PHP 脚本,但无济于事。有没有办法使用shell脚本来做到这一点?老实说,这不是我非常熟悉的东西(因此最初沿着 PHP 路线走)
这是我的 PHP 脚本之一,它不起作用:
$src = 'test.csv';
$filename = 'test.csv';
$dest = '/destination_directory_on_server/'.$filename;
$connection = ssh2_connect('example.com', 22);
ssh2_auth_password($connection, 'username', 'password');
// Create SFTP session
$sftp = ssh2_sftp($connection);
$sftpStream = fopen('ssh2.sftp://'.$sftp.$dest, 'w');
try {
if (!$sftpStream) {
throw new Exception("Could not open remote file: $dest<br>");
}
$data_to_send = file_get_contents($src);
if ($data_to_send === false) {
throw new Exception("Could not open local file: $src.<br>");
}
if (fwrite($sftpStream, $data_to_send) === false) {
throw new Exception("Could not send data from file: $src.<br>");
} else {
//Upload was successful, post-upload actions go here...
}
fclose($sftpStream);
} catch (Exception $e) {
//error_log('Exception: ' . $e->getMessage());
echo 'Exception: ' . $e->getMessage();
if($sftpStream) {fclose($sftpStream);}
}
这是我收到的错误消息:
警告:fopen() [function.fopen]:在第 17 行 /path_to_script/sftp-test.php 的服务器配置中禁用 URL 文件访问
警告:fopen(ssh2.sftp://Resource id
3/destination_directory_on_server/test.csv)
[function.fopen]:无法打开流:在第 17 行的 /path_to_script/sftp-test.php 中找不到合适的包装器异常:无法打开远程文件:/destination_directory_on_server/test.csv