首頁 > 後端開發 > PHP問題 > php怎麼實現sftp上傳

php怎麼實現sftp上傳

藏色散人
發布: 2023-03-12 14:34:01
原創
2815 人瀏覽過

php實作sftp上傳的方法:1、建立程式碼「class SFTPConnection private $connection...try{...}catch{...}」;2、執行「sftp -oPort=port user @server”語句即可。

php怎麼實現sftp上傳

本文操作環境: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
來源:php.cn
本網站聲明
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn
熱門教學
更多>
最新下載
更多>
網站特效
網站源碼
網站素材
前端模板