Test Server - Forum Code Changes for PHP 5.3.10 to PHP 7

Here is some docs of my ongoing work to port this forum PHP code which is running on 5.3.10, to PHP 7.

Motivation:

Unfortunately, every thing that has a beginning must have an end. PHP 5.6 active support ended January 19, 2017. It will receive security support until December 31, 2018.

#1

class_core.php
1644                 if(get_magic_quotes_runtime())
1645                 {
1646                        // Deactivate
1647                         set_magic_quotes_runtime(false);
1648                  }
1649                 //set_magic_quotes_runtime(0);
1650                 //@ini_set('magic_quotes_sybase', 0);

#2 (this is a pain for sure)

On the test server with PHP 7.... all thread with bbcode is broken (example PHP 7 error):

Fatal error: Uncaught Error: Call to undefined function handle_bbcode_list() in /var/www/includes/class_bbcode.php:1147 

Stack trace: 

#0 /var/www/includes/class_bbcode.php(678): vB_BbCodeParser->parse_array(Array, 1, 0) 

#1 /var/www/includes/class_bbcode.php(420): vB_BbCodeParser->parse_bbcode('You've given us...', 1, 0) 

#2 /var/www/includes/class_bbcode.php(375): vB_BbCodeParser->do_parse('You've given us...', 0, 1, 1, 1, true, false) 

#3 /var/www/includes/class_postbit.php(1130): vB_BbCodeParser->parse('You've given us...', 30, '1', false, NULL, NULL, false) 

#4 /var/www/includes/class_postbit.php(288): vB_Postbit_Post->parse_bbcode() 

#5 /var/www/showthread.php(1104): vB_Postbit->construct_postbit(Array) 
 
#6 {main} thrown in /var/www/includes/class_bbcode.php on line 1147

LINE 1147:

// call a callback function
$pending_text = $this->$tag_info['callback']($open['data'], $open['option']);

If anyone reading knows how to fix this, please post and save me some time! Thanks.

Better go back to basics:

Migrating a PHP 5 App to PHP 7 (Development Environment) - Part 1

-- Learn how to migrate a PHP 5 application to PHP 7: Setup and development environment.

Migrating a PHP 5 App to PHP 7 (Rundown of PHP 7 Features) - Part 2

-- Take a look at the PHP 7 features and learn how they can help you in migrating your PHP 5 projects.

Migrating a PHP 5 App to PHP 7 (Tools & Implementation) - Part 3

-- Let's go through migrating a simple PHP 5 app to PHP 7

OK.. this is fixed:

Reference: Backward incompatible changes

PHP 5:

// call a callback function
$pending_text = $this->$tag_info['callback']($open['data'], $open['option']);

PHP 7 (and also works with 5)

// call a callback function
$pending_text = $this->$tag_info{['callback']}($open['data'], $open['option']);

Confirmed working :slight_smile:

But many more to go...

#3

Here is another one:

#### /var/www/includes/functions.php
* variableInterpolation
 * Line 1875: ` global $$cache_name; // internal array for cacheing purposes`
 * Line 1902: ` global $$cache_name; // internal array for cacheing purposes`
 * Line 2041: `         global $$varname;

Fixed (not confirmed because have not reproduced error... assumed to be fixed until error appears ...)

#### /var/www/includes/functions.php
* variableInterpolation
 * Line 1875: ` global ${$cache_name}; // internal array for cacheing purposes`
 * Line 1902: ` global ${$cache_name}; // internal array for cacheing purposes`
 * Line 2041: `         global ${$varname};

#4 /profile.php?do=updateprofile

Another PHP 7 issue from PHP 5:

Warning: Declaration of vB_DataManager_User::save($doquery = true, $delayed = false) 
should be compatible with vB_DataManager::save($doquery = true, $delayed = false,
 $affected_rows = false, $replace = false, $ignore = false) in [path]/includes/class_dm_user.php on line 2968

Warning: Declaration of vB_DataManager_User_Multiple::fetch_query($condition, $limit = 0, $offset = 0) 
should be compatible with vB_DataManager_Multiple::fetch_query($condition = '', $limit = 0, $offset = 0) 
in [path]/includes/class_dm_user.php on line 3119

Which seems to result in vB MySQL error:

Database error in vBulletin 3.8.9:

Invalid SQL:
UPDATE user SET
	parentemail = '',
	icq = '',
	msn = '',
	aim = '',
	yahoo = '',
	skype = '',
	homepage = 'https://www.unix.com',
	birthday_search = '',
	birthday = '',
	showbirthday = 0,
	usertitle = 'Administrator',
	customtitle = 1,
	facebook = 'unixlinuxhq',
	myspace = '',
	twitter = 'unixlinux',
	youtube = 'UnixTutorials',
	linkedin = '',
	hyves = ''
WHERE userid = 1;

MySQL Error   : Incorrect date value: '' for column 'birthday_search' at row 1
Error Number  : 1292

Which my PHP 7 compatibility tool (php7mar) indicates only this:

#### /var/www/includes/class_dm_user.php
* oldClassConstructors
 * Line 181: `  function vB_DataManager_User(&$registry, $errtype = ERRTYPE_STANDARD)`

... miles and miles to go before i sleep, and promises to keep ....

This is a terribly boring project..... yesterday worked for hours and hours only to find making the suggestions to fix "critical" issues identified by php7mar seemed to get me nowhere fast. Instead of the test site becoming more robust, things broke more and more.

Back to square one :frowning:

OK This PHP coding nightmare never ends so its more than a nightmare... it is the wrong direction!

Going to pause this ill fated path for now and look for other options.