News:

Wondering if this will always be free?  See why free is better.

Main Menu

WSOD on logout

Started by Sir Osis of Liver, April 14, 2022, 12:25:19 AM

Previous topic - Next topic

@rjen

For what it is worth : something must have changed recently , in your server or the forum code or the block code.

It does not JUST stop working...
Running SMF 2.1 with latest TinyPortal at www.fjr-club.nl

Doug Heffernan

Quote from: @rjen on April 16, 2022, 02:28:44 AMFor what it is worth : something must have changed recently , in your server or the forum code or the block code.

It does not JUST stop working...

Agreed. Errors do not just pop out of nowhere. Something edited/modified somewhere is causing this.

dan4ever

Quote from: @rjen on April 16, 2022, 02:05:56 AMCurious to learn what the problem was then. Can you share the custom block code ?
Here or on TP forum?
/Dan Olsson, Webmaster at https://www.guldforum.se

@rjen

Either place is fine by me...
Running SMF 2.1 with latest TinyPortal at www.fjr-club.nl

dan4ever

/*
Block: Recent posts with post preview
*/

/* [SETUP WHAT YOU WANT HERE] */

$topics_posts = 1; // TOPICS - 1 | MESSAGES - 2
$limit = 25; // How many recent posts do you want to output?
$number = 80; // How many characters do you want to output?
$exclude_boards = array( 44, 45, 86); // IF null guests can see all boards | IF you want to hide some boards use: array( ID1, ID2, ID3) where ID is the board's ID
$htmlspecialcharacters = false; // Do you need to show html special characters like Greek characters?

// Scroll Enable? Height and Speed?
$scrolling =2;       // ENABLE - 1 | DISABLE - 2
$speed = 3;           // SLOW - 1 | MEDIUM - 10 | FAST - 20
$height = "350px";
$scrollbar = 2;       // ENABLE - 1 | DISABLE - 2

// Do you want to translate it to your own language? :P
$text['board'] = 'i';
$text['who'] = 'av';

/* [STOP!] - THIS IS THE END OF SETUP */

//Only code from now on ;)
global $smcFunc, $scripturl, $sourcedir, $modSettings, $user_info, $settings, $context;


// Let's grab some database results
if ($topics_posts == 1) {

if (is_array($exclude_boards) || (int) $exclude_boards === $exclude_boards)
{
$exclude_boards = is_array($exclude_boards) ? $exclude_boards : array($exclude_boards);
}
elseif ($exclude_boards != null)
{
$output_method = $exclude_boards;
$exclude_boards = array();
}

$posts_result = $smcFunc['db_query']('', '
   SELECT m.poster_name, m.poster_time, m.id_msg, t.id_member_updated, m.subject, m.body, m.id_topic, b.name, t.id_last_msg, u.avatar, g.online_color,' . ($user_info['is_guest'] ? '1 AS is_read, 0 AS new_from' : '
IFNULL(lt.id_msg, IFNULL(lmr.id_msg, 0)) >= m.id_msg_modified AS is_read,
IFNULL(lt.id_msg, IFNULL(lmr.id_msg, -1)) + 1 AS new_from') . '
   FROM {db_prefix}topics AS t
   LEFT JOIN {db_prefix}boards AS b ON (t.id_board = b.id_board)
   LEFT JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_last_msg)
   LEFT JOIN {db_prefix}members AS u ON (t.id_member_updated = u.id_member)
   LEFT JOIN {db_prefix}membergroups AS g ON (g.id_group = CASE WHEN u.id_group = 0 THEN u.id_post_group ELSE u.id_group END)
   ' . (!$user_info['is_guest'] ? '
LEFT JOIN {db_prefix}log_topics AS lt ON (lt.id_topic = m.id_topic AND lt.id_member = ' . $user_info['id'] . ')
LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = b.id_board AND lmr.id_member = ' . $user_info['id'] . ')' : '') . '     
   WHERE m.approved=1'   . (empty($exclude_boards) ? '' : '
AND b.id_board NOT IN ({array_int:exclude_boards})') . ' AND {query_see_board}
   ORDER BY t.id_last_msg DESC
   LIMIT ' . $limit,
array(
'exclude_boards' => empty($exclude_boards) ? '' : $exclude_boards,
)   
   );
$posts = array();
while ($row_posts = $smcFunc['db_fetch_assoc']($posts_result))
{

      global $memberContext;
      loadMemberData($row_posts['id_member_updated']);
      loadMemberContext($row_posts['id_member_updated']);

   $posts[] = array(
  'id' => $row_posts['id_member_updated'],
      'username' => '<a style="color: ' . $row_posts['online_color'] . ';" href="' . $scripturl . '?action=profile;u=' . $row_posts['id_member_updated'] . '">' . $row_posts['poster_name'] . '</a>',
      'subject' => '<a style="font-weight: bold;" title="' . $text['board'] . ' ' . $row_posts['name'] .'" href="' . $scripturl . '?topic=' . $row_posts['id_topic'] . '.msg' . $row_posts['id_last_msg'] . ';topicseen#new">' . $row_posts['subject'] . '</a>',
      'body' => $row_posts['body'],
  'avatar' => !empty($row_posts['avatar']) == '' ? $memberContext[$row_posts['id_member_updated']]['avatar']['href'] : (stristr($row_posts['avatar'], 'https://') ? $row_posts['avatar'] : $modSettings['avatar_url'] . '/' . $row_posts['avatar']),
  'board' => $row_posts['name'],
  'time' => timeformat($row_posts['poster_time']),
  'new' => !empty($row_posts['is_read'])
   );
}
$smcFunc['db_free_result']($posts_result);

} else {

if (is_array($exclude_boards) || (int) $exclude_boards === $exclude_boards)
{
$exclude_boards = is_array($exclude_boards) ? $exclude_boards : array($exclude_boards);
}
elseif ($exclude_boards != null)
{
$output_method = $exclude_boards;
$exclude_boards = array();
}

$posts_result = $smcFunc['db_query']('', '
   SELECT m.poster_name, m.poster_time, m.id_msg, m.id_member, m.subject, m.body, m.id_topic, b.name, b.id_board, u.avatar, g.online_color,' . ($user_info['is_guest'] ? '1 AS is_read, 0 AS new_from' : '
IFNULL(lt.id_msg, IFNULL(lmr.id_msg, 0)) >= m.id_msg_modified AS is_read,
IFNULL(lt.id_msg, IFNULL(lmr.id_msg, -1)) + 1 AS new_from') . '
   FROM {db_prefix}messages AS m
   LEFT JOIN {db_prefix}boards AS b ON (m.id_board = b.id_board)
   LEFT JOIN {db_prefix}members AS u ON (m.id_member = u.id_member)
   LEFT JOIN {db_prefix}membergroups AS g ON (g.id_group = CASE WHEN u.id_group = 0 THEN u.id_post_group ELSE u.id_group END)
   ' . (!$user_info['is_guest'] ? '
LEFT JOIN {db_prefix}log_topics AS lt ON (lt.id_topic = m.id_topic AND lt.id_member = ' . $user_info['id'] . ')
LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = b.id_board AND lmr.id_member = ' . $user_info['id'] . ')' : '') . '   
   WHERE m.approved=1'   . (empty($exclude_boards) ? '' : '
AND b.id_board NOT IN ({array_int:exclude_boards})') . ' AND {query_see_board}
   ORDER BY m.id_msg DESC
   LIMIT ' . $limit,
array(
'exclude_boards' => empty($exclude_boards) ? '' : $exclude_boards,
)   
   );
$posts = array();
while ($row_posts = $smcFunc['db_fetch_assoc']($posts_result))
{

      global $memberContext;
      loadMemberData($row_posts['id_member']);
      loadMemberContext($row_posts['id_member']);

   $posts[] = array(
  'id' => $row_posts['id_member'],
      'username' => '<a style="color: ' . $row_posts['online_color'] . ';" href="' . $scripturl . '?action=profile;u=' . $row_posts['id_member'] . '">' . $row_posts['poster_name'] . '</a>',
      'subject' => '<a style="font-weight: bold;" title="' . $text['board'] . ' ' . $row_posts['name'] .'" href="' . $scripturl . '?topic=' . $row_posts['id_topic'] . '.msg' . $row_posts['id_msg'] . ';topicseen#new">' . $row_posts['subject'] . '</a>',
      'body' => $row_posts['body'],
  'avatar' => !empty($row_posts['avatar']) == '' ? $memberContext[$row_posts['id_member']]['avatar']['href'] : (stristr($row_posts['avatar'], 'https://') ? $row_posts['avatar'] : $modSettings['avatar_url'] . '/' . $row_posts['avatar']),
  'board' => $row_posts['name'], 
  'time' => timeformat($row_posts['poster_time']),
  'new' => !empty($row_posts['is_read'])
   );
}
$smcFunc['db_free_result']($posts_result);

}

//Finally the Output

//Scrolling xD
if ($scrolling == 1)
echo '<div style="overflow: hidden;"><marquee height=' . $height . ' behavior="scroll" direction="up" scrollamount="' . $speed . '" onmouseover="this.stop()" onmouseout="this.start()">';

if ($scrollbar == 1)
echo '<div style="height:' . $height . '; overflow-y: scroll; overflow-x: hidden;">';

foreach ($posts as $post) {

// Lets fix the BBCode bug and Strip the Text
$content1 = str_replace("[", "<", $post['body']);
$content2 = str_replace("]", ">", $content1);
$content3 = strip_tags($content2);
$preview = substr ($content3,0,$number);

echo'<table>
<tr>
<td style="width: 40px;">
<img src="' . $post['avatar'] .'" alt="" width="40px" height="40px" />
</td>
<td>
' . $post['subject'];

if (!$post['new'] && $context['user']['is_logged'])
echo ' <img src="', $settings['images_url'], '/', $context['user']['language'], '/new.gif" alt="new" border="0" />';

echo '<br />
<small>' . $text['who'] . ' ' . $post['username'] . ' | ' . $post['time'] .'</small>
</td>
</tr>
</table>';

if ($htmlspecialcharacters) {
echo htmlspecialchars($preview, ENT_NOQUOTES, "UTF-8") . '...';
} else {
echo $preview . '...';
}

echo '<hr />';
}
       
//Scrolling xD
if ($scrollbar == 1)
echo '</div>';

if ($scrolling == 1)
echo '</marquee></div>';
/Dan Olsson, Webmaster at https://www.guldforum.se

dan4ever

Quote from: dan4ever on April 16, 2022, 10:51:43 AM/*
Block: Recent posts with post preview
*/

/* [SETUP WHAT YOU WANT HERE] */

$topics_posts = 1; // TOPICS - 1 | MESSAGES - 2
$limit = 25; // How many recent posts do you want to output?
$number = 80; // How many characters do you want to output?
$exclude_boards = array( 44, 45, 86); // IF null guests can see all boards | IF you want to hide some boards use: array( ID1, ID2, ID3) where ID is the board's ID
$htmlspecialcharacters = false; // Do you need to show html special characters like Greek characters?

// Scroll Enable? Height and Speed?
$scrolling =2;       // ENABLE - 1 | DISABLE - 2
$speed = 3;           // SLOW - 1 | MEDIUM - 10 | FAST - 20
$height = "350px";
$scrollbar = 2;       // ENABLE - 1 | DISABLE - 2

// Do you want to translate it to your own language? :P
$text['board'] = 'i';
$text['who'] = 'av';

/* [STOP!] - THIS IS THE END OF SETUP */

//Only code from now on ;)
global $smcFunc, $scripturl, $sourcedir, $modSettings, $user_info, $settings, $context;


// Let's grab some database results
if ($topics_posts == 1) {

if (is_array($exclude_boards) || (int) $exclude_boards === $exclude_boards)
{
$exclude_boards = is_array($exclude_boards) ? $exclude_boards : array($exclude_boards);
}
elseif ($exclude_boards != null)
{
$output_method = $exclude_boards;
$exclude_boards = array();
}

$posts_result = $smcFunc['db_query']('', '
   SELECT m.poster_name, m.poster_time, m.id_msg, t.id_member_updated, m.subject, m.body, m.id_topic, b.name, t.id_last_msg, u.avatar, g.online_color,' . ($user_info['is_guest'] ? '1 AS is_read, 0 AS new_from' : '
IFNULL(lt.id_msg, IFNULL(lmr.id_msg, 0)) >= m.id_msg_modified AS is_read,
IFNULL(lt.id_msg, IFNULL(lmr.id_msg, -1)) + 1 AS new_from') . '
   FROM {db_prefix}topics AS t
   LEFT JOIN {db_prefix}boards AS b ON (t.id_board = b.id_board)
   LEFT JOIN {db_prefix}messages AS m ON (m.id_msg = t.id_last_msg)
   LEFT JOIN {db_prefix}members AS u ON (t.id_member_updated = u.id_member)
   LEFT JOIN {db_prefix}membergroups AS g ON (g.id_group = CASE WHEN u.id_group = 0 THEN u.id_post_group ELSE u.id_group END)
   ' . (!$user_info['is_guest'] ? '
LEFT JOIN {db_prefix}log_topics AS lt ON (lt.id_topic = m.id_topic AND lt.id_member = ' . $user_info['id'] . ')
LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = b.id_board AND lmr.id_member = ' . $user_info['id'] . ')' : '') . '     
   WHERE m.approved=1'   . (empty($exclude_boards) ? '' : '
AND b.id_board NOT IN ({array_int:exclude_boards})') . ' AND {query_see_board}
   ORDER BY t.id_last_msg DESC
   LIMIT ' . $limit,
array(
'exclude_boards' => empty($exclude_boards) ? '' : $exclude_boards,
)   
   );
