Jump to content
  • Checkout
  • Login
  • Get in touch

osCommerce

The e-commerce.

FATAL ERROR


tobinuk

Recommended Posts

Hi all,

 

Im getting the following error messgae on whos online.

 

Fatal error: Maximum execution time of 30 seconds exceeded /public_html/admin/whos_online.php on line 136

 

 

I have done a search and only came up with this thread that died off! I have followed the instructions to the tee, by repairing the tables, anaylizing & optimizing etc, but to no avail !!

 

Does anyone have a solution?

 

 

 

 

previouse thread

Link to comment
Share on other sites

Hi all,

 

Im getting the following error messgae on whos online.

 

Fatal error: Maximum execution time of 30 seconds exceeded /public_html/admin/whos_online.php on line 136

I have done a search and only came up with this thread that died off! I have followed the instructions to the tee, by repairing the tables, anaylizing & optimizing etc, but to no avail !!

 

Does anyone have a solution?

previouse thread

Wonder if it is mysql in strict mode?

Link to comment
Share on other sites

Fatal error: Maximum execution time of 30 seconds exceeded /public_html/admin/whos_online.php on line 136

I have done a search and only came up with this thread that died off! I have followed the instructions to the tee, by repairing the tables, anaylizing & optimizing etc, but to no avail !!

I looked at that page and there is no splitting up of entries into several pages. If you have a busy site and lots of browsing clients or your whos_online table is not cleared with old entries (seems to happen with the sessions table on some servers) then it is entirely possiible that the script is still busy going through the data after 30 seconds.

 

Not much you can do about that really. You can try to change the query on line 68 to retrieve only the last 100 or so:

  $whos_online_query = tep_db_query("select customer_id, full_name, ip_address, time_entry, time_last_click, last_page_url, session_id from " . TABLE_WHOS_ONLINE . " order by time_last_click desc limit 100");

Of course you will then never see the true number of customers online in the last 15 minutes (900 seconds) because that is derived from the number or rows retrieved by this query. But that can be fixed too :)

 

An alternative would be to decrease the number of entries in the table by lowering the number 900 in line 13 of that file:

$xx_mins_ago = (time() - 900);

Link to comment
Share on other sites

  • 2 weeks later...
I looked at that page and there is no splitting up of entries into several pages. If you have a busy site and lots of browsing clients or your whos_online table is not cleared with old entries (seems to happen with the sessions table on some servers) then it is entirely possiible that the script is still busy going through the data after 30 seconds.

 

Not much you can do about that really. You can try to change the query on line 68 to retrieve only the last 100 or so:

  $whos_online_query = tep_db_query("select customer_id, full_name, ip_address, time_entry, time_last_click, last_page_url, session_id from " . TABLE_WHOS_ONLINE . " order by time_last_click desc limit 100");

Of course you will then never see the true number of customers online in the last 15 minutes (900 seconds) because that is derived from the number or rows retrieved by this query. But that can be fixed too :)

 

An alternative would be to decrease the number of entries in the table by lowering the number 900 in line 13 of that file:

$xx_mins_ago = (time() - 900);

 

This is my whos_online admin page code

 

<?php
/*
 $Id: whos_online.php 1739 2007-12-20 00:52:16Z hpdl $

 osCommerce, Open Source E-Commerce Solutions
 http://www.oscommerce.com

 Copyright (c) 2003 osCommerce

 Released under the GNU General Public License
*/

 $xx_mins_ago = (time() - 900);

 require('includes/application_top.php');

 require(DIR_WS_CLASSES . 'currencies.php');
 $currencies = new currencies();

// remove entries that have expired
 tep_db_query("delete from " . TABLE_WHOS_ONLINE . " where time_last_click < '" . $xx_mins_ago . "'");
?>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html <?php echo HTML_PARAMS; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
<title><?php echo TITLE; ?></title>
<link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
<script language="javascript" src="includes/general.js"></script>
</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF">
<!-- header //-->
<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
<!-- header_eof //-->

<!-- body //-->
<table border="0" width="100%" cellspacing="2" cellpadding="2">
 <tr>
