2016-09-24 5 views
1

Я делаю приложение на основе laravel, которое позволяет ему связываться с Linux-сервером через SSH, я обычно использую phpseclib для связи с серверами, такими как перезагрузка и другие, но когда я создаю приложение с Laravel я не мог или не хотел бы видеть способ, как интегрировать с Laravel я попытался включить руководство по PHP, но до сих пор не может ошибка «phpseclib \ Net \ Net_SSH2» класс не найден, мой текущий кодКак использовать phpseclib на laravel 5 php

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); 
     } 
    } 
} 

ответ

1

Решение 1:

Проверьте /lib/phpseclib/phpseclib/phpseclib/Net/SSH2.php и учтите, какой класс используется имя, оно может быть SSH2, а не Net_SSH2 (предварительное пространство имен PSR-4).

Затем обновите линию, например. to:

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

Решение 2:

Установите phpseclib как пакет композитора

composer require phpseclib/phpseclib

Тогда будет Автозагружаемый и вам не нужен include()

+0

Большое спасибо: D это работа после того, как я проверил SSH2.php имя класса SSH2, а не Net_SSH2 hehehe, но на http://phpseclib.sourceforge.net есть Net_SSH2 X_X, в любом случае +1 hehe –

+0

@RizalFakhri - это SSH2, если вы используете phpseclib 2.0. Если вы используете phpseclib 1.0, это Net_SSH2. phpseclib 2.0 - это пространство имен, а 1.0 - нет. В этом отношении ответ Танеркука кажется немного смущенным. Пример кода, который он дал вам, использует пространства имен, но он просит вас убедиться, что имя класса является именем, отличным от имени пространства имен ... Я думаю, что я отредактирую его ответ. – neubert

+1

@neubert спасибо, что это потрясающе: D в любом случае не волнуйтесь, что это сработало, и мой проект уже завершен, вы можете проверить https://github.com/rizalio/sshpanel hehehe спасибо: D –

Смежные вопросы