$posts = array();
while ($row_posts = $smcFunc['db_fetch_assoc']($posts_result))
{

      global $memberContext;
      loadMemberData($row_posts['id_member_updated']);
      loadMemberContext($row_posts['id_member_updated']);

   $posts[] = array(
  'id' => $row_posts['id_member_updated'],
      'username' => '<a style="color: ' . $row_posts['online_color'] . ';" href="' . $scripturl . '?action=profile;u=' . $row_posts['id_member_updated'] . '">' . $row_posts['poster_name'] . '</a>',
      'subject' => '<a style="font-weight: bold;" title="' . $text['board'] . ' ' . $row_posts['name'] .'" href="' . $scripturl . '?topic=' . $row_posts['id_topic'] . '.msg' . $row_posts['id_last_msg'] . ';topicseen#new">' . $row_posts['subject'] . '</a>',
      'body' => $row_posts['body'],
  'avatar' => !empty($row_posts['avatar']) == '' ? $memberContext[$row_posts['id_member_updated']]['avatar']['href'] : (stristr($row_posts['avatar'], 'https://') ? $row_posts['avatar'] : $modSettings['avatar_url'] . '/' . $row_posts['avatar']),
  'board' => $row_posts['name'],
  'time' => timeformat($row_posts['poster_time']),
  'new' => !empty($row_posts['is_read'])
   );
}
$smcFunc['db_free_result']($posts_result);

} else {

if (is_array($exclude_boards) || (int) $exclude_boards === $exclude_boards)
{
$exclude_boards = is_array($exclude_boards) ? $exclude_boards : array($exclude_boards);
}
elseif ($exclude_boards != null)
{
$output_method = $exclude_boards;
$exclude_boards = array();
}

$posts_result = $smcFunc['db_query']('', '
   SELECT m.poster_name, m.poster_time, m.id_msg, m.id_member, m.subject, m.body, m.id_topic, b.name, b.id_board, u.avatar, g.online_color,' . ($user_info['is_guest'] ? '1 AS is_read, 0 AS new_from' : '
IFNULL(lt.id_msg, IFNULL(lmr.id_msg, 0)) >= m.id_msg_modified AS is_read,
IFNULL(lt.id_msg, IFNULL(lmr.id_msg, -1)) + 1 AS new_from') . '
   FROM {db_prefix}messages AS m
   LEFT JOIN {db_prefix}boards AS b ON (m.id_board = b.id_board)
   LEFT JOIN {db_prefix}members AS u ON (m.id_member = u.id_member)
   LEFT JOIN {db_prefix}membergroups AS g ON (g.id_group = CASE WHEN u.id_group = 0 THEN u.id_post_group ELSE u.id_group END)
   ' . (!$user_info['is_guest'] ? '
LEFT JOIN {db_prefix}log_topics AS lt ON (lt.id_topic = m.id_topic AND lt.id_member = ' . $user_info['id'] . ')
LEFT JOIN {db_prefix}log_mark_read AS lmr ON (lmr.id_board = b.id_board AND lmr.id_member = ' . $user_info['id'] . ')' : '') . '   
   WHERE m.approved=1'   . (empty($exclude_boards) ? '' : '
AND b.id_board NOT IN ({array_int:exclude_boards})') . ' AND {query_see_board}
   ORDER BY m.id_msg DESC
   LIMIT ' . $limit,
array(
'exclude_boards' => empty($exclude_boards) ? '' : $exclude_boards,
)   
   );
$posts = array();
while ($row_posts = $smcFunc['db_fetch_assoc']($posts_result))
{

      global $memberContext;
      loadMemberData($row_posts['id_member']);
      loadMemberContext($row_posts['id_member']);

   $posts[] = array(
  'id' => $row_posts['id_member'],
      'username' => '<a style="color: ' . $row_posts['online_color'] . ';" href="' . $scripturl . '?action=profile;u=' . $row_posts['id_member'] . '">' . $row_posts['poster_name'] . '</a>',
      'subject' => '<a style="font-weight: bold;" title="' . $text['board'] . ' ' . $row_posts['name'] .'" href="' . $scripturl . '?topic=' . $row_posts['id_topic'] . '.msg' . $row_posts['id_msg'] . ';topicseen#new">' . $row_posts['subject'] . '</a>',
      'body' => $row_posts['body'],
  'avatar' => !empty($row_posts['avatar']) == '' ? $memberContext[$row_posts['id_member']]['avatar']['href'] : (stristr($row_posts['avatar'], 'https://') ? $row_posts['avatar'] : $modSettings['avatar_url'] . '/' . $row_posts['avatar']),
  'board' => $row_posts['name'], 
  'time' => timeformat($row_posts['poster_time']),
  'new' => !empty($row_posts['is_read'])
   );
}
$smcFunc['db_free_result']($posts_result);

}