<td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="1" cellpadding="1" class="columnLeft">
<!-- left_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>
<!-- left_navigation_eof //-->
</table></td>
<!-- body_text //-->
<td width="100%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
  <tr>
	<td><table border="0" width="100%" cellspacing="0" cellpadding="0">
	  <tr>
		<td class="pageHeading"><?php echo HEADING_TITLE; ?></td>
		<td class="pageHeading" align="right"><?php echo tep_draw_separator('pixel_trans.gif', HEADING_IMAGE_WIDTH, HEADING_IMAGE_HEIGHT); ?></td>
	  </tr>
	</table></td>
  </tr>
  <tr>
	<td><table border="0" width="100%" cellspacing="0" cellpadding="0">
	  <tr>
		<td valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
		  <tr class="dataTableHeadingRow">
			<td class="dataTableHeadingContent"><?php echo TABLE_HEADING_ONLINE; ?></td>
			<td class="dataTableHeadingContent" align="center"><?php echo TABLE_HEADING_CUSTOMER_ID; ?></td>
			<td class="dataTableHeadingContent"><?php echo TABLE_HEADING_FULL_NAME; ?></td>
			<td class="dataTableHeadingContent" align="center"><?php echo TABLE_HEADING_IP_ADDRESS; ?></td>
			<td class="dataTableHeadingContent"><?php echo TABLE_HEADING_ENTRY_TIME; ?></td>
			<td class="dataTableHeadingContent" align="center"><?php echo TABLE_HEADING_LAST_CLICK; ?></td>
			<td class="dataTableHeadingContent"><?php echo TABLE_HEADING_LAST_PAGE_URL; ?> </td>
		  </tr>
<?php
 $whos_online_query = tep_db_query("select customer_id, full_name, ip_address, time_entry, time_last_click, last_page_url, session_id from " . TABLE_WHOS_ONLINE);
 while ($whos_online = tep_db_fetch_array($whos_online_query)) {
$time_online = (time() - $whos_online['time_entry']);
if ((!isset($HTTP_GET_VARS['info']) || (isset($HTTP_GET_VARS['info']) && ($HTTP_GET_VARS['info'] == $whos_online['session_id']))) && !isset($info)) {
  $info = $whos_online['session_id'];
}

if ($whos_online['session_id'] == $info) {
  echo '			  <tr id="defaultSelected" class="dataTableRowSelected" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)">' . "\n";
} else {
  echo '			  <tr class="dataTableRow" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="document.location.href=\'' . tep_href_link(FILENAME_WHOS_ONLINE, tep_get_all_get_params(array('info', 'action')) . 'info=' . $whos_online['session_id'], 'NONSSL') . '\'">' . "\n";
}
?>
			<td class="dataTableContent"><?php echo gmdate('H:i:s', $time_online); ?></td>
			<td class="dataTableContent" align="center"><?php echo $whos_online['customer_id']; ?></td>
			<td class="dataTableContent"><?php echo $whos_online['full_name']; ?></td>
			<td class="dataTableContent" align="center"><?php echo $whos_online['ip_address']; ?></td>
			<td class="dataTableContent"><?php echo date('H:i:s', $whos_online['time_entry']); ?></td>
			<td class="dataTableContent" align="center"><?php echo date('H:i:s', $whos_online['time_last_click']); ?></td>
			<td class="dataTableContent"><?php if (eregi('^(.*)' . tep_session_name() . '=[a-f,0-9]+[&]*(.*)', $whos_online['last_page_url'], $array)) { echo $array[1] . $array[2]; } else { echo $whos_online['last_page_url']; } ?> </td>
		  </tr>
<?php
 }
?>
		  <tr>
			<td class="smallText" colspan="7"><?php echo sprintf(TEXT_NUMBER_OF_CUSTOMERS, tep_db_num_rows($whos_online_query)); ?></td>
		  </tr>
		</table></td>
