Где я могу разместить библиотеку defuse, чтобы избежать вызова неопределенного метода?

Я хотел бы попробовать библиотеку defuse для двусторонней криптографии. Я скопировал каталог и подкаталоги defuse в мой корневой веб-каталог и файл .phar в /var/www/lib/defuse-crypto.phar в соответствии с инструкциями InstallAndVerify.md. В мой тестовый скрипт я включил

require_once('/var/www/lib/defuse-crypto.phar');

Однако я получаю следующую ошибку.

Fatal error: Uncaught Error:
Call to undefined method Defuse\Crypto\Crypto::CreateNewRandomKey() in /var/www/encryptTest.php:12
Stack trace: #0 {main} thrown in /var/www/encryptTest.php on line 12

Я использовал один из примеров сценариев

$key = \Defuse\Crypto\Crypto::CreateNewRandomKey();
$message = 'We are all living in a yellow submarine';
$ciphertext = \Defuse\Crypto\Crypto::Encrypt($message, $key);
$plaintext = \Defuse\Crypto\Crypto::Decrypt($ciphertext, $key);
echo "cipher is $ciphertext<br/> plaintext is $plaintext";

Я также пытался использовать

$key = Crypto::CreateNewRandomKey();

и т.д., без более полного пути, и я попытался

use Defuse\Crypto\Crypto;

Я получаю то же сообщение об ошибке. Кажется, это простая проблема путей к каталогам, но вещи .phar за мной! Я был бы очень благодарен, если бы кто-то мог подтолкнуть меня в правильном направлении. Я не использую композитор, и я действительно не хочу. Благодарю.

0

Решение

После дополнительных испытаний я нашел ответ, было три ошибки, вот рабочий код. Среди прочего, в руководстве по документации (tutorial.md) пропущена строка require_once (/…phar) в примерах учебника, что вводило меня в заблуждение. Сценарий может быть размещен в корневом веб-каталоге или любом подкаталоге, классы пространства имен по-прежнему будут вызываться правильно. Так и здесь.

<?php
use Defuse\Crypto\Key;
use Defuse\Crypto\Crypto;
require_once "{$_SERVER['DOCUMENT_ROOT']}/defuse/defuse-crypto.phar";

$key = Key::CreateNewRandomKey();
$message = 'StackOverflow is great';
$ciphertext = Crypto::Encrypt($message, $key);
$plaintext = Crypto::Decrypt($ciphertext, $key);
echo "cipher is $ciphertext<br/> plaintext is $plaintext";
?>

Вам нужно будет добавить

use Defuse\Crypto\KeyProtectedByPassword;

если вы хотите использовать сохраненный и защищенный паролем ключ, и

use Defuse\Crypto\File;

если вы хотите зашифровать файлы. Авторы предлагают поместить файл .phar в / var / www / lib, но я поместил его в / var / www / defuse вместе с исходными файлами, которые находятся в / var / www / defuse / src. Это не влияет на способ вызова пространств имен, если файл .phar правильно указан в операторе require_once ().

0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]