【发布时间】:2016-06-26 14:56:46
【问题描述】:
所以我在一个项目中使用PHP Secure Communications Library 2.0,它被用于许多地方(不同子目录中的不同文件)
目前,为了使其正常工作,我将 5 个目录和 1 个文件复制到每个子目录中,然后使用 include('Net/SSH2.php'); 包含在内,我确定这是不正确的。
文档说要使用以下内容:
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
include('Net/SSH2.php');
但我无法让它工作。
我有一个文件/var/www/test.php,我有一个/var/www/phpseclib
到目前为止我做了什么。
ini_set('display_errors', 1);
echo get_include_path(); //Gets me .:
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
include('Net/SSH2.php');
$sftp = new Net_SFTP('10.0.0.15'); //A valid IP for an SFTP host on the network
这会导致 致命错误:在 /var/www/test.php 中找不到类“Net_SFTP”...
然后我将 phpseclib 目录移动到 /tmp 并更改为 set_include_path(get_include_path() . PATH_SEPARATOR . '/tmp/phpseclib');
$sftp = new Net_SFTP('10.0.0.15'); 仍然导致 致命错误:在 /var/www/test.php 中找不到类“Net_SFTP”...
所以我的结构是: (/Users/jason/tmp 中所有文件的权限都已适当设置。)
/Users/jason/tmp/phpseclib
/Users/jason/tmp/phpseclib/Crypt
/Users/jason/tmp/phpseclib/File
/Users/jason/tmp/phpseclib/Math
/Users/jason/tmp/phpseclib/Net
/Users/jason/tmp/phpseclib/System
/Users/jason/tmp/phpseclib/openssl.cnf
/var/www/test.php
/var/www/A/two.php
我想在 test.php 和 two.php 中都使用 phpseclib,我觉得我需要做的就是添加...
set_include_path(get_include_path() . PATH_SEPARATOR . '/tmp/phpseclib');
include('Net/SSH2.php');
...到每一个的顶部,并做好准备。我做错了什么/错过了什么?
【问题讨论】:
-
/tmp/中的文件每天都会根据askubuntu.com/a/759048/180177 自动删除。也许/var/www/phpseclib会更好?另外,我也会仔细检查权限。确保 www-data 或任何运行 Apache 的用户可以访问该目录。 -
其实……你用的是 git 的 2.0 分支吗?如果是这种情况,那么您不应该遵循phpseclib.sourceforge.net 上的指示 - 您应该使用自动加载器。作曲家是理想的,但你可以在没有作曲家的情况下做到这一点。请参阅phpseclib.sourceforge.net/2.0.html 了解更多信息。
-
@neubert 谢谢,我更新了问题,/tmp 是我懒惰。我正在使用 2.0 分支,所以我会检查自动加载器。