<?php
 $heading = array();
 $contents = array();

 if (isset($info)) {
$heading[] = array('text' => '<b>' . TABLE_HEADING_SHOPPING_CART . '</b>');

if (STORE_SESSIONS == 'mysql') {
  $session_data = tep_db_query("select value from " . TABLE_SESSIONS . " WHERE sesskey = '" . $info . "'");
  $session_data = tep_db_fetch_array($session_data);
  $session_data = trim($session_data['value']);
} else {
  if ( (file_exists(tep_session_save_path() . '/sess_' . $info)) && (filesize(tep_session_save_path() . '/sess_' . $info) > 0) ) {
	$session_data = file(tep_session_save_path() . '/sess_' . $info);
	$session_data = trim(implode('', $session_data));
  }
}

if ($length = strlen($session_data)) {
  if (PHP_VERSION < 4) {
	$start_id = strpos($session_data, 'customer_id[==]s');
	$start_cart = strpos($session_data, 'cart[==]o');
	$start_currency = strpos($session_data, 'currency[==]s');
	$start_country = strpos($session_data, 'customer_country_id[==]s');
	$start_zone = strpos($session_data, 'customer_zone_id[==]s');
  } else {
	$start_id = strpos($session_data, 'customer_id|s');
	$start_cart = strpos($session_data, 'cart|O');
	$start_currency = strpos($session_data, 'currency|s');
	$start_country = strpos($session_data, 'customer_country_id|s');
	$start_zone = strpos($session_data, 'customer_zone_id|s');
  }

  for ($i=$start_cart; $i<$length; $i++) {
	if ($session_data[$i] == '{') {
	  if (isset($tag)) {
		$tag++;
	  } else {
		$tag = 1;
	  }
	} elseif ($session_data[$i] == '}') {
	  $tag--;
	} elseif ( (isset($tag)) && ($tag < 1) ) {
	  break;
	}
  }

  $session_data_id = substr($session_data, $start_id, (strpos($session_data, ';', $start_id) - $start_id + 1));
  $session_data_cart = substr($session_data, $start_cart, $i);
  $session_data_currency = substr($session_data, $start_currency, (strpos($session_data, ';', $start_currency) - $start_currency + 1));
  $session_data_country = substr($session_data, $start_country, (strpos($session_data, ';', $start_country) - $start_country + 1));
  $session_data_zone = substr($session_data, $start_zone, (strpos($session_data, ';', $start_zone) - $start_zone + 1));

  session_decode($session_data_id);
  session_decode($session_data_currency);
  session_decode($session_data_country);
  session_decode($session_data_zone);
  session_decode($session_data_cart);

  if (PHP_VERSION < 4) {
	$broken_cart = $cart;
	$cart = new shoppingCart;
	$cart->unserialize($broken_cart);
  }

  if (is_object($cart)) {
	$products = $cart->get_products();
	for ($i = 0, $n = sizeof($products); $i < $n; $i++) {
	  $contents[] = array('text' => $products[$i]['quantity'] . ' x ' . $products[$i]['name']);
	}

	if (sizeof($products) > 0) {
	  $contents[] = array('text' => tep_draw_separator('pixel_black.gif', '100%', '1'));
	  $contents[] = array('align' => 'right', 'text'  => TEXT_SHOPPING_CART_SUBTOTAL . ' ' . $currencies->format($cart->show_total(), true, $currency));
	} else {
	  $contents[] = array('text' => ' ');
	}
  }
}
 }

 if ( (tep_not_null($heading)) && (tep_not_null($contents)) ) {
echo '			<td width="25%" valign="top">' . "\n";

$box = new box;
echo $box->infoBox($heading, $contents);

echo '			</td>' . "\n";
 }
?>
	  </tr>
	</table></td>
  </tr>
</table></td>
<!-- body_text_eof //-->
 </tr>
</table>
<!-- body_eof //-->

<!-- footer //-->
<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
<!-- footer_eof //-->
<br>
</body>
</html>
<?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>

 

AND THIS IS MY CATOLOG WHOS_ONLINE

 

<?php
/*
 $Id: whos_online.php 1739 2007-12-20 00:52:16Z hpdl $

 osCommerce, Open Source E-Commerce Solutions
 http://www.oscommerce.com

 Copyright (c) 2003 osCommerce

 Released under the GNU General Public License
*/

 $xx_mins_ago = (time() - 900);

 require('includes/application_top.php');

 require(DIR_WS_CLASSES . 'currencies.php');
 $currencies = new currencies();

// remove entries that have expired
 tep_db_query("delete from " . TABLE_WHOS_ONLINE . " where time_last_click < '" . $xx_mins_ago . "'");
?>
<!doctype html public "-//W3C//DTD HTML 4.01 Transitional//EN">
<html <?php echo HTML_PARAMS; ?>>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=<?php echo CHARSET; ?>">
<title><?php echo TITLE; ?></title>
<link rel="stylesheet" type="text/css" href="includes/stylesheet.css">
<script language="javascript" src="includes/general.js"></script>
</head>
<body marginwidth="0" marginheight="0" topmargin="0" bottommargin="0" leftmargin="0" rightmargin="0" bgcolor="#FFFFFF">
<!-- header //-->
<?php require(DIR_WS_INCLUDES . 'header.php'); ?>
<!-- header_eof //-->

<!-- body //-->
<table border="0" width="100%" cellspacing="2" cellpadding="2">
 <tr>
