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.

1
  • You should see warnings if you enable them for this case. Commented Aug 14, 2015 at 17:32

2 Answers 2

9

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) 
Sign up to request clarification or add additional context in comments.

2 Comments

facepalm How did I miss that...
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]); } }
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); } 

Comments

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.