如何使用PHP的set_include_path和多目录库
How to use PHP's set_include_path and multi directory library
所以我在一个项目中使用 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
这会导致 致命错误:Class 'Net_SFTP' 在 /var/www/test 中找不到。php...
然后我把phpseclib目录移到/tmp
,改成set_include_path(get_include_path() . PATH_SEPARATOR . '/tmp/phpseclib');
$sftp = new Net_SFTP('10.0.0.15');
仍然会导致 致命错误: Class 'Net_SFTP' not found in /var/www/test.php...
所以我的结构是:
(/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');
...到每一个的顶部,一切顺利。我在做什么 wrong/missing?
在多个不同位置加载库的最简单方法是使用自动加载器。
Composer 由 phpseclib 推荐并且非常容易设置。
您可以从这里下载作曲家:https://getcomposer.org/download/
设置好作曲家后,接下来需要做的是在项目的根目录中创建一个 composer.json 文件。为您想要使用的任何版本分出 2.0.*。
{
"require": {
"phpseclib/phpseclib": "2.0.*"
}
}
可在此处找到可用版本:https://packagist.org/packages/phpseclib/phpseclib
创建此文件后,您需要 运行 在终端中使用这些命令之一来生成自动加载库所需的一切。该命令将取决于您的系统设置方式。
composer install
or
php composer.phar install
一旦你运行这个命令将生成一个供应商文件夹,其中包含你指定的所有必需的库。 (在这种情况下只是 phpseclib。)
需要进行的最后几项更改在您的 index.php 文件中。
改变
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
include('Net/SSH2.php');
至
require $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php';
use \phpseclib\Net\SFTP;
这将允许您访问 phpseclib 文件夹中的 SFTP 功能。
此外,根据您使用的版本,某些术语已更改。
如果您使用的是 2.0.*,则需要更改
$sftp = new Net_SFTP($ihost);
至
$sftp = new SFTP($ihost);
所以我在一个项目中使用 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
这会导致 致命错误:Class 'Net_SFTP' 在 /var/www/test 中找不到。php...
然后我把phpseclib目录移到/tmp
,改成set_include_path(get_include_path() . PATH_SEPARATOR . '/tmp/phpseclib');
$sftp = new Net_SFTP('10.0.0.15');
仍然会导致 致命错误: Class 'Net_SFTP' not found in /var/www/test.php...
所以我的结构是: (/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');
...到每一个的顶部,一切顺利。我在做什么 wrong/missing?
在多个不同位置加载库的最简单方法是使用自动加载器。
Composer 由 phpseclib 推荐并且非常容易设置。 您可以从这里下载作曲家:https://getcomposer.org/download/
设置好作曲家后,接下来需要做的是在项目的根目录中创建一个 composer.json 文件。为您想要使用的任何版本分出 2.0.*。
{
"require": {
"phpseclib/phpseclib": "2.0.*"
}
}
可在此处找到可用版本:https://packagist.org/packages/phpseclib/phpseclib
创建此文件后,您需要 运行 在终端中使用这些命令之一来生成自动加载库所需的一切。该命令将取决于您的系统设置方式。
composer install
or
php composer.phar install
一旦你运行这个命令将生成一个供应商文件夹,其中包含你指定的所有必需的库。 (在这种情况下只是 phpseclib。)
需要进行的最后几项更改在您的 index.php 文件中。
改变
set_include_path(get_include_path() . PATH_SEPARATOR . 'phpseclib');
include('Net/SSH2.php');
至
require $_SERVER['DOCUMENT_ROOT'] . '/vendor/autoload.php';
use \phpseclib\Net\SFTP;
这将允许您访问 phpseclib 文件夹中的 SFTP 功能。 此外,根据您使用的版本,某些术语已更改。
如果您使用的是 2.0.*,则需要更改
$sftp = new Net_SFTP($ihost);
至
$sftp = new SFTP($ihost);