繁体   English   中英

如何嵌套,相对包含工作?

[英]How get nested, relative includes to work?

我正在使用具有包含其他文件的文件的第三方php库( phpseclib )。 仅当我将其安装在我要包含的第一个文件的任何目录的“根目录”中时,它才似乎起作用。 如果我将其放在子文件夹中,则尽管phpseclib文件是相对的,但它们仍然找不到其他文件!

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

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"; ?>

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

$cwd = getcwd();
chdir("phpseclib/");
include("File/X509.php");
chdir($cwd);

我只需要添加这样的路径(然后在之后将其重置):

//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 );

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM