我遇到了一个小问题。我找不到找到用户定义常量的保证方法。
我的一些token_name()的返回为T_STRING,其他的返回为T_CONSTANT_ENCAPSED_STRING,我的代码不会改变所有的常量,如下所示;
<?php
//ACTObfuscator - Created by ACT Web Designs
//http://www.actwebdesigns.co.uk
?>
<?php
@define("V566B1DF8B3B32D1", false); if( V566B1DF8B3B32D1 ) { define('DB_USERNAME', "wefghgfh"); define('DB_PASSWORD', "mulfghgfh"); define('DB_SERVER', "gfhgst"); define("V2FC1E4F930A251A", "webfghgfh"); define("VDA9E0DAA31346F8", "<+ site_name +>"); define("V4424E58002D8BE7", "actvbiz.co.uk"); define("VBE72B58F4FE19A6", '<img src="./?0000=jpg&0001=0001&0002=pic" width="277" style="position:relative; z-index:5; background:url(./?0000=png&0001=shade&0002=pic) bottom repeat-x;" height="167" alt="ACTvBiz Logo" />' ); define("V7052A961BF53D55", "http://www.actvbiz.co.uk"); define("V692CD2C3D40F692", "support@activbiz.co.uk"); define("VDC5565EDE9405AA", "nnn_accounts"); }else{ header("location: http://www.actvbiz.co.uk"); exit; } ?>
(忽略&lt; + foobar +&gt;作为其他东西)
非常感谢任何帮助。
答案 0 :(得分:0)
我如何找到用户定义的常量(使用define
,而不是const
):
foreach (token_get_all($source) as $token) {
if (!is_array($token)) continue;
list($id, $content) = $token;
if ($id == T_STRING && $content == 'define') {
// and now extract the constant name!
}
}
答案 1 :(得分:0)
我意识到问题是什么......在我删除的整个文档中(让我们说)DOMAIN常量并且只留下DEFINE('DOMAIN');所以从理论上讲,由于它没有在任何地方使用,因此无需“改变”。但是为了超越这个,并且只改变'定义的'常数而不是'看起来'(没有证明它被定义)成为常数,我写道:
foreach( $tokens as $key => $packet ) {
$x = $key + 1;
if( is_array( $packet ) && $packet[0] == T_STRING && $packet[1] == 'define' ) {
while( true ) {
if( is_array( $tokens[$x] ) && $tokens[$x][0] == T_CONSTANT_ENCAPSED_STRING ) {
$constants[] = str_replace( array("\s", "'", '"'), '', $tokens[$x][1] );
break;
}
$x++;
}
}
}
如果在定义的()函数中,这只会将值作为常量添加。输出:
Array
(
[0] => VIA_SITE
[1] => DB_USERNAME
[2] => DB_PASSWORD
[3] => DB_SERVER
[4] => DB_NAME
[5] => SITE_NAME
[6] => PROFILE_URL
[7] => _LOGO
[8] => DOMAIN
[9] => SUPPORT_EMAIL
[10] => ACCOUNT_TABLE
)
答案 2 :(得分:-1)