如何仅从另一个php文件加载特定变量?

如何仅从另一个php文件加载特定变量?,php,include,Php,Include,在web服务器的维护脚本中,我需要获取该服务器上每个网站/应用程序的数据库设置。由于大多数网站都基于Drupal,主设置文件是settings.php,在该文件中定义了各种变量(如$database),但有时它还包含特定站点的ini_set()语句 脚本可以包含settings.php以获取数据库设置,但是脚本将抛出以下错误: 警告:ini\u set():会话处于活动状态。此时无法在include()中更改会话模块的ini设置(第123行/path/to/website/sites/defau

在web服务器的维护脚本中,我需要获取该服务器上每个网站/应用程序的数据库设置。由于大多数网站都基于Drupal,主设置文件是settings.php,在该文件中定义了各种变量(如$database),但有时它还包含特定站点的ini_set()语句

脚本可以包含settings.php以获取数据库设置,但是脚本将抛出以下错误:

警告:ini\u set():会话处于活动状态。此时无法在include()中更改会话模块的ini设置(第123行/path/to/website/sites/default/settings.php)。

有没有办法只从包含的php文件中加载(特定)变量?
当然,我指的是平滑的东西。我知道,我可以将文件加载到一个字符串中,使用regex提取数据库变量和eval(),但我宁愿认为有更好的方法。

而不是只包含settings.php(由于所包含文件中的
ini\u set()
命令出错,我必须将文件读入字符串,获取所需部分并
eval())

在下面的示例中,我正在标准Drupal settings.php中搜索数据库设置

#include $settings_path; // critical due to ini_set() commands.

$settings = file_get_contents($settings_path); // load file into string
$settings = preg_replace("#/\*.*?\*/#si", '', $settings); // get rid of comments to avoid confusion with preg_match
preg_match('#\$databases.*?;#si', $settings, $dbraw); // get the desired part of the string
eval("\$databases = " . $dbraw[0]); // eval() to create the variable

最明智的做法是将这些变量放入第三个文件中,然后在需要的地方将其包含在两个文件中。这是真的。但我确实需要从不同的系统(Drupal、LimeSurvey、CodeIgniter、自定义系统)读取设置总共有100多个安装。对于自定义站点,这确实是一个选项(实际上是这样设置的),但对于Drupal等预定义系统,我希望有一个不需要更改安装例程的解决方案。