phpseclib 2.0 не может использовать Composer для создания автозагрузки - PullRequest
0 голосов
/ 25 марта 2020

Я работаю в компании, в которой наши серверы и компьютер более плотно заблокированы, чем ... ну, вообразите что-то действительно трудное. Это означает, что я не могу использовать composer или установить его без горы документов. Я разработчик, обычно программирую на JS, а не php, но для этого проекта мне нужно получить информацию о CA C X509 со смарт-карт. Я занимался этим около 4 часов, пытаясь заставить работать phpseclib. Имейте в виду, я едва понимаю php. Я следую указаниям github и веб-сайта, в основном я скачал и распаковал файлы для 2.0 и поместил их в свой каталог, я следую примерам с веб-сайта, таким как http://phpseclib.sourceforge.net/x509/2.0/examples.html#getpublickey. но когда я делаю:

$x509 = new X509();
$x509->loadX509($_SERVER['SSL_CLIENT_CERT']);
echo $x509->getPublicKey();

Я получаю ошибку: Неустранимая ошибка: класс 'X509' не найден в ...

Я также пробовал другие вещи, такие как включение каталога в файл, например:

$x509 = new phpseclib\File\X509();
$x509->loadX509($_SERVER['SSL_CLIENT_CERT']);
echo $x509->getPublicKey();

и (новый phpseclib_File_X509) получить ошибку: Неустранимая ошибка: класс 'phpseclib \ File \ X509' не найден в ...

Пожалуйста, помогите! Мне никогда не приходилось делать автозагрузку, и я чувствую, что это проблема? Как файлы не загружаются? Я также сделал оба ниже в отдельное время, но безрезультатно.

include'phpseclib/File/X509.php';

use phpseclib\File\X509;

Когда я помещаю журнал ошибок в X509, чтобы проверить там, я получаю, что ASN1 также не найден.

РЕДАКТИРОВАТЬ: Также поможет узнать, что моя php версия 5.5.26

Ответы [ 2 ]

0 голосов
/ 27 марта 2020

Вы можете использовать последнюю версию 1.0.x, которая вообще не требует автозагрузчика (и все еще поддерживается):

http://sourceforge.net/projects/phpseclib/files/phpseclib1.0.18.zip/download

Кроме того, вы / можете / использовать последнюю версию 2.0.x, если вы используете собственный автозагрузчик. http://phpseclib.sourceforge.net/2.0.html демонстрирует это:

<?php
// autoload.php's content can be copy / pasted from https://github.com/composer/composer/blob/master/src/Composer/Autoload/ClassLoader.php
include 'autoload.php';

$loader = new \Composer\Autoload\ClassLoader();
$loader->addPsr4('phpseclib\\', __DIR__ . '/path/to/phpseclib2.0');
$loader->register();

use phpseclib\Crypt\RSA;
use phpseclib\Net\SSH2;

$key = new RSA();
$key->loadKey(file_get_contents('private-key.txt'));

// Domain can be an IP too
$ssh = new SSH2('www.domain.tld');
if (!$ssh->login('username', $key)) {
    exit('Login Failed');
}

echo $ssh->exec('pwd');
echo $ssh->exec('ls -la');

Этот подход позволяет использовать 2.0.x без необходимости composer требовать phpseclib / phpseclib для CLI.

0 голосов
/ 25 марта 2020

Вам необходимо следовать стандартным Composer инструкциям по настройке проекта , Ларри. После этого вы следуете инструкциям phpseclib с Composer, выполнив

composer require phpseclib/phpseclib:~2.0

из каталога root проекта. После этого вам не нужно будет использовать include / require из примеров на сайте Sourceforge, поскольку они не используют функцию автозагрузки Composer - вы следуете этому примеру, чтобы использовать его.

...