PHP.ini auto_prepend_文件中的PHP变量在Slim Framework类中不可读
我有一个用PHP5.5构建的web应用程序。一个新的应用程序被添加到它(在一个子目录中),它是在Slim Framework v3中构建的 该应用程序运行在一个环境中,在此环境中,任何执行的PHP脚本都会使用PHP.ini中的PHP.ini auto_prepend_文件中的PHP变量在Slim Framework类中不可读,php,slim,Php,Slim,我有一个用PHP5.5构建的web应用程序。一个新的应用程序被添加到它(在一个子目录中),它是在Slim Framework v3中构建的 该应用程序运行在一个环境中,在此环境中,任何执行的PHP脚本都会使用PHP.ini中的指令自动包含一个文件config.PHP 据我所知,这相当于在所有脚本中都包含以下内容,但无需每次手动编写require\u once'config.php': <?php require_once 'config.php'; // Script st
指令自动包含一个文件config.PHP
据我所知,这相当于在所有脚本中都包含以下内容,但无需每次手动编写require\u once'config.php'
:
<?php
require_once 'config.php';
// Script starts here
?>
…将输出配置文件中的任何内容(分别为“bar”和“1.0”)
问题
然而,在使用Slim框架的应用程序部分,我们只能从config.php
读取使用define()
设置的内容,而常规变量是未定义的。因此,在上面的示例中,echo FOO
将生成“bar”,而echo$ASSETS\u VER
将不会生成任何内容
我不确定这是否与Slim Framework的工作原理有关,但我想知道是否有人知道为什么会出现这种情况,以及如何修复它?
PHP
文档内容如下:“大多数情况下,所有PHP变量都只有一个作用域。此单一作用域也跨越包含的文件和必需的文件。。。在用户定义的函数中引入了局部函数作用域。默认情况下,函数中使用的任何变量都限制在本地函数范围内。”
您的“不是Slim应用程序一部分的PHP脚本”似乎只使用全局范围内的代码(即不在方法或函数内的代码)中的config.PHP
中的数据。因此,它可以看到PHP
中的常量和变量也在全局范围内
使用框架的代码,例如slimframework
通常位于框架代码调用的某种回调方法或函数中(即,它位于本地范围)。因此,您的代码可以看到全局范围PHP
常量(从本地范围可见),但看不到全局范围PHP
变量(由新创建的具有相同名称的局部作用域空变量替换)
为了使用它们,您可以在使用with KEYONEglobal
之前声明它们,如下所示:
...
global $ASSETS_VER;
echo $ASSETS_VER;
...
您是否正在设置全局变量,并试图在函数或方法中访问它们?如果您在Slim框架的任何页面中运行
phpinfo
,是否列出了相同的PHP.ini
和auto_prepend_file
?我认为这与变量的范围有关。全局范围中的常量也是全局的,变量也是全局的不需要。除非你定义它。好的,这确实和变量的作用域有关。那么有什么实用的方法可以将config.php中的变量传递到我的Slim类中呢?
...
global $ASSETS_VER;
echo $ASSETS_VER;
...