<td width="<?php echo BOX_WIDTH; ?>" valign="top"><table border="0" width="<?php echo BOX_WIDTH; ?>" cellspacing="1" cellpadding="1" class="columnLeft">
<!-- left_navigation //-->
<?php require(DIR_WS_INCLUDES . 'column_left.php'); ?>
<!-- left_navigation_eof //-->
</table></td>
<!-- body_text //-->
<td width="100%" valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
  <tr>
	<td><table border="0" width="100%" cellspacing="0" cellpadding="0">
	  <tr>
		<td class="pageHeading"><?php echo HEADING_TITLE; ?></td>
		<td class="pageHeading" align="right"><?php echo tep_draw_separator('pixel_trans.gif', HEADING_IMAGE_WIDTH, HEADING_IMAGE_HEIGHT); ?></td>
	  </tr>
	</table></td>
  </tr>
  <tr>
	<td><table border="0" width="100%" cellspacing="0" cellpadding="0">
	  <tr>
		<td valign="top"><table border="0" width="100%" cellspacing="0" cellpadding="2">
		  <tr class="dataTableHeadingRow">
			<td class="dataTableHeadingContent"><?php echo TABLE_HEADING_ONLINE; ?></td>
			<td class="dataTableHeadingContent" align="center"><?php echo TABLE_HEADING_CUSTOMER_ID; ?></td>
			<td class="dataTableHeadingContent"><?php echo TABLE_HEADING_FULL_NAME; ?></td>
			<td class="dataTableHeadingContent" align="center"><?php echo TABLE_HEADING_IP_ADDRESS; ?></td>
			<td class="dataTableHeadingContent"><?php echo TABLE_HEADING_ENTRY_TIME; ?></td>
			<td class="dataTableHeadingContent" align="center"><?php echo TABLE_HEADING_LAST_CLICK; ?></td>
			<td class="dataTableHeadingContent"><?php echo TABLE_HEADING_LAST_PAGE_URL; ?> </td>
		  </tr>
<?php
 $whos_online_query = tep_db_query("select customer_id, full_name, ip_address, time_entry, time_last_click, last_page_url, session_id from " . TABLE_WHOS_ONLINE);
 while ($whos_online = tep_db_fetch_array($whos_online_query)) {
$time_online = (time() - $whos_online['time_entry']);
if ((!isset($HTTP_GET_VARS['info']) || (isset($HTTP_GET_VARS['info']) && ($HTTP_GET_VARS['info'] == $whos_online['session_id']))) && !isset($info)) {
  $info = $whos_online['session_id'];
}

if ($whos_online['session_id'] == $info) {
  echo '			  <tr id="defaultSelected" class="dataTableRowSelected" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)">' . "\n";
} else {
  echo '			  <tr class="dataTableRow" onmouseover="rowOverEffect(this)" onmouseout="rowOutEffect(this)" onclick="document.location.href=\'' . tep_href_link(FILENAME_WHOS_ONLINE, tep_get_all_get_params(array('info', 'action')) . 'info=' . $whos_online['session_id'], 'NONSSL') . '\'">' . "\n";
}
?>
			<td class="dataTableContent"><?php echo gmdate('H:i:s', $time_online); ?></td>
			<td class="dataTableContent" align="center"><?php echo $whos_online['customer_id']; ?></td>
			<td class="dataTableContent"><?php echo $whos_online['full_name']; ?></td>
			<td class="dataTableContent" align="center"><?php echo $whos_online['ip_address']; ?></td>
			<td class="dataTableContent"><?php echo date('H:i:s', $whos_online['time_entry']); ?></td>
			<td class="dataTableContent" align="center"><?php echo date('H:i:s', $whos_online['time_last_click']); ?></td>
			<td class="dataTableContent"><?php if (eregi('^(.*)' . tep_session_name() . '=[a-f,0-9]+[&]*(.*)', $whos_online['last_page_url'], $array)) { echo $array[1] . $array[2]; } else { echo $whos_online['last_page_url']; } ?> </td>
		  </tr>
<?php
 }
?>
		  <tr>
			<td class="smallText" colspan="7"><?php echo sprintf(TEXT_NUMBER_OF_CUSTOMERS, tep_db_num_rows($whos_online_query)); ?></td>
		  </tr>
		</table></td>
