0

我正在使用包含其他文件的文件的第 3 方 php 库 ( phpseclib )。只有当我将它安装在我包含第一个文件的任何目录的“根”中时,它似乎才有效。如果我把它放在一个子文件夹中,phpseclib 文件中的包含将无法找到其他文件,尽管它们是相对的!

这有效(直接安装在我的文件夹中):

include( "File/X509.php" );

这不起作用将其安装在我文件夹的子文件夹中):

include( "phpseclib/File/X509.php" );

失败的是 X509.php 调用包含文件:

require_once('File/ASN1.php');

我知道会发生这种情况,因为一旦我将 x509.php 包含到我的脚本中,代码就会在那里执行。在不更改包含库中的 PHP 代码的情况下,有什么方法可以使它工作吗?要使包含使用相对于我安装它的位置的路径?

例子:

假设一个文件结构:

/myfolder/myscript.php
/myfolder/sub/file/x509.php
/myfolder/sub/file/asn1.php

我的脚本.php

<?php include( "sub/file/x509.php" ); ?>

x509.php

<?php include( "file/asn1.php" ); ?>

asn1.php

<?php echo "included"; ?>
4

2 回答 2

2

使用 chdir 更改当前工作目录。我还建议在执行此操作之前使用 getcwd 获取工作目录,然后在完成后更改回该目录。

$cwd = getcwd();
chdir("phpseclib/");
include("File/X509.php");
chdir($cwd);
于 2013-05-30T15:41:21.800 回答
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 );
于 2013-05-30T15:40:13.080 回答