我正在使用第三方php库(phpseclib),其中包含包含其他文件的文件。它似乎只有当我将它安装在我包含第一个文件的任何目录的“根目录”时才能工作。如果我把它放在一个子文件夹中,那么phpseclib文件中的include会变得无法找到其他文件,尽管它们是相对的!
这可行(直接在我的文件夹中安装):
include( "File/X509.php" );
这不工作(将其安装在我文件夹的子文件夹中):
include( "phpseclib/File/X509.php" );
失败的是X509.php调用包含文件:
require_once('File/ASN1.php');
我知道这是因为一旦我将x509.php包含到我的脚本中,代码就会在那里执行。如果不更改包含的库中的PHP代码,有没有办法使这个工作?要使include使用相对于我安装它的路径?
实施例
假设文件结构:
/myfolder/myscript.php
/myfolder/sub/file/x509.php
/myfolder/sub/file/asn1.php
myscript.php
<?php include( "sub/file/x509.php" ); ?>
x509.php
<?php include( "file/asn1.php" ); ?>
asn1.php
<?php echo "included"; ?>
答案 0 :(得分:2)
使用chdir更改当前工作目录。我还建议在执行此操作之前使用getcwd获取工作目录,然后在完成后更改回该目录。
$cwd = getcwd();
chdir("phpseclib/");
include("File/X509.php");
chdir($cwd);
答案 1 :(得分:1)
我只需要添加这样的路径(然后重置它):
//This is so we don't screw up anything else in the PHP web app
$currentIncludePath = get_include_path();
//Need to let phpseclib know where to find its files
set_include_path( "phpseclib" . PATH_SEPARATOR . $currentIncludePath );
//Now include the file(s)
include( "phpseclib/File/X509.php" );
//Now set back to normal
set_include_path( $currentIncludePath );