<?php
 $heading = array();
 $contents = array();

 if (isset($info)) {
$heading[] = array('text' => '<b>' . TABLE_HEADING_SHOPPING_CART . '</b>');

if (STORE_SESSIONS == 'mysql') {
  $session_data = tep_db_query("select value from " . TABLE_SESSIONS . " WHERE sesskey = '" . $info . "'");
  $session_data = tep_db_fetch_array($session_data);
  $session_data = trim($session_data['value']);
} else {
  if ( (file_exists(tep_session_save_path() . '/sess_' . $info)) && (filesize(tep_session_save_path() . '/sess_' . $info) > 0) ) {
	$session_data = file(tep_session_save_path() . '/sess_' . $info);
	$session_data = trim(implode('', $session_data));
  }
}

if ($length = strlen($session_data)) {
  if (PHP_VERSION < 4) {
	$start_id = strpos($session_data, 'customer_id[==]s');
	$start_cart = strpos($session_data, 'cart[==]o');
	$start_currency = strpos($session_data, 'currency[==]s');
	$start_country = strpos($session_data, 'customer_country_id[==]s');
	$start_zone = strpos($session_data, 'customer_zone_id[==]s');
  } else {
	$start_id = strpos($session_data, 'customer_id|s');
	$start_cart = strpos($session_data, 'cart|O');
	$start_currency = strpos($session_data, 'currency|s');
	$start_country = strpos($session_data, 'customer_country_id|s');
	$start_zone = strpos($session_data, 'customer_zone_id|s');
  }

  for ($i=$start_cart; $i<$length; $i++) {
	if ($session_data[$i] == '{') {
	  if (isset($tag)) {
		$tag++;
	  } else {
		$tag = 1;
	  }
	} elseif ($session_data[$i] == '}') {
	  $tag--;
	} elseif ( (isset($tag)) && ($tag < 1) ) {
	  break;
	}
  }

  $session_data_id = substr($session_data, $start_id, (strpos($session_data, ';', $start_id) - $start_id + 1));
  $session_data_cart = substr($session_data, $start_cart, $i);
  $session_data_currency = substr($session_data, $start_currency, (strpos($session_data, ';', $start_currency) - $start_currency + 1));
  $session_data_country = substr($session_data, $start_country, (strpos($session_data, ';', $start_country) - $start_country + 1));
  $session_data_zone = substr($session_data, $start_zone, (strpos($session_data, ';', $start_zone) - $start_zone + 1));

  session_decode($session_data_id);
  session_decode($session_data_currency);
  session_decode($session_data_country);
  session_decode($session_data_zone);
  session_decode($session_data_cart);

  if (PHP_VERSION < 4) {
	$broken_cart = $cart;
	$cart = new shoppingCart;
	$cart->unserialize($broken_cart);
  }

  if (is_object($cart)) {
	$products = $cart->get_products();
	for ($i = 0, $n = sizeof($products); $i < $n; $i++) {
	  $contents[] = array('text' => $products[$i]['quantity'] . ' x ' . $products[$i]['name']);
	}

	if (sizeof($products) > 0) {
	  $contents[] = array('text' => tep_draw_separator('pixel_black.gif', '100%', '1'));
	  $contents[] = array('align' => 'right', 'text'  => TEXT_SHOPPING_CART_SUBTOTAL . ' ' . $currencies->format($cart->show_total(), true, $currency));
	} else {
	  $contents[] = array('text' => ' ');
	}
  }
}
 }

 if ( (tep_not_null($heading)) && (tep_not_null($contents)) ) {
echo '			<td width="25%" valign="top">' . "\n";

$box = new box;
echo $box->infoBox($heading, $contents);

echo '			</td>' . "\n";
 }
?>
	  </tr>
	</table></td>
  </tr>
</table></td>
<!-- body_text_eof //-->
 </tr>
</table>
<!-- body_eof //-->

<!-- footer //-->
<?php require(DIR_WS_INCLUDES . 'footer.php'); ?>
<!-- footer_eof //-->
<br>
</body>
</html>
<?php require(DIR_WS_INCLUDES . 'application_bottom.php'); ?>

 

 

THE FOLLOWING DOES NOT EXSIST IN EITHER OF THOSE FILES

 

You can try to change the query on line 68 to retrieve only the last 100 or so:

  $whos_online_query = tep_db_query("select customer_id, full_name, ip_address, time_entry, time_last_click, last_page_url, session_id from " . TABLE_WHOS_ONLINE . " order by time_last_click desc limit 100");

 

 

THAT IS WHY I CLASSED IT AS UNRESOLVED.......PLUS I LOST THE ORIGINAL THREAD

Link to comment
Share on other sites

Of course those of us who have changed the file will now have it on line 389 or potentially anywhere inbetween.

Need help installing add ons/contributions, cleaning a hacked site or a bespoke development, check my profile

 

Virus Threat Scanner

My Contributions

Basic install answers.

Click here for Contributions / Add Ons.

UK your site.

Site Move.

Basic design info.

 

For links mentioned in old answers that are no longer here follow this link Useful Threads.

 

If this post was useful, click the Like This button over there ======>>>>>.

Link to comment
Share on other sites

Archived

This topic is now archived and is closed to further replies.

×
×
  • Create New...