1500字范文,内容丰富有趣,写作好帮手!
1500字范文 > php未定义常量破解 PHP未定义的常量错误没有意义

php未定义常量破解 PHP未定义的常量错误没有意义

时间:2020-07-23 11:30:57

相关推荐

php未定义常量破解 PHP未定义的常量错误没有意义

我真的希望我在这里错过了一些简单的东西,但是我在

PHP中使用类常量遇到了一个奇怪的问题.我创建了一个名为Utils的简单类,并添加了两个类常量CRYPT_SALT和LOGIN_PAGE.我从其他文件中引用了这些文件,并且它们有效.然后我又添加了五个类常量,它们不起作用.我在/var/www/modx/test.php上获得了“致命错误:未定义的类常量”,其中一个是新的常量,并且是我尝试使用它的行.

这是Utils类:

//

// Utils.php

//

// This class is a collection of static utility functions. Since the methods are static, they should

// all be invoked with:

//

// Utils::methodName();

//

// This class also contains global constants, which are *not* kept in Config. They should be accessed with:

//

// Utils::CONSTANT;

//

// addToCSVString -- adds an incoming string to a CSV string, possibly prepending a comma and space. Returns

// addToJSONString -- adds an incoming key/value pair to a JSON string

// jsonify -- takes in a string and replaces control characters and quotes with properly

//

require_once( "logger.php" );

class Utils {

// Constants

const CRYPT_SALT = '$6$';

const LOGIN_PAGE = '/modx/';

// Session keys

const SKEY_DEBUG = 'debug';

const SKEY_LOGIN = 'login';

const SKEY_LANG = 'curLang';

const SKEY_UID = 'userID';

const SKEY_LOGGER = 'logger';

// Members

public static $debug = false;

// Methods

//

// addToCSVString -- adds an incoming string to a CSV string, possibly prepending a comma and space. Returns

// the new string

//

public static function addToCSVString( $csvString, $newVal ) {

if ( strlen( $csvString ) > 0 ) {

$csvString .= ", ";

}

return $csvString . $newVal;

}

//

// addToJSONString -- adds an incoming key/value pair to a JSON string

//

public static function addToJSONString( $jsonString, $key, $val ) {

$debug = self::$debug;

if ( $debug ) {

$logger = Logger::singleton();

$logger->log( "In Utils::addToJSONString" );

$logger->log( "\$key = [$key]", 1 );

$logger->log( "\$val = [$val]", 1 );

}

if ( strpos( $val, "{" ) === false ) {

if ( $debug ) {

$logger->log( "Utils: this is a plain value", 1 );

}

// Val is a string

$val = self::jsonify( $val );

return self::addToCSVString( $jsonString, "\"" . $key . "\" : \"" . $val . "\"" );

} else {

if ( $debug ) {

$logger->log( "this is a JSON object", 1 );

}

// Val is a JSON object

return self::addToCSVString( $jsonString, "\"" . $key . "\" : " . $val . "" );

}

}

//

// jsonify -- takes in a string and replaces control characters and quotes with properly

// escaped JSON values

//

public static function jsonify( $val ) {

$val = str_replace( '\\', '\\\\', $val ); // convert backslashes first

$val = str_replace( "\n", '\\n', $val );

$val = str_replace( "\r", '\\r', $val );

$val = str_replace( "\t", '\\t', $val );

$val = str_replace( "\v", '\\v', $val );

$val = str_replace( "\f", '\\f', $val );

$val = str_replace( "\n", '\\n', $val );

$val = str_replace( "\n", '\\n', $val );

return $val;

}

}

?>

在添加类常量之前,所有成员函数都已编写和测试,它们正在工作.

这里是test.php,一个简单的测试页面来说明问题:

Test.php

// Set up autoloader

spl_autoload_extensions( '.php,.inc' );

spl_autoload_register();

// Test class constants

echo "Testing Utils class constants\n";

echo 'Utils::CRYPT_SALT = [' . Utils::CRYPT_SALT . "]

\n";

echo 'Utils::LOGIN_PAGE = [' . Utils::LOGIN_PAGE . "]

\n";

echo 'Utils::SKEY_LOGGER = [' . Utils::SKEY_LOGGER . "]

\n";

echo 'Utils::SKEY_DEBUG = [' . Utils::SKEY_DEBUG . "]

\n";

echo 'Utils::SKEY_LOGIN = [' . Utils::SKEY_LOGIN . "]

\n";

echo 'Utils::SKEY_LANG = [' . Utils::SKEY_LANG . "]

\n";

echo 'Utils::SKEY_UID = [' . Utils::SKEY_UID . "]

\n";

echo "\n";

?>

我从test.php得到的确切错误是:

Fatal error: Undefined class constant 'SKEY_LOGGER' in /var/www/modx/test.php on line 15

我尝试过以下方法来解决这个问题:

– 重命名常量,包括使用不带下划线的小写名称

– 更改声明的顺序.

– 从双引号改为单引号.

– 注释掉CRYPT_SALT和LOGIN_PAGE的声明

– 向我的同事展示这些代码,他们都是无能为力的

无论我尝试什么,CRYPT_SALT和LOGIN_PAGE工作,其他常量都不起作用.我担心我会遇到PHP类课程中的一些错误.或者也许我只是盯着这么久,以至于我错过了这个显而易见的事实.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。