在开始之前,我知道phpseclib,从我已经准备好的内容来看,这是您通常应该使用的方式。不幸的是,我正在开发一个旧的脚本,我试图避免设置phpseclib、在本地环境上进行测试、在生产上进行测试、在生产上进行测试、重构我的脚本等所需的时间。我希望有人能帮助我解决ssh2的问题。
我使用以下脚本向客户端服务器发送文件。多年来,它一直运转良好。
<?php
$url = 'their.url.com';
$userName = 'name';
$password = 'pass';
$conn = ssh2_connect($url, 22);
$auth = ssh2_auth_password($conn, $userName, $password);
// Determine whether this is a file path that needs to be opened or not
$localFilePath = 'test123.txt';
$openFile = fopen($localFilePath, "r");
$fileName = 'test.txt';
// Their server path
$remoteFilePath = "/Orders/".$fileName;
if ($auth === true) {
// Transfer file
$sftp = ssh2_sftp($conn);
file_put_contents("ssh2.sftp://".$sftp.$remoteFilePath, $openFile);
}发生了什么:我的客户把他的东西转移到了另一台服务器。它破坏了连接,他吓坏了等等。他给我更新了新服务器的凭证,我已经确认协议是SFTP - SSH文件传输协议。
问题:在更新ssh组合框url/凭据后,文件传输不再工作。
我尝试过的是:我尝试了使用Linux (而不是PHP)进行测试文件传输,它成功了。我还在使用Filezilla的时候用这种方式传输了一个文件,没问题。因此,我已经确认主机/用户/pass组合是正确的。
我抛出了file_put_contents的结果,这是错误的。
我抛弃了$conn、$auth和$sftp,以及“ssh2.s$conn”是什么样子的,结果是(按顺序排列的)
请注意,test.txt是一个非常小的文件,可以排除文件大小问题。
我还卸载并重新安装了ssh2 PECL扩展。
我确信这是由于他们的问题,因为这个脚本以前一直有效,我只是困惑为什么现在他们在他们的新服务器上失败了,我不知道如何进一步诊断这个问题。我想不出对我的服务器所做的任何改变都会影响到这一点。
任何想法都将不胜感激。
发布于 2017-01-05 00:12:24
为什么不直接使用ssh2.sftp://流呢?
file_put_contents("ssh2.sftp://{$userName}:{$password}@{$url}:22/{$remoteFilePath}", $openFile);它应该在不使用ssh连接、身份验证、移动到sftp等情况下工作。
https://stackoverflow.com/questions/41475174
复制相似问题