【问题标题】:phpseclib zf2 Fatal Error calling classphpseclib zf2致命错误调用类
【发布时间】:2015-02-10 23:24:05
【问题描述】:

我正在尝试使用 zf2 配置 phpseclib。

我指的是https://github.com/phpseclib/phpseclib,我安装了composer。 我将包保存在 vendor/phpseclib 中。

内部供应商/作曲家 =>

<?php

// autoload_namespaces.php generated by Composer

$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
  'Zend\\' => $vendorDir . '/zendframework/zendframework/library/',
  'ZendTest\\' => $vendorDir . '/zendframework/zendframework/tests/',
  'phpseclib\\' => $vendorDir .  '/phpseclib/',
);

然后按照他们的建议,我使用以下代码创建一个 php 文件:

<?php
include 'vendor/autoload.php';
$ssh = new \phpseclib\Net\SSH2('www.domain.tld');
if (!$ssh->login('username', 'password')) {
exit('Login Failed');
}
echo $ssh->exec('pwd');
echo $ssh->exec('ls -la');
?>    

我还添加 使用 phpseclib\Net; 使用 phpseclib\Net\SSH2;

确定

但我收到此错误:

致命错误:在...中找不到类 'phpseclib\Net\SSH2'

我正在使用 Win8、Xampp 和 PHP5.5

我的 composer.json 是:

{
"name": "phpseclib/phpseclib",
"type": "library",
"description": "PHP Secure Communications Library - Pure-PHP implementations of RSA, AES, SSH2, SFTP, X.509 etc.",
"keywords": [
    "security",
    "crypto",
    "cryptography",
    "encryption",
    "signature",
    "signing",
    "rsa",
    "aes",
    "blowfish",
    "twofish",
    "ssh",
    "sftp",
    "x509",
    "x.509",
    "asn1",
    "asn.1",
    "BigInteger"
    ],
"homepage": "http://phpseclib.sourceforge.net",
"license": "MIT",
"authors": [
    {
        "name": "Jim Wigginton",
        "email": "terrafrost@php.net",
        "role": "Lead Developer"
    },
    {
        "name": "Patrick Monnerat",
        "email": "pm@datasphere.ch",
        "role": "Developer"
    },
    {
        "name": "Andreas Fischer",
        "email": "bantu@phpbb.com",
        "role": "Developer"
    },
    {
        "name": "Hans-Jürgen Petrich",
        "email": "petrich@tronic-media.com",
        "role": "Developer"
    }
],
"require": {
    "php": ">=5.0.0"
},
"require-dev": {
    "phing/phing": "~2.7",
    "phpunit/phpunit": "~4.0",
    "sami/sami": "~2.0",
    "squizlabs/php_codesniffer": "~1.5"
},
"suggest": {
    "ext-mcrypt": "Install the Mcrypt extension in order to speed up a wide variety of cryptographic operations.",
    "ext-gmp": "Install the GMP (GNU Multiple Precision) extension in order to speed up arbitrary precision integer arithmetic operations.",
    "pear-pear/PHP_Compat": "Install PHP_Compat to get phpseclib working on PHP < 4.3.3."
},
"include-path": ["phpseclib/"],
"autoload": {
    "psr-0": {
        "Crypt": "phpseclib/",
        "File": "phpseclib/",
        "Math": "phpseclib/",
        "Net": "phpseclib/",
        "System": "phpseclib/"
    },
    "files": [
        "phpseclib/Crypt/Random.php"
    ]
},
"extra": {
    "branch-alias": {
        "dev-master": "0.3-dev"
    }
}
}

我的 composer.json 是

{
"name": "zendframework/skeleton-application",
"description": "Skeleton Application for ZF2",
"license": "BSD-3-Clause",
"keywords": [
    "framework",
    "zf2"
],
"homepage": "http://framework.zend.com/",
"require": {
    "php": ">=5.3.3",
    "zendframework/zendframework": "2.*",
    "doctrine/common" : ">=2.1",
    "phpseclib/phpseclib": "0.3.10"
}, 

}

【问题讨论】:

  • 你能发布你的 composer.json 文件吗?除非您使用的是 2.0 分支,否则您可能使用的是不是命名空间的 phpseclib 版本。
  • 我编辑了我的问题并添加了 composer.json 文件,感谢您的检查
  • 我对你的 composer.json 更感兴趣——而不是 phpseclib 的 composer.json。还是您的项目没有自己的 composer.json?如果是这样,那么您是如何下载 phpseclib 的? phpseclib.sourceforge.net 提到的版本是 0.3.10,没有命名空间。命名空间的版本存在于github.com/phpseclib/phpseclib/tree/2.0
  • 是的,事实上我最后下载了这个。我已经用我的项目的 composer.json 文件更新了我的问题
  • 现在好像可以了。最后请告诉我我做错了什么以及我不应该做什么。

标签: zend-framework2 phpseclib


【解决方案1】:

最后在neubert的建议下我解决了。

我只需要在https://github.com/phpseclib/phpseclib/tree/2.0下载正确的包

然后执行 php composer.phar install --dev 如果不工作,我只是更改了文件夹 vendor/composer 中的 autoload_namespaces.php:

// autoload_namespaces.php generated by Composer
$vendorDir = dirname(__DIR__);
$baseDir = dirname($vendorDir);

return array(
    'Zend\\' => $vendorDir . '/zendframework/zendframework/library/',
    'ZendTest\\' => $vendorDir . '/zendframework/zendframework/tests/',
    'phpseclib\\' => $vendorDir .  '/phpseclib/',
);

'phpseclib\' 行 => $vendorDir 。 '/phpseclib/',是解决方案的关键

【讨论】:

    猜你喜欢
    • 2022-12-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-07-15
    相关资源
    最近更新 更多