Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/297.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP.ini auto_prepend_文件中的PHP变量在Slim Framework类中不可读_Php_Slim - Fatal编程技术网

PHP.ini auto_prepend_文件中的PHP变量在Slim Framework类中不可读

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

我有一个用PHP5.5构建的web应用程序。一个新的应用程序被添加到它(在一个子目录中),它是在Slim Framework v3中构建的

该应用程序运行在一个环境中,在此环境中,任何执行的PHP脚本都会使用PHP.ini中的
指令自动包含一个文件
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 KEYONE
global
之前声明它们,如下所示:

...
global $ASSETS_VER;
echo $ASSETS_VER;
...

您是否正在设置全局变量,并试图在函数或方法中访问它们?如果您在Slim框架的任何页面中运行
phpinfo
,是否列出了相同的
PHP.ini
auto_prepend_file
?我认为这与变量的范围有关。全局范围中的常量也是全局的,变量也是全局的不需要。除非你定义它。好的,这确实和变量的作用域有关。那么有什么实用的方法可以将config.php中的变量传递到我的Slim类中呢?
...
global $ASSETS_VER;
echo $ASSETS_VER;
...