Autor | Zpráva | ||
---|---|---|---|
grimword Profil |
#1 · Zasláno: 6. 11. 2015, 13:41:09
Ahoj,
nedaří se mi najít návod jak udělat následující. Chci, aby PHP skript zálohoval celou MySQL do souboru zaloha.sql (pokud existuje, tak jej aktualizovat) (jednoduše provedl dump MySQL). A následně se mi nabídl odkaz na stažení tohoto souboru. Je to úplně stejná funkce, jakou nabízí PHPmyAdmin. Ono to musí být strašně jednoduché, ale nevím jak na to. |
||
Jan Tvrdík Profil |
|||
grimword Profil |
Jan Tvrdík:
Ano, ale tyto library mají tisíce řádků kódu. A přitom to musí být velice snadné. Kód na pár řádků. Například jsem našel toto, co vypadá, že by mohlo dělat přesně co chci: <?php $DBUSER="user"; $DBPASSWD="password"; $DATABASE="user_db"; $filename = "backup-" . date("d-m-Y") . ".sql.gz"; $mime = "application/x-gzip"; header( "Content-Type: " . $mime ); header( 'Content-Disposition: attachment; filename="' . $filename . '"' ); $cmd = "mysqldump -u $DBUSER --password=$DBPASSWD $DATABASE | gzip --best"; passthru( $cmd ); exit(0); ?> Problém je, že ten kód je nejspíš psaný pro localhost. Protože se tam nikde nespecifikuje cesta k databázi (k serveru). A nevím jak to upravit, takže to nemůžu ani vyzkoušet. |
||
juriad Profil |
#4 · Zasláno: 7. 11. 2015, 12:01:06
grimword:
Žádný rozumný hosting ti nedovolí spustit náhodný program. Vše musíš provést v PHP, proto jsou to tisíce řádků kódu. Navíc je tam spousta případů, které bys ty vůbec neuvažoval. |
||
grimword Profil |
juriad:
Tady není řeč o žádném programu? A proč na obyčejné vypsání MySQL potřebuji tisíce řádků kódu? |
||
Keeehi Profil |
grimword:
„Tady není řeč o žádném programu?“ Ale je, jen to nevíš, protože memáš dostatek znalostí. Jde o program mysqldup a snaží se ho spouštět řádek 15. Ta funkce passthru spouští právě další programy a s exec(), system() a dalšími příbuznými jsou na hostincích zakázané. A v případě knihovny MySQL-dump je tvůj kód taky jen na pár řádků. <?php set_time_limit(0); ignore_user_abort(TRUE); require __DIR__ . '/src/MySQLDump.php'; $dump = new MySQLDump(new mysqli('localhost', 'root', 'password', 'database')); ini_set('zlib.output_compression', TRUE); header('Content-Type: application/x-gzip'); header('Content-Disposition: attachment; filename="dump ' . date('Y-m-d H-i') . '.sql.gz"'); header('Expires: ' . gmdate('D, d M Y H:i:s') . ' GMT'); header('Cache-Control: no-cache'); header('Connection: close'); $dump->write(); Šlo by to i zkrátit a ve většině případů by to i fungovalo, jen by to nebylo tak profesionální. |
||
juriad Profil |
#7 · Zasláno: 7. 11. 2015, 12:40:43
grimword:
Je. passthru zhruba spustí zadaný příkaz v přikazovém řadku a jeho výstup pošle webovému serveru. V tomto případě spouštíš program mysqldump a jeho výstup předáváš programu gzip .
Jenomže ty se to nesnažíš pouze nějak vypsat, ale vypsat do podoby takové, že z ní potom celá databáze půjde obnovit. Jedna věc jsou data, další jsou definice jednotlivých struktur, kódování dumpu, optimalizace následného importu. Jen se podívej kolik nejrůznějších přepínačů má program mysqldump a ten je rozhodně ještě mnohem rozsáhlejší.
To, co odkázal Jan Tvrdík je ve skutečnosti opravdu jednoduché a má to 211 řádek, tak jaképak tisíce. Šlo by sprasit, aby to mělo kolem stovky, ale za cenu přehlednosti. |
||
Časová prodleva: 9 let
|
0