Hi Everyone,

Related Forum Topic:
PHP Parse Error in php.module(80) : eval()'d code on line 2

Problem:

The following error is recorded in the /var/log/apache2/error.log file on my server every time a page request is made on my drupal site:

PHP Fatal Error: Call to a member function session_begin() on a non-object in /modules/php/php.module(80): eval()'d code on line 24

The error occurs in the php_eval($code) function, where apparently I've got some bad php code somewhere that is not passing the evaluation.

Steps Taken to Debug:
On a test server, I took my homepage and stripped all blocks from the page. I cleared the drupal cache, refreshed the page in the browser and the error appeared in the log again. Then I added a print statement to the php_eval($code) function (in the test server only), to see what the code looked like. Here it is (I added some whitespace):

session_begin(); 

$auth->acl($user->data); 

$user->setup('viewforum'); 

display_forums('', $config['load_moderators']); 

// Set some stats, get posts count from forums data if we... hum... retrieve all forums data 

$total_posts = $config['num_posts']; 

$total_topics = $config['num_topics']; 

$total_users = $config['num_users']; 

$l_total_user_s = ($total_users == 0) ? 'TOTAL_USERS_ZERO' : 'TOTAL_USERS_OTHER'; 

$l_total_post_s = ($total_posts == 0) ? 'TOTAL_POSTS_ZERO' : 'TOTAL_POSTS_OTHER'; 

$l_total_topic_s = ($total_topics == 0) ? 'TOTAL_TOPICS_ZERO' : 'TOTAL_TOPICS_OTHER'; 

// Grab group details for legend display 

if ($auth->acl_gets('a_group', 'a_groupadd', 'a_groupdel')) { $sql = 'SELECT group_id, group_name, group_colour, group_type FROM ' . GROUPS_TABLE . ' WHERE group_legend = 1 ORDER BY group_name ASC'; } else { $sql = 'SELECT g.group_id, g.group_name, g.group_colour, g.group_type FROM ' . GROUPS_TABLE . ' g LEFT JOIN ' . USER_GROUP_TABLE . ' ug ON ( g.group_id = ug.group_id AND ug.user_id = ' . $user->data['user_id'] . ' AND ug.user_pending = 0 ) WHERE g.group_legend = 1 AND (g.group_type <> ' . GROUP_HIDDEN . ' OR ug.user_id = ' . $user->data['user_id'] . ') ORDER BY g.group_name ASC'; } $result = $db->sql_query($sql); $legend = array(); while ($row = $db->sql_fetchrow($result)) { $colour_text = ($row['group_colour']) ? ' style="color:#' . $row['group_colour'] . '"' : ''; $group_name = ($row['group_type'] == GROUP_SPECIAL) ? $user->lang['G_' . $row['group_name']] : $row['group_name']; if ($row['group_name'] == 'BOTS' || ($user->data['user_id'] != ANONYMOUS && !$auth->acl_get('u_viewprofile'))) { $legend[] = '' . $group_name . ''; } else { $legend[] = '' . $group_name . ''; } } $db->sql_freeresult($result); $legend = implode(', ', $legend); // Generate birthday list if required ... $birthday_list = ''; if ($config['load_birthdays'] && $config['allow_birthdays']) { $now = getdate(time() + $user->timezone + $user->dst - date('Z')); $sql = 'SELECT u.user_id, u.username, u.user_colour, u.user_birthday FROM ' . USERS_TABLE . ' u LEFT JOIN ' . BANLIST_TABLE . " b ON (u.user_id = b.ban_userid) WHERE (b.ban_id IS NULL OR b.ban_exclude = 1) AND u.user_birthday LIKE '" . $db->sql_escape(sprintf('%2d-%2d-', $now['mday'], $now['mon'])) . "%' AND u.user_type IN (" . USER_NORMAL . ', ' . USER_FOUNDER . ')'; $result = $db->sql_query($sql); while ($row = $db->sql_fetchrow($result)) { $birthday_list .= (($birthday_list != '') ? ', ' : '') . get_username_string('full', $row['user_id'], $row['username'], $row['user_colour']); if ($age = (int) substr($row['user_birthday'], -4)) { $birthday_list .= ' (' . ($now['year'] - $age) . ')'; } } $db->sql_freeresult($result); } // Assign index specific vars $template->assign_vars(array( 'TOTAL_POSTS' => sprintf($user->lang[$l_total_post_s], $total_posts), 'TOTAL_TOPICS' => sprintf($user->lang[$l_total_topic_s], $total_topics), 'TOTAL_USERS' => sprintf($user->lang[$l_total_user_s], $total_users), 'NEWEST_USER' => sprintf($user->lang['NEWEST_USER'], get_username_string('full', $config['newest_user_id'], $config['newest_username'], $config['newest_user_colour'])), 'LEGEND' => $legend, 'BIRTHDAY_LIST' => $birthday_list, 'FORUM_IMG' => $user->img('forum_read', 'NO_UNREAD_POSTS'), 'FORUM_UNREAD_IMG' => $user->img('forum_unread', 'UNREAD_POSTS'), 'FORUM_LOCKED_IMG' => $user->img('forum_read_locked', 'NO_UNREAD_POSTS_LOCKED'), 'FORUM_UNREAD_LOCKED_IMG' => $user->img('forum_unread_locked', 'UNREAD_POSTS_LOCKED'), 'S_LOGIN_ACTION' => append_sid("{$phpbb_root_path}ucp.$phpEx", 'mode=login'), 

'S_DISPLAY_BIRTHDAY_LIST' => ($config['load_birthdays']) ? true : false, 
'U_MARK_FORUMS' => ($user->data['is_registered'] || $config['load_anon_lastread']) ? append_sid("{$phpbb_root_path}index.$phpEx", 'hash=' . generate_link_hash('global') . '&mark=forums') : '', 'U_MCP' => ($auth->acl_get('m_') || $auth->acl_getf_global('m_')) ? append_sid("{$phpbb_root_path}mcp.$phpEx", 'i=main&mode=front', true, $user->session_id) : '') ); // Output page page_header($user->lang['INDEX']); 

$template->set_filenames(array( 'body' => 'index_body.html') ); 

page_footer(); ?>

This appears to be part of an integration with the phpBB3 forum code, based on google searches for some of the comments and sections of the code. I found some similar code here.

Conclusion:

I don't have one. I don't know where to go from here.

Thank you for any help,
Ann

Comments

VM’s picture

the php.module is for the php text format. Are you using that text format anywhere?

ann b’s picture

I can see why various posts in drupal.org and the O'Reilly Using Drupal book so strongly discourage using this text format. My protests against allowing this however were not successful. We will be offering this text format to a small number of users. This code is in one of our basic pages. I'll debug this code.

Thank you very much VM!
Ann

Jaypan’s picture

Allowing users to use the PHP text format is about as big a security hole as you can open in your system. Be VERY sparing with the users who can use it - they may inadvertently shut down the entire system without even trying (this input filter can do that sometimes). I personally would never allow it to anyone, I can't think of many bigger potentials for error.

ann b’s picture

Thanks Jaypan. I'm going to share this post with my manager.