【问题标题】:PHP_VERSION_ID is int but not defined. (PHP-FPM 5.4.4) [duplicate]PHP_VERSION_ID 是 int 但未定义。 (PHP-FPM 5.4.4)[重复]
【发布时间】:2013-05-12 22:44:44
【问题描述】:

标题解释了它,但这是我尝试做的:

if (!defined(PHP_VERSION_ID) || PHP_VERSION_ID < 50400) {
    trigger_error('PHP version 5.4 or above is required to run this code. Please upgrade to continue...', E_USER_ERROR);
}

由于某种原因,这是发生了什么:

var_dump(PHP_VERSION_ID);          // returns int(50404)
var_dump(defined(PHP_VERSION_ID)); // returns bool(false)

根据defined 上的php.net 页面,您可以这样做:

<?php
// PHP_VERSION_ID is available as of PHP 5.2.7, if our 
// version is lower than that, then emulate it
if (!defined('PHP_VERSION_ID')) {
    $version = explode('.', PHP_VERSION);

    define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2]));
}

// PHP_VERSION_ID is defined as a number, where the higher the number 
// is, the newer a PHP version is used. It's defined as used in the above 
// expression:
//
// $version_id = $major_version * 10000 + $minor_version * 100 + $release_version;
//
// Now with PHP_VERSION_ID we can check for features this PHP version 
// may have, this doesn't require to use version_compare() everytime 
// you check if the current PHP version may not support a feature.
//
// For example, we may here define the PHP_VERSION_* constants thats 
// not available in versions prior to 5.2.7

if (PHP_VERSION_ID < 50207) {
    define('PHP_MAJOR_VERSION',   $version[0]);
    define('PHP_MINOR_VERSION',   $version[1]);
    define('PHP_RELEASE_VERSION', $version[2]);

    // and so on, ...
}
?>

关于为什么这不起作用的任何想法?我在 Debian Wheezy 上运行 PHP-FPM 5.4.4。

【问题讨论】:

  • 如果您在这种情况下启用它们,您应该会看到警告。

标签: php


【解决方案1】:

这就是这里发生的事情:

var_dump(PHP_VERSION_ID);          // returns int(50404)

没错,在您的情况下,PHP_VERSION_ID 的值是 50404。

var_dump(defined(PHP_VERSION_ID)); // returns bool(false)

现在您实际上是在询问已定义(50404),并且返回 false。常数得到了解决它的价值。如果您想知道同名的常量是否存在,请将其放在引号中:

    var_dump(defined('PHP_VERSION_ID')); // returns bool(true)

【讨论】:

  • facepalm 我怎么会错过...
  • if (!defined('PHP_VERSION_ID')) { $version = explode('.', PHP_VERSION, 3);定义('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2])); if (PHP_VERSION_ID
【解决方案2】:

如果未定义,则无法使用定义 - 因此您必须将其作为字符串进行测试:

if (!defined('PHP_VERSION_ID') || PHP_VERSION_ID < 50400) {
    trigger_error('PHP version 5.4 or above is required to run this code. Please upgrade to continue...', E_USER_ERROR);
}

【讨论】:

    猜你喜欢
    • 2023-03-04
    • 1970-01-01
    • 1970-01-01
    • 2013-07-02
    • 2016-01-15
    • 2020-02-01
    • 2012-10-24
    • 2022-01-12
    • 2019-10-01
    相关资源
    最近更新 更多