dqxafj6830 2010-02-23 11:45
浏览 184

使用SFTP和PHP或shell / terminal脚本传输文件

I need to write a script that is run as a cron job every night which transfers some report files via sftp to another server.

The report files are created every night using another cron in the format 'support_[date].csv' & 'download_[date].csv'.

I'm wondering if you had any pointers on how to do the following:

  1. Find the 2 files created on latest [date]
  2. Copy these files to another server using SFTP

I've tried several PHP scripts utilising the ssh2 extension, but to no avail. Is there a way to do it using a shell script? It's not something I am hugely familiar with to be honest (hence going down the PHP route initially)

This was one of my PHP scripts which didn't work:

$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...


        } catch (Exception $e) {

            //error_log('Exception: ' . $e->getMessage());
           echo 'Exception: ' . $e->getMessage();
            if($sftpStream) {fclose($sftpStream);}


This were the error messages I got:

Warning: fopen() [function.fopen]: URL file-access is disabled in the server configuration in /path_to_script/sftp-test.php on line 17

Warning: fopen(ssh2.sftp://Resource id


[function.fopen]: failed to open stream: no suitable wrapper could be found in /path_to_script/sftp-test.php on line 17 Exception: Could not open remote file: /destination_directory_on_server/test.csv

  • 写回答

6条回答 默认 最新

  • donglu7816 2010-02-24 12:43

    Muchos kudos to ghostdog74! Managed to get this working, but with sftp.

    First I managed to set up key authentication, then partly using ghostdog74's script I did this and it worked perfectly!

    cd /directorywithfilesin
    latest_download=$(ls -1tr download* | tail -1)
    latest_support=$(ls -1tr support* | tail -1)
    sftp username@example.com <<EOF
    cd /dir_to_copy_to
    put $latest_download
    put $latest_support


    本回答被题主选为最佳回答 , 对您是否有帮助呢?



  • ¥15 关于shodan搜索网络摄像头的各种方法详解
  • ¥15 求PHDA糖尿病并发症数据集,有偿
  • ¥15 为什么AVL fire DVI 界面里面的response Editor project 中的Summary result 点不了
  • ¥20 中标麒麟系统V4.0,linux3.10.0的内核,3A4000处理器,如何安装英伟达或AMD的显卡驱动,
  • ¥20 求文心中文心理分析系统(TextMind)
  • ¥15 chipyard环境搭建问题
  • ¥15 python,pyopenGL的OBV渲染无法设置透明
  • ¥20 matlab可以把多个二维图合成为三维瀑布图吗
  • ¥15 EEPROM,软件i2c
  • ¥500 求解读该段JS代码,需要知道是用干什么的