Skocz do zawartości

[MySQL] Allowed memory size


Ptaq

Rekomendowane odpowiedzi

No i pojawił się problem - od pewnego czasu podczas rejestracji na portalu pojawia się komunikat:

Fatal error: Allowed memory size of 67108864 bytes exhausted (tried to allocate 3458675 bytes) in /home/mariusza/public_html/ogra/includes/debug.class.php on line 24

Czytałem już kilka opcji o zwiększaniu: max_allowed_packet dlatego linki do podobnych rozwiązań już przejrzałem.

( https://forum.php.pl/index.php?showtopic=66...mp;#entry350705

https://www.vbulletin.com/forum/showthread....8563&page=9 )

Zmieniłem w php.ini na z 16MB na 32MB i nadal nic. Testowałem na 2 serwerach i nadal to samo. Pliki nadpisałem z starej na pewno poprawnej kopii - bazę danych optymalizowałem/naprawiałem - nic to nie dało.

Plik błedu debug.class.php wygląda tak w tym fragmecie:

function add($mes)

{

$this->log .= $mes;

$this->numqueries++;

}

pogrubiona linijka jest to ta 24ta. Serwis nie posiada żadnego cache który można by było np. oczyścić.

https://www.punktseo.pl/darmowe-bonusy/ << rozdaje: kody do katalogów firm, kody rabatowe, szablony ZennoPoster ! |---| Moje strony: https://www.s90.pl/pozycjonowanie/ | https://www.seo-stat.pl - zapraszam.                                                                                                                                                                                          

seo-stat-logo.png

 

Odnośnik do komentarza
Udostępnij na innych stronach

Zwiększ do 80MB i zobacz czy taki sam komunikat będzie;

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Nadal to samo - chyba coś z bazą danych się stało - ale nie mam pojęcia co - przez pół roku ładnie śmigała rejestracja i tu nagle taki numer.

https://www.punktseo.pl/darmowe-bonusy/ << rozdaje: kody do katalogów firm, kody rabatowe, szablony ZennoPoster ! |---| Moje strony: https://www.s90.pl/pozycjonowanie/ | https://www.seo-stat.pl - zapraszam.                                                                                                                                                                                          

seo-stat-logo.png

 

Odnośnik do komentarza
Udostępnij na innych stronach

IMHO nIe będzie to problem z baza danych tylko z otwieraniem jakiegoś pliku np logowania operacji itd.

Zobacz czy nie powstał jakiś większy plik którego otwieranie pochłania całą przydzieloną pamięć.

--> Zakładam, że jak zwiększyłeś limit do 80MB to restartowałeś apacha ?

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Nie ma aż tak dużo plików, przejrzałem wszystkie no i nie ma nic dużego - w dodatku ten skrypt nie wymaga żadnych chmodów na katalogi - więc sam raczej sobie nie stworzy. Dwa, że wgrałem pliki z backupa - które mają z 3 mc, a wtedy było jeszcze wszystko OK. Bazy danych niestety nie mogę nadpisać bo mam bardzo nie aktualną.

--> Zakładam, że jak zwiększyłeś limit do 80MB to restartowałeś apacha ?

tak, tak - apach restartowałem i po zmianie na 32M i po zmianie na 80M

https://www.punktseo.pl/darmowe-bonusy/ << rozdaje: kody do katalogów firm, kody rabatowe, szablony ZennoPoster ! |---| Moje strony: https://www.s90.pl/pozycjonowanie/ | https://www.seo-stat.pl - zapraszam.                                                                                                                                                                                          

seo-stat-logo.png

 

Odnośnik do komentarza
Udostępnij na innych stronach

z 60GB wolnego, dwa - że testowałem to na 2 serwerach i na każdym to samo się dzieje.

https://www.punktseo.pl/darmowe-bonusy/ << rozdaje: kody do katalogów firm, kody rabatowe, szablony ZennoPoster ! |---| Moje strony: https://www.s90.pl/pozycjonowanie/ | https://www.seo-stat.pl - zapraszam.                                                                                                                                                                                          

seo-stat-logo.png

 

Odnośnik do komentarza
Udostępnij na innych stronach

Patrzałem w google ( Allowed memory size : $this->log .= $mes;) ktoś ma taki sam problem jak Ty, ale niestety post pozostał bez odpowiedzi...

HTTP 200 usługi IT -> Dariusz Janicki | Realizacja serwisów www oraz oprogramowania w PHP / C# / Golang / Node.js / MySQL/ Laravel
Komory normobaryczne - normobaria.tech Wykonawca montażu i instalacji komory normobarii

Odnośnik do komentarza
Udostępnij na innych stronach

Raczej to nie jest problem bazy danych, jeśli to w tym rzeczywiście miejscu się wykrzacza to wskazałeś, to spróbuj gdzieś w skrypcie wyłączyć logowanie( jak jest classa debug to pewnie jest też jakiś $gDebug = true lub coś tym stylu ). Możesz też sprawdzić do jakiego pliku idą te logi i czy rzeczywiście coś się tam zapisuje. Możesz też sprawdzić co jest w zmiennej $mes, wypisując ją na ekran, przypuszczam że ta zmienna może powiedzieć dużo.

Odnośnik do komentarza
Udostępnij na innych stronach

Plik debug.class.php :

<?php // debug.class.php ::  Clase Debug, maneja reporte de eventos

if(!defined('INSIDE')){ die("attemp hacking");}
//
//  Experiment code!!!
//
/*vamos a experimentar >:)
 le veo futuro a las classes, ayudaria mucho a tener un codigo mas ordenado...
 que esperabas!!! soy newbie!!! D':<
*/

class debug
{
var $log,$numqueries;

function debug()
{
	$this->vars = $this->log = '';
	$this->numqueries = 0;
}

function add($mes)
{
	$this->log .= $mes;
	$this->numqueries++;
}

function echo_log()
{	global $ugamela_root_path;
	echo  "<br><table><tr><td class=k colspan=4><a href=".$ugamela_root_path."admin/settings.php>Debug Log</a>:</td></tr>".$this->log."</table>";
	die();
}

function error($message,$title)
{
	global $link,$game_config;
	if($game_config['debug']==1){
		echo "<h2>$title</h2><br><font color=red>$message</font><br><hr>";
		echo  "<table>".$this->log."</table>";
	}
	//else{
		//A futuro, se creara una tabla especial, para almacenar
		//los errores que ocurran.
		global $user,$ugamela_root_path,$phpEx;
		include($ugamela_root_path . 'config.'.$phpEx);
		if(!$link) die('mySQL no esta disponible por el momento, sentimos el inconveniente...');
		$query = "INSERT INTO {{table}} SET
			`error_sender` = '{$user['id']}' ,
			`error_time` = '".time()."' ,
			`error_type` = '{$title}' ,
			`error_text` = '".mysql_escape_string($message)."';";
		$sqlquery = mysql_query(str_replace("{{table}}", $dbsettings["prefix"].'errors',$query))
			or die('error fatal');
		$query = "explain select * from {{table}}";
		$q = mysql_fetch_array(mysql_query(str_replace("{{table}}", $dbsettings["prefix"].
			'errors', $query))) or die('error fatal: ');


		if (!function_exists('message'))
			echo "Erreur, merci de contacter l'admin. Erreur n°: <b>".$q['rows']."</b>";
		else
			message("Erreur, merci de contacter l'admin. Erreur n°: <b>".$q['rows']."</b>", "Erreur");
	//}

	die();
}


}

?>

Samo $mes; występuję jeszcze w pliku functions.php

//
// Routine Affichage d'un message administrateur avec saut vers une autre page si souhaité
//
function AdminMessage ($mes, $title = 'Error', $dest = "", $time = "3") {
$parse['color'] = $color;
$parse['title'] = $title;
$parse['mes']   = $mes;

$page .= parsetemplate(gettemplate('admin/message_body'), $parse);

display ($page, $title, false, (($dest != "") ? "<meta http-equiv=\"refresh\" content=\"$time;URL=java script:self.location='$dest';\">" : ""), true);
}

Natomiast sam plki rejestracji wygląda tak (bo to wypełnieniu go i kliknięciu wywala ten błąd):

<?php

define('INSIDE'  , true);
define('INSTALL' , false);

$ugamela_root_path = './';
include($ugamela_root_path . 'extension.inc');
include($ugamela_root_path . 'common.' . $phpEx);

includeLang('reg');

function sendpassemail($emailaddress, $password) {
global $lang;

$parse['gameurl']  = GAMEURL;
$parse['password'] = $password;
$email			 = parsetemplate($lang['mail_welcome'], $parse);
$status			= mymail($emailaddress, $lang['mail_title'], $email);
return $status;
}

function mymail($to, $title, $body, $from = '') {
$from = trim($from);

if (!$from) {
	$from = ADMINEMAIL;
}

$rp	 = ADMINEMAIL;

$head   = '';
$head  .= "Content-Type: text/plain \r\n";
$head  .= "Date: " . date('r') . " \r\n";
$head  .= "Return-Path: $rp \r\n";
$head  .= "From: $from \r\n";
$head  .= "Sender: $from \r\n";
$head  .= "Reply-To: $from \r\n";
$head  .= "Organization: $org \r\n";
$head  .= "X-Sender: $from \r\n";
$head  .= "X-Priority: 3 \r\n";
$body   = str_replace("\r\n", "\n", $body);
$body   = str_replace("\n", "\r\n", $body);

return mail($to, $title, $body, $head);
}

if ($_POST) {
$errors	= 0;
$errorlist = "";

$_POST['email'] = strip_tags($_POST['email']);
if (!is_email($_POST['email'])) {
	$errorlist .= "\"" . $_POST['email'] . "\" " . $lang['error_mail'];
	$errors++;
}

if (!$_POST['planet']) {
	$errorlist .= $lang['error_planet'];
	$errors++;
}

if (preg_match("/[^A-z0-9_\-]/", $_POST['hplanet']) == 1) {
	$errorlist .= $lang['error_planetnum'];
	$errors++;
}

if (!$_POST['character']) {
	$errorlist .= $lang['error_character'];
	$errors++;
}

if (strlen($_POST['passwrd']) < 4) {
	$errorlist .= $lang['error_password'];
	$errors++;
}

if (preg_match("/[^A-z0-9_\-]/", $_POST['character']) == 1) {
	$errorlist .= $lang['error_charalpha'];
	$errors++;
}

if ($_POST['rgt'] != 'on') {
	$errorlist .= $lang['error_rgt'];
	$errors++;
}

// Le meilleur moyen de voir si un nom d'utilisateur est pris c'est d'essayer de l'appeler !!
$ExistUser = doquery("SELECT `username` FROM {{table}} WHERE `username` = '". mysql_escape_string($_POST['character']) ."' LIMIT 1;", 'users', true);
if ($ExistUser) {
	$errorlist .= $lang['error_userexist'];
	$errors++;
}

// Si l'on verifiait que l'adresse email n'existe pas encore ???
$ExistMail = doquery("SELECT `email` FROM {{table}} WHERE `email` = '". mysql_escape_string($_POST['email']) ."' LIMIT 1;", 'users', true);
if ($ExistMail) {
	$errorlist .= $lang['error_emailexist'];
	$errors++;
}

if ($_POST['sex'] != ''  &&
	$_POST['sex'] != 'F' &&
	$_POST['sex'] != 'M') {
	$errorlist .= $lang['error_sex'];
	$errors++;
}

if ($errors != 0) {
	message ($errorlist, $lang['Register']);
} else {
	$newpass		= $_POST['passwrd'];
	$UserName	   = CheckInputStrings ( $_POST['character'] );
	$UserEmail	  = CheckInputStrings ( $_POST['email'] );
	$UserPlanet	 = CheckInputStrings ( $_POST['planet'] );

	$md5newpass	 = md5($newpass);
	// Creation de l'utilisateur
	$QryInsertUser  = "INSERT INTO {{table}} SET ";
	$QryInsertUser .= "`username` = '". mysql_escape_string(strip_tags( $UserName )) ."', ";
	$QryInsertUser .= "`email` = '".	mysql_escape_string( $UserEmail )			."', ";
	$QryInsertUser .= "`email_2` = '".  mysql_escape_string( $UserEmail )			."', ";
	$QryInsertUser .= "`sex` = '".	  mysql_escape_string( $_POST['sex'] )		 ."', ";
	$QryInsertUser .= "`id_planet` = '0', ";
	$QryInsertUser .= "`register_time` = '". time() ."', ";
	$QryInsertUser .= "`password`='". $md5newpass ."';";
	doquery( $QryInsertUser, 'users');

	// On cherche le numero d'enregistrement de l'utilisateur fraichement créé
	$NewUser		= doquery("SELECT `id` FROM {{table}} WHERE `username` = '". mysql_escape_string($_POST['character']) ."' LIMIT 1;", 'users', true);
	$iduser		 = $NewUser['id'];

	// Recherche d'une place libre !
	$LastSettedGalaxyPos  = $game_config['LastSettedGalaxyPos'];
	$LastSettedSystemPos  = $game_config['LastSettedSystemPos'];
	$LastSettedPlanetPos  = $game_config['LastSettedPlanetPos'];
	while (!isset($newpos_checked)) {
		for ($Galaxy = $LastSettedGalaxyPos; $Galaxy <= MAX_GALAXY_IN_WORLD; $Galaxy++) {
			for ($System = $LastSettedSystemPos; $System <= MAX_SYSTEM_IN_GALAXY; $System++) {
				for ($Posit = $LastSettedPlanetPos; $Posit <= 4; $Posit++) {
					$Planet = round (rand ( 4, 12) );

					switch ($LastSettedPlanetPos) {
						case 1:
							$LastSettedPlanetPos += 1;
							break;
						case 2:
							$LastSettedPlanetPos += 1;
							break;
						case 3:
							if ($LastSettedSystemPos == MAX_SYSTEM_IN_GALAXY) {
								$LastSettedGalaxyPos += 1;
								$LastSettedSystemPos  = 1;
								$LastSettedPlanetPos  = 1;
								break;
							} else {
								$LastSettedPlanetPos  = 1;
							}
							$LastSettedSystemPos += 1;
							break;
					}
					break;
				}
				break;
			}
			break;
		}

		$QrySelectGalaxy  =	"SELECT * ";
		$QrySelectGalaxy .= "FROM {{table}} ";
		$QrySelectGalaxy .= "WHERE ";
		$QrySelectGalaxy .= "`galaxy` = '". $Galaxy ."' AND ";
		$QrySelectGalaxy .= "`system` = '". $System ."' AND ";
		$QrySelectGalaxy .= "`planet` = '". $Planet ."' ";
		$QrySelectGalaxy .= "LIMIT 1;";
		$GalaxyRow = doquery( $QrySelectGalaxy, 'galaxy', true);

		if ($GalaxyRow["id_planet"] == "0") {
			$newpos_checked = true;
		}

		if (!$GalaxyRow) {
			CreateOnePlanetRecord ($Galaxy, $System, $Planet, $NewUser['id'], $UserPlanet, true);
			$newpos_checked = true;
		}
		if ($newpos_checked) {
			doquery("UPDATE {{table}} SET `config_value` = '". $LastSettedGalaxyPos ."' WHERE `config_name` = 'LastSettedGalaxyPos';", 'config');
			doquery("UPDATE {{table}} SET `config_value` = '". $LastSettedSystemPos ."' WHERE `config_name` = 'LastSettedSystemPos';", 'config');
			doquery("UPDATE {{table}} SET `config_value` = '". $LastSettedPlanetPos ."' WHERE `config_name` = 'LastSettedPlanetPos';", 'config');
		}
	}
	// Recherche de la reference de la nouvelle planete (qui est unique normalement !
	$PlanetID = doquery("SELECT `id` FROM {{table}} WHERE `id_owner` = '". $NewUser['id'] ."' LIMIT 1;", 'planets', true);

	// Mise a jour de l'enregistrement utilisateur avec les infos de sa planete mere
	$QryUpdateUser  = "UPDATE {{table}} SET ";
	$QryUpdateUser .= "`id_planet` = '". $PlanetID['id'] ."', ";
	$QryUpdateUser .= "`current_planet` = '". $PlanetID['id'] ."', ";
	$QryUpdateUser .= "`galaxy` = '". $Galaxy ."', ";
	$QryUpdateUser .= "`system` = '". $System ."', ";
	$QryUpdateUser .= "`planet` = '". $Planet ."' ";
	$QryUpdateUser .= "WHERE ";
	$QryUpdateUser .= "`id` = '". $NewUser['id'] ."' ";
	$QryUpdateUser .= "LIMIT 1;";
	doquery( $QryUpdateUser, 'users');

	// Mise a jour du nombre de joueurs inscripts
	doquery("UPDATE {{table}} SET `config_value` = `config_value` + '1' WHERE `config_name` = 'users_amount' LIMIT 1;", 'config');

	$Message  = $lang['thanksforregistry'];
	if (sendpassemail($_POST['email'], "$newpass")) {
		$Message .= " (" . htmlentities($_POST["email"]) . ")";
	} else {
		$Message .= " (" . htmlentities($_POST["email"]) . ")";
		$Message .= "<br><br>". $lang['error_mailsend'] ." <b>" . $newpass . "</b>";
	}
	message( $Message, $lang['reg_welldone']);
}
} else {
// Afficher le formulaire d'enregistrement
$parse			   = $lang;
$parse['servername'] = $game_config['game_name'];
$page				= parsetemplate(gettemplate('registry_form'), $parse);

display ($page, $lang['registry'], false);
}


?>

jak jest classa debug to pewnie jest też jakiś $gDebug = true lub coś tym stylu

Przejrzałem kilka plików (config.php itp.) ale nie znalazłem czegoś takiego - w panelu admina serwisu jest opcja debugowania (ale to już po rejestracji) no i ta opcja jest wyłączona i raczej nie ma nic wspólnego z tą przy rejestracji.

https://www.punktseo.pl/darmowe-bonusy/ << rozdaje: kody do katalogów firm, kody rabatowe, szablony ZennoPoster ! |---| Moje strony: https://www.s90.pl/pozycjonowanie/ | https://www.seo-stat.pl - zapraszam.                                                                                                                                                                                          

seo-stat-logo.png

 

Odnośnik do komentarza
Udostępnij na innych stronach

Teraz mam komunikat:

Fatal error: Maximum execution time of 30 seconds exceeded in /home/admin/domains/ogra/public_html/db/mysql.php on line 4

Nie wiem czy jest sens zwiększać ten czas.

Plik mysql.php wygląda tak:

<?php

function doquery($query, $table, $fetch = false){
 global $link,$debug,$ugamela_root_path;
//	echo $query."<br />";
require($ugamela_root_path.'config.php');

if(!$link)
{
	$link = mysql_connect($dbsettings["server"], $dbsettings["user"], 
			$dbsettings["pass"]) or
			$debug->error(mysql_error()."<br />$query","SQL Error");
			//message(mysql_error()."<br />$query","SQL Error");

	mysql_select_db($dbsettings["name"]) or $debug->error(mysql_error()."<br />$query","SQL Error");
	mysql_query("set character set latin2");
	mysql_query("set names latin2");
	echo mysql_error();
}
$sql = str_replace("{{table}}", $dbsettings["prefix"].$table, $query);
$sqlquery = mysql_query($sql) or 
			$debug->error(mysql_error()."<br />$sql<br />","SQL Error");
			//print(mysql_error()."<br />$query"."SQL Error");

unset($dbsettings);//se borra la array para liberar algo de memoria

global $numqueries,$debug;//,$depurerwrote003;
$numqueries++;
//$depurerwrote003 .=;
$debug->add("<tr><th>Query $numqueries: </th><th>$query</th><th>$table</th><th>$fetch</th></tr>");

if($fetch)
{ //hace el fetch y regresa $sqlrow
	$sqlrow = mysql_fetch_array($sqlquery);
	return $sqlrow;
}else{ //devuelve el $sqlquery ("sin fetch")
	return $sqlquery;
}	
}

?>

Sam cofig.php raczej wygląda standardowo:

<?php
if(!defined("INSIDE")){ die("attemp hacking"); }
$dbsettings = Array(
"server"	 => "localhost", // MySQL server name.
"user"	   => "admin", // MySQL username.
"pass"	   => "haslo", // MySQL password.
"name"	   => "admin_baza", // MySQL database name.
"prefix"	 => "game_", // Tables prefix.
"secretword" => "742091232d"); // Cookies.
?>

https://www.punktseo.pl/darmowe-bonusy/ << rozdaje: kody do katalogów firm, kody rabatowe, szablony ZennoPoster ! |---| Moje strony: https://www.s90.pl/pozycjonowanie/ | https://www.seo-stat.pl - zapraszam.                                                                                                                                                                                          

seo-stat-logo.png

 

Odnośnik do komentarza
Udostępnij na innych stronach

Czyli prawdopodobnie gdzieś łapie nieskończoną pętlę i nie ma sensu zwiększać. Masz ustawiony error_reporting(E_ALL)? Powinno zlokalizować problem.

Jak nie spróbuj dokleić w pliku konfiguracyjnym lub na początku mysql.php. Powinno wyświetlić jeszcze jakieś błędy.

Prawdopodobnie jakaś stała jest niezdefiniowana, może brakuje chmod 777 w jakimś pliku (jeśli wcześniej działało).

Aha przeklej to co wypluwa ten debug, można zobaczyć na jakich kwerendach się zapętla.

Odnośnik do komentarza
Udostępnij na innych stronach

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

  • Ostatnio przeglądający   0 użytkowników

    • Brak zarejestrowanych użytkowników przeglądających tę stronę.
×
×
  • Dodaj nową pozycję...

Powiadomienie o plikach cookie

Umieściliśmy na Twoim urządzeniu pliki cookie, aby pomóc Ci usprawnić przeglądanie strony. Możesz dostosować ustawienia plików cookie, w przeciwnym wypadku zakładamy, że wyrażasz na to zgodę. Warunki użytkowania Polityka prywatności