Visa ett inlägg
Oläst 2009-05-02, 18:46 #12
Jake.Nu Jake.Nu är inte uppkopplad
Medlem
 
Reg.datum: Oct 2006
Inlägg: 224
Jake.Nu Jake.Nu är inte uppkopplad
Medlem
 
Reg.datum: Oct 2006
Inlägg: 224
Här är ett gammal fult script som jag gjort och använt en del.
Kanske strular det lite beroende på charsets och likn.

1. Lägg sql-filen och scriptet i samma katalog på webbservern.
2. Sätt namnet på sql-filen i $filename
3. Sätt $max_per_request till så många _byte_ som du vill köra per request.
4. Surfa in på sidan

Kod:
<?php

$filename = "mysqldump.sql";
$max_per_request	= 52428800; // 5 MB

function get_data(&$offset, $max = 8192, $filename)
{
	$rows = array();
	
	if ($fp = fopen($filename, "r"))
	{
 *$is_row	= false;
 *$buf *= "";
 *$tot_len	= 0;
 *
 *if ($offset)
 *{
 *	fseek($fp, $offset, SEEK_SET);
 *}
 *
 *while ($row = fgets($fp))
 *{
 *	if (!$is_row)
 *	{
 * *if (strpos($row, "CREATE") !== 0 && strpos($row, "INSERT") !== 0)
 * *{
 * *	continue;
 * *}
 * *
 * *$is_row	= true;
 * *$buf *= "";
 *	}
 *	
 *	$buf .= $row;
 *	$row_len = strlen($row);
 *	$tot_len += $row_len;
 *	
 *	if (strpos($row, ";\n") === $row_len - 2)
 *	{
 * *$is_row = false;
 * *
 * *$rows[] = $buf;
 * *
 * *if ($tot_len >= $max)
 * *{
 * *	break;
 * *}
 *	}
 *}
 *
 *$offset = ftell($fp);
 *
 *fclose($fp);
	}
	
	return $rows;
}

$start_offset = isset($_GET["offset"]) ? intval($_GET["offset"]) : 0;

$sqlData *= get_data($start_offset, $max_per_request, $filename);

if (empty($sqlData))
{
	echo "Import klar<br/>";
	
	exit();
}
	
mysql_connect("..", "..", "..")or die(mysql_error());
mysql_select_db("..")or die(mysql_error());

foreach ($sqlData as $query)
{
	mysql_query($query)or die($query . " => " . mysql_error());
}

header("Refresh: 2;URL=http://" . $_SERVER["HTTP_HOST"] . "/" . $_SERVER["SCRIPT_NAME"] . "?offset=" . $start_offset);
exit();
?>
Fungerar bra med dumpar från mysqldump och phpmyadmin.


edit: alla tabbar försvann i koden..
edit: konstruerat för Linux (a.k.a. nyrad = \n)
Jake.Nu är inte uppkopplad   Svara med citatSvara med citat