Ja proponuje mój skrypcik, który wykonuje kopię podanej tabeli.
backup.php<?php
function copytable ( $host, $login, $password, $database, $table, $file_name, $orderby )
{
mysql_connect ( $host, $login, $password ); //Łączymy się z bazą danych
$date = date ( \"jS F Y g:i:s a\" ); //Ustalamy datę; Domyślnie jest w formacie angielskim.
if ( !$sql = mysql_query ( \"SELECT * FROM `\" . $table . \"` ORDER BY `\" . $orderby . \"` ASC;\" ) ) {
return 0; //Jeśli nie ma tabeli zwraca błąd
}
$file = fopen ( $file_name, \"a+\" ); //Robimy pliczek lub dopisujemy do istniejącego
$head = \"nnnn\";
$head .= \"##########################################################n\";
$head .= \"#n\";
$head .= \"# Backup data for table `\" . $table . \"`n\";
$head .= \"# Number of records: \" . $records_num . \"n\";
$head .= \"# Date of generate file: \" . $date . \"n\";
$head .= \"#n\";
$head .= \"##########################################################nnn\"; //Tu został ustawiony nagłówek pliku, MySQL potraktuje to jak komentarz
fputs ( $file, $head ); //Wrzucamy nagłówek do pliku
while ($sql_result = mysql_fetch_array( $sql, MYSQL_NUM
) ) //Pętelka która pozwala na odczytanie danych {
$count = count ( $sql_result ); //Zliczamy pola tabeli $sql_for_write = \"INSERT INTO '\" . $table . \"' VALUES(\" ;
$i = 1 ;
$sql_for_write .= \"'\" . $sql_result[0] . \"'\";
while ( $i < $count ) //Pętla odpowiedzialna za utworzenie zapytania
{
$sql_for_write .= \", '\" . $sql_result[$i] . \"'\" ;
$i++;
}
$sql_for_write .= \");n\" ;
fputs ( $file, $sql_for_write ); //Zapytanie zostaje zapisane do pliku. unset ( $sql_for_write ); //Czyścimy zmienną, żeby nie zajmowała pamięci. Zostanie ona później znowu wykorzy tana.
}
fclose ( $file ); //Zamykamy plik
return 1 ; //Funkcja została poprawnie wykonana.
}
?>
Wykorzystanie:<?php
$host = \"localhost\" ;
$login = \"root\" ;
$password = \"\" ;
$database = \"baza\" ;
$table = \"tabela\" ;
$file_name = \"backup.sql\" ;
$orderby = \"id\" ; //Tu zostały ustawione parametry funkcji; w zmienną \"orderby\" wpisujemy klucz, według którego bedzą sortowane wyniki.
require_once ( \"backup.php\" ); //Dołączamy naszą funkcję
$result = copytable ( $host, $login, $password, $database, $table, $file_name, $orderby ); //Ustawiamy zmienną, aby sprawdzić czy wywołanie się powiodło.
if ( $result = 0 ) //Jeśli nie
{
print \"Wystąpił błąd!\"; //Wyświetlamy komunikat }
else //W przeciwnym wypadku
{
print \"Kopia została wykonana!\"; //Powiadamiamy o wykonaniu zadania. }
?>
Napewno działa, sprawdzałem (IMG:
http://forum.php.pl/style_emoticons/default/smile.gif) i to na każdym serwerze.