获取文件中常量的值

  • 本文关键字:常量 文件 获取 php
  • 更新时间 :
  • 英文 :

$file = $_SERVER["DOCUMENT_ROOT"]."/log.txt";
$current = file_get_contents($file);

文件中有一个名为TESTconstant,如何获取它的value

define("TEST", "Hello you.", true);

如果你的PHP文件包含一个在你发布的代码上面声明的常量,那么只需使用该常量的名称:

define("TEST", "Hello you.", true);
$file = $_SERVER['DOCUMENT_ROOT'].'/log.txt';
$file_content = file_get_contents($file);
// To access a constant just type it's name:
echo TEST;

如果您的TEST常量是在log.txt中声明的,那么它就不同了。

log.txt:

ASDLFJS SDFWQERSDF sadf sdfwer
asdflkwer
define("TEST", 'This is the content');
another log line

您需要编写一个正则表达式来获得define()声明,因为它可能包含字符串、数字或其他内容。我会使用这个正则表达式:/define((["'])TEST1[^nr]*)s*;/

正则表达式的测试和解释:https://regex101.com/r/RoC7dP/2

一旦提取了define()声明,就可以使用eval()执行它,以便使常量可用。执行require()include()似乎不是解决方案,因为您的文件名为log.txt,让我认为它不是PHP文件。

回到PHP代码:

$file = $_SERVER['DOCUMENT_ROOT'].'/log.txt';
$file_content = file_get_contents($file);
$regex = '/define((["'])TEST1[^nr]*)s*;/';
if (preg_match($regex, $file_content, $matches)) {
// This could cause an error.
// The 3rd argument of define() isn't always accepted.
eval($matches[0]);
echo TEST;
} else {
die('Could not find the TEST declaration!');
}

这里的执行示例(没有文件,只有字符串,因为我们无法在在线编译器上执行(:https://sandbox.onlinephpfunctions.com/c/e768f

使用include或require函数

该文件的扩展名为.txt,但如果它仍然是PHP代码,那也没关系。一些框架使用.inc和其他扩展。文件的开头必须有<?php,如果允许使用短php标记,则必须是<?

您可以使用include或require函数将文件加载为PHP代码:

  • include((
    将文件(解释为PHP代码(包含到当前脚本中
  • includeonce((
    解释文件,但如果再次包含该文件,则该确切文件将只包含一次。再次包含该文件不会引发错误
  • require((
    如果文件不存在,require将引发错误
  • require_once((
    对此建议:如果文件不存在,则抛出错误,如果再次需要,则不会再次加载该文件。再次要求该文件不会引发错误

您可能希望在脚本运行期间保留该定义,因此require_once()很可能是您的正确选择。

只需键入其名称即可使用常量:TEST
例如var_dump(TEST);

最新更新