3

Title explains it but here's what I tried to do:

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);
}

For some reason this is what's going on:

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

According to php.net page on defined you can do this:

<?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, ...
}
?>

Any ideas on why this isn't working? I'm running PHP-FPM 5.4.4 on Debian Wheezy.

VuoriLiikaluoma
  • 364
  • 3
  • 11

2 Answers2

8

That´s what happens here:

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

Thats true, the value of PHP_VERSION_ID is, in your case, 50404.

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

Now you are in fact asking defined(50404), and that returns false. The constant got resolved to it's value. If you want to know if a constant with that name exists, set it in quotes:

    var_dump(defined('PHP_VERSION_ID')); // returns bool(true)
Zsolt Szilagyi
  • 4,741
  • 4
  • 28
  • 44
  • 1
    *facepalm* How did I miss that... – VuoriLiikaluoma May 18 '13 at 06:31
  • if (!defined('PHP_VERSION_ID')) { $version = explode('.', PHP_VERSION, 3); define('PHP_VERSION_ID', ($version[0] * 10000 + $version[1] * 100 + $version[2])); if (PHP_VERSION_ID < 50207) { define('PHP_MAJOR_VERSION', $version[0]); define('PHP_MINOR_VERSION', $version[1]); define('PHP_RELEASE_VERSION', $version[2]); } } – javad shariaty Sep 22 '21 at 09:41
4

You can't use a define if it's not defined - so you have to test it as a string:

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);
}
Danack
  • 24,939
  • 16
  • 90
  • 122