//Finally the Output

//Scrolling xD
if ($scrolling == 1)
echo '<div style="overflow: hidden;"><marquee height=' . $height . ' behavior="scroll" direction="up" scrollamount="' . $speed . '" onmouseover="this.stop()" onmouseout="this.start()">';

if ($scrollbar == 1)
echo '<div style="height:' . $height . '; overflow-y: scroll; overflow-x: hidden;">';

foreach ($posts as $post) {

// Lets fix the BBCode bug and Strip the Text
$content1 = str_replace("[", "<", $post['body']);
$content2 = str_replace("]", ">", $content1);
$content3 = strip_tags($content2);
$preview = substr ($content3,0,$number);

echo'<table>
<tr>
<td style="width: 40px;">
<img src="' . $post['avatar'] .'" alt="" width="40px" height="40px" />
</td>
<td>
' . $post['subject'];

if (!$post['new'] && $context['user']['is_logged'])
echo ' <img src="', $settings['images_url'], '/', $context['user']['language'], '/new.gif" alt="new" border="0" />';

echo '<br />
<small>' . $text['who'] . ' ' . $post['username'] . ' | ' . $post['time'] .'</small>
</td>
</tr>
</table>';

if ($htmlspecialcharacters) {
echo htmlspecialchars($preview, ENT_NOQUOTES, "UTF-8") . '...';
} else {
echo $preview . '...';
}

echo '<hr />';
}
       
//Scrolling xD
if ($scrollbar == 1)
echo '</div>';

if ($scrolling == 1)
echo '</marquee></div>';

I'l be back tomorrow
/Dan
/Dan Olsson, Webmaster at https://www.guldforum.se

@rjen

Just tested your block code on SMF2.0.19 (https://www.fjr-club.nl/test2/index.php?action=forum) and on SMF2.1 (https://test.fjr-club.nl/index.php?action=forum)

Except for some avatars that are distorted or missing I see no errors in my test forums...

PHP Version 7.4.28
Running SMF 2.1 with latest TinyPortal at www.fjr-club.nl

lurkalot

It's a llong shot, but I was wondering if it could be something like this causing it, https://www.simplemachines.org/community/index.php?topic=573899.msg4061800#msg4061800

@rjen

Hmmm special character issue... that may be the reason yes...
Running SMF 2.1 with latest TinyPortal at www.fjr-club.nl

Sir Osis of Liver

Dan had disabled guest access to all blocks.  Home page now loads for guests, but all you see are header and footer.  Looks like crap, but allows guests to log in.  Just restored guest access one block at a time, confirms last one caused wsod.  Code posted above.
When in Emor, do as the Snamors.
                              - D. Lister

Doug Heffernan

Quote from: Sir Osis of Liver on April 16, 2022, 05:30:28 PMJust restored guest access one block at a time, confirms last one caused wsod.

I take it that the issue has been identified now and it has been dealt with? If that is the case you can mark the topic as solved.

Thank you for posting the code that caused the issue as it can help other members in the future who might run into the same issue.

Sir Osis of Liver

AFAIK, the specific code that's causing the problem hasn't been identified here or in TP support topic.  It's also unknown what triggered the wsod, as this code has been running unchanged for several months at least.
When in Emor, do as the Snamors.
                              - D. Lister

@rjen

Have you checked the posts that would be selected for special characters? This is what caused the issue Lurkalot referred to.

The solution was to convert the forum to utf-8..
Running SMF 2.1 with latest TinyPortal at www.fjr-club.nl

Sir Osis of Liver

Forum is utf-8 with Swedish utf-8 language package.  Will check database tables soon as I get a chance.
When in Emor, do as the Snamors.
                              - D. Lister

dan4ever

Quote from: @rjen on April 16, 2022, 11:53:15 AMExcept for some avatars that are distorted or missing I see no errors in my test forums...

PHP Version 7.4.28
I use PHP 7.3.33 for the moment.
I did changed two numbers in this code.   se pic...
I don't know why I had 0 on that ????
You cannot view this attachment.
/Dan
/Dan Olsson, Webmaster at https://www.guldforum.se

Advertisement: