$file = $_SERVER["DOCUMENT_ROOT"]."/log.txt";
$current = file_get_contents($file);
文件中有一个名为TEST
的constant
,如何获取它的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);
。