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)