【问题标题】:How to using phpseclib on laravel 5 php如何在 laravel 5 php 上使用 phpseclib
【发布时间】:2016-09-26 04:27:15
【问题描述】:

我正在制作一个基于 laravel 的应用程序,它允许它通过 SSH 与 linux 服务器通信,我通常使用 phpseclib 与服务器通信,例如重启等,但是当我使用 laravel 构建应用程序时,我不能或不会而不是看到如何与 laravel 集成的方式我试图包含 php 手册但仍然无法错误 Class 'phpseclib\Net\ Net_SSH2' not found, my current code

    public function store(Request $request)
{
    // create ssh account and inserted into database here
    if(Auth::check()) // make sure user has been logging on
    {
      if($dump = DB::table('servers')->where('key', $request->_key)->get())
      {
        if($prices = DB::table('app_data')->get())
        {
          $price = $prices[0]->prices;
          if(DB::table('ssh_users')->where('name', $request->sshname)->where('on_server', $dump[0]->ip)->count() > 0 )
          {
            return view('create')->with('userexist', $request->sshname);
          }
          else
          {
            include(app_path() . "/lib/phpseclib/phpseclib/phpseclib/Net/SSH2.php");
            $command = new \phpseclib\Net\Net_SSH2($dump[0]->ip);
            $valid = array(
              'sshuser'     => $request->sshname,
              'sshpass'     => $request->sshpass,
              'sshcreated'  => date('d/m/Y'),
              'sshexpired'  => $request->sshexpired,
              'onserver'    => $dump[0]->name,
              'serveruser'  => $dump[0]->user,
              'serverpass'  => $dump[0]->password,
              'sshprice'    => $price,
              'command'     => $command
            );
            if(DB::table('ssh_users')->insert([
              'name'        => $request->sshname,
              'password'    => $request->sshpass,
              'created_at'  => date('d/m/Y'),
              'expired_on'  => $request->sshexpired,
              'on_server'   => $dump[0]->ip,
              'reseller'    => Auth::user()->name
            ])) {
              return view('create')->with('valid', $valid);
            }
          }
        }
        else
        {
          return view('create')->with('error', $request->sshname);
        }
      }
      else
      {
        return view('create')->with('serverabort', $request->sshname);
      }
    }
}

【问题讨论】:

    标签: php laravel phpseclib


    【解决方案1】:

    解决方案 1:

    检查/lib/phpseclib/phpseclib/phpseclib/Net/SSH2.php 并注意使用的类名,它可能是SSH2,而不是Net_SSH2(PSR-4 之前的命名空间)。

    然后更新该行,例如到:

    $command = new \phpseclib\Net\SSH2($dump[0]->ip);

    解决方案 2:

    将 phpseclib 安装为 composer 包

    composer require phpseclib/phpseclib

    然后它将自动加载,您将不需要include()

    【讨论】:

    • 非常感谢 :D 在我检查 SSH2.php 后,类名是 SSH2 而不是 Net_SSH2 呵呵,但在 phpseclib.sourceforge.net 上是 Net_SSH2 X_X,反正 +1 呵呵
    • @RizalFakhri - 如果您使用的是 phpseclib 2.0,它是 SSH2。如果您使用的是 phpseclib 1.0,它是 Net_SSH2。 phpseclib 2.0 是命名空间,而 1.0 不是。在这方面,tanerkuc 的回答似乎有点混乱。他给你的示例代码使用了命名空间,但他要求你确保类的名称是非命名空间的名称......我想我要编辑他的答案。
    • @neubert 谢谢,太棒了:D 无论如何不要担心它已经成功,我的项目已经完成,你可以查看github.com/rizalio/sshpanelhehehe 谢谢:D
    猜你喜欢
    • 1970-01-01
    • 2015-06-19
    • 2020-12-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-22
    • 2022-12-17
    相关资源
    最近更新 更多