• 技术文章 >后端开发 >PHP问题

    php怎么实现sftp上传

    藏色散人藏色散人2021-09-14 10:57:30原创90

    php实现sftp上传的方法:1、创建代码“class SFTPConnection private $connection...try{...}catch{...}”;2、执行“sftp -oPort=port user@server”。

    本文操作环境:windows7系统、PHP7.1版,DELL G3电脑

    php怎么实现sftp上传?

    php 实现SFTP上传文件

    php 实现sftp文件上传完全可以用php.net 官网中的方式,代码如下:

    class SFTPConnection
    {
        private $connection;
        private $sftp;
    
        public function __construct($host, $port=22)
        {
            $this->connection = @ssh2_connect($host, $port);
            if (! $this->connection)
                throw new Exception("Could not connect to $host on port $port.");
        }
    
        public function login($username, $password)
        {
            if (! @ssh2_auth_password($this->connection, $username, $password))
                throw new Exception("Could not authenticate with username $username " .
                                    "and password $password.");
    
            $this->sftp = @ssh2_sftp($this->connection);
            if (! $this->sftp)
                throw new Exception("Could not initialize SFTP subsystem.");
        }
    
        public function uploadFile($local_file, $remote_file)
        {
            $sftp = $this->sftp;
            $stream = @fopen("ssh2.sftp://$sftp$remote_file", 'w');
    
            if (! $stream)
                throw new Exception("Could not open file: $remote_file");
    
            $data_to_send = @file_get_contents($local_file);
            if ($data_to_send === false)
                throw new Exception("Could not open local file: $local_file.");
    
            if (@fwrite($stream, $data_to_send) === false)
                throw new Exception("Could not send data from file: $local_file.");
    
            @fclose($stream);
        }
    }
    
    try
    {
        $sftp = new SFTPConnection("localhost", 22);
        $sftp->login("username", "password");
        $sftp->uploadFile("/tmp/to_be_sent", "/tmp/to_be_received");
    }
    catch (Exception $e)
    {
        echo $e->getMessage() . "\n";
    }

    但是在进行中遇到了一个问题, 我的php版本是 PHP 5.6.31 (cli) (built: Aug 2 2017 15:05:23) , 在执行

    $stream = @fopen("ssh2.sftp://$sftp$remote_file", 'w');

    fopen的时候 执行文件 会报 "Segmentation fault" 的错误, 然后变成以下方式便可以解决

    $stream = @fopen("ssh2.sftp://" . intval($sftp) . $remote_file, 'w');

    其中,在实现sftp上传的时候,没有在意上传文件和上传目录的区别(例如: /upload 和 /upload/test.txt 的问题), 导致每次执行php 都会报 fopen(): Unable to open ssh2.sftp://5/upload on remote host. 问题解决方法就是 认真, 大写的认真

    以上就是php做的, 只要登录sftp服务器 进行查看便知道结果.

    sftp 命令登录方式:

    sftp -oPort=port user@server 然后输入密码, 进去之后可以到相对的目录查看文件是否存在.

    推荐学习:《PHP视频教程

    以上就是php怎么实现sftp上传的详细内容,更多请关注php中文网其它相关文章!

    声明:本文原创发布php中文网,转载请注明出处,感谢您的尊重!如有疑问,请联系admin@php.cn处理
    专题推荐:php
    上一篇:php __autoload 失效怎么办 下一篇:php怎么替换链接为空
    线上培训班

    相关文章推荐

    • php连接sftp有什么用• sftp和ftp的区别是什么?• Linux安装配置vsftp搭建FTP的详细配置• linux运维之搭建出符合自己要求的vsftp服务

    全部评论我要评论

  • 取消发布评论发送
  • 1/1

    PHP中文网