php - ssh2连接到sftp服务器在laravel中不起作用
问题描述
我正在尝试在 lavarel proyect 中连接到具有 ssh2_php 扩展名的 sftp 服务器。连接在一个简单的 php 脚本中运行良好,但是当我将它带到空白 laravel 项目中的控制器时,相同的代码不起作用。
这是控制器的代码
<?php
namespace App\Http\Controllers;
use Illuminate\Routing\Controller as BaseController;
class Controller extends BaseController
{
public function test() {
try {
$ssh = ssh2_connect(SFTP_SERVER, 22);
$login = ssh2_auth_password($ssh, SFTP_USER, SFTP_PASS);
$sftp = ssh2_sftp($ssh);
$sftp_fd = intval($sftp);
$filesystem = opendir("ssh2.sftp://$sftp_fd/.");
} catch (\Throwable $e) {
return $e->getMessage();
}
}
}
这是邮递员的错误响应:
正如您所看到的,由于某种原因,catch 没有捕获错误。
我正在使用 php 7.2 版
任何想法?
提前致谢
解决方案
这些ssh2_*
函数在失败时不会抛出异常。阅读文档:https ://www.php.net/manual/en/function.ssh2-connect.php (还可以查看您正在使用的其他功能)
如果你想在连接失败时抛出异常,我会做这样的事情:
$ssh = ssh2_connect(SFTP_SERVER, 22);
if (!$ssh) throw Exception("ssh2_connect failed");
# Do the same for the other functions, check their documentation for return values that designate failure
也可能是一切都按预期工作,在这种情况下您根本没有发送响应,这可能解释了ECONNRESET
.
推荐阅读
- reactjs - Nginx 找不到 react docker 容器的 js 文件
- node.js - Express 中间件被 CORS 策略阻止(预检 OPTIONS 请求遇到授权错误)
- c++ - 如何设置 std::string,以使其附加失败(或不可观察)?
- data-structures - 在链表中追加
- java - 如何拆分字符串(基于各种分隔符)但不保留空格?
- sql - 如何为返回的每个集合选择第一行和最后一行
- python - 如何删除来自文件的 3d python 列表中所有出现的字符
- azure - 可以使用本地 Kubernetes 来管理部署在混合云中的集群吗?
- wpf - 我无法在多值转换器中获取视图模型的属性
- c# - 使用 Group by 从第二个(右)连接实体获取属性