Autor Zpráva
etexweb
Profil
Na akú hodnotu zmeniť memory_limit v php.ini aby nevypisovalo chybu:

Fatal error: Allowed memory size of 104857600 bytes exhausted (tried to allocate 103861381 bytes) in /home/clients/aktuality.sk/aktuality.sk/backups/index.php on line 28
DJ Miky
Profil
Na vyšší.

Nebo optimalizovat ten skript, aby nepotřeboval tolik paměti.
etexweb
Profil
Ako by si ho teda optimalizoval pri databáze z veľkosťou 500 MB ?
<?php
// Zálohovanie SQL databázy v ZIP formáte na server, © 2011 EtexWEB.sk
// Tento script je voľne šíriteľný.
// Nevymazávajte tento text!
// Verzia: 3.2v Autor: Richard Dobroň
Class BackUP {
	var $DB_host = "localhost"; // Hosting
	var $DB_user = "databaza"; // Uživateľ
	var $DB_pass = "heslo"; // Heslo
	var $DB_name = "meno"; // Názov databázy
	var $DB_tabs = Array(); // Tabulky
	var $DB_flds = Array(); // Polia
	var $DB_row1; // Riadok 1
	var $DB_cmmd; // Príkaz
	var $Content; // Obsah
	Function BackUP() {
		 $creationstart=strtok(microtime()," ")+strtok(" ");
		 mysql_connect($this->DB_host, $this->DB_user, $this->DB_pass);
		 mysql_select_db($this->DB_name);
		 $this->DB_cmmd = mysql_query("SHOW TABLES");
		 While($row = mysql_fetch_row($this->DB_cmmd))
		      $this->DB_tabs[] = $row[0];
		      Foreach($this->DB_tabs as $tabulka) {
			     $this->DB_cmmd = mysql_query("SELECT * FROM ".$tabulka);
			     $this->Content.= "DROP TABLE IF EXISTS $table;";
			     $this->DB_row1 = mysql_fetch_row(mysql_query("SHOW CREATE TABLE ".$tabulka));
			     $this->Content.= "\n\n".$this->DB_row1[1].";\n\n";
			     While($row = mysql_fetch_row($this->DB_cmmd)) {
				  $this->Content.= "INSERT INTO $table VALUES(";
				  Foreach($row as $field)
					 $this->flds[]="'".mysql_real_escape_string($field)."'";
					 $this->Content.= implode(",",$this->flds).");\n";
				  }
			     $this->Content.="\n\n\n";
			     }
		$creationend=strtok(microtime()," ")+strtok(" ");
		$creationtime=number_format($creationend-$creationstart,4);
		$zip = new ZipArchive;
		$name = date("Y-j-F-H-i");
		$res = $zip->open($name.".zip", ZipArchive::CREATE);
		If ($res === TRUE) {
		   $zip->addFromString("BackUP.sql", $this->Content);
		   $zip->close();
		   echo "Záloha bola úspešne vytvorená za {$creationtime} sekúnd!";
		} Else {
		   echo 'Vytvorenie zálohy zlyhalo!';
		}
	}
}
	$BackUP = new BackUP(); // Zavolanie funkcie()
Tori
Profil
etexweb:
Například místo ukládání do proměnné by se mohlo postupně ukládat do dočasného souboru a pak pracovat s ním.
etexweb
Profil
Tak som to skúšal ale z databázy veľkej 1MB vytvorilo súbor veľký 10 GB
Tori
Profil
Tohle vám chybělo:
                  While($row = mysql_fetch_row($this->DB_cmmd)) {
                  $this->flds = array();
                  $this->Content.= "INSERT INTO $table VALUES(";
                  Foreach($row as $field)
                     $this->flds[]="'".mysql_real_escape_string($field)."'";
                     $this->Content.= implode(",",$this->flds).");\n";
                  }
Taky používáte proměnnou $table místo $tabulka (ř.25 + 29).

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0