繁体   English   中英

尝试将文件上传到服务器时,PHP SSH2操作失败

[英]PHP SSH2 operations failing when attempting to upload file to server

我目前正在努力使用PHP的SSH2内置库(运行版本5.5)。 我正在尝试将文件上传到SFTP服务器,如标题所示,但是我一直收到“流操作失败”错误消息。

在尝试调试代码本身之后,连接正常运行,为sftp资源正确分配了一个ID,但是,当调用fopen将文件直接写入远程服务器时,它将失败。

// open Live environment if we are not in dev
$connection = ssh2_connect($this->_settings['source_host'], 22);
$authSuccess = ssh2_auth_password($connection, $this-  >_settings['source_user'], $this->_settings['source_password']);
$sftp = ssh2_sftp($connection);

最后是fopen()调用:

if($operation == 'export') {
    $handle = fopen("ssh2.sftp://".$sftp."/remotecopy/IN/".$filename, $mode);
}

我在自己的代码中添加了调试消息,以验证_settings数组中的数据是否也被正确使用,但是我无法解释流错误。

Message:  fopen(): Unable to open ssh2.sftp://Resource id #173/PATH GOES HERE/filename.xxx on remote host

Message:  fopen(ssh2.sftp://Resource id #173/PATH GOES HERE/filename.xxx): failed to open stream: operation failed

请注意,该文件在远程主机上不存在,但是据我所知,PHP中的“ w”模式如果不存在fopen()应该创建该文件。

我不能使用其他PHP库,因为我们整个项目都使用内置的ssh2库,负责人告诉我不要使用它,因为它在其他地方都可以正常工作。

我认为,如果您使用纯PHP SFTP实现phpseclib,您会更轻松。 例如。

<?php
include('Net/SFTP.php');

$sftp = new Net_SFTP('www.domain.tld');
if (!$sftp->login('username', 'password')) {
    exit('Login Failed');
}

// puts a three-byte file named filename.remote on the SFTP server
$sftp->put('filename.remote', 'xxx');
// puts an x-byte file named filename.remote on the SFTP server,
// where x is the size of filename.local
$sftp->put('filename.remote', 'filename.local', NET_SFTP_LOCAL_FILE);
?>

phpseclib的优点之一是它正在记录日志,因此如果不起作用,则可以进行define('NET_SSH2_LOGGING', NET_SSH2_LOG_COMPLEX); 包括Net / SFTP.php之后,然后在失败的地方之后echo $sftp->getLog() 如果仍然无法正常工作,那可能会提供一些洞察力。

答案很简单,我在远程服务器上的路径格式错误。 验证我的设置后,它可以正常工作。

谢谢大家的提示和帮助。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM