17
Tags:
php
mysql
dropbox
Skrevet af
Bruger #8773
@ 23.05.2011
Ja, overskriften siger jo lidt sig selv: jeg vil i denne artikel gennemgå for jer hvordan man kan tage backup af sine MySql databaser - i php - og gemme backup-filerne enten direkte på sin server eller i
Dropbox.
Målet med artiklen er at få fremstillet en php-klasse der kan håndtere selve backup'en og gøre det lettere og mere overskueligt at indstille præcis hvad det er man ønsker. Vi skal altså lære lidt om hvordan man kan anvende en php-klasse i praksis.
Da jeg skrev og testede koden var det på mit webhotel fra Surftown. Så vist jeg har kunne læse rundt omkring, burde det - lidt afhængig af meget specielle serverkonfigurationer - virke de fleste steder.
Jeg bruger ikke selv muligheden for at gemme min backup på serveren, da dette skaber nogle nye dilemmaer. En backup af databasen skal man typisk bruge i to situationer. Den ene er hvis ens side er blevet hacket eller man har dummet sig og derfor har brug for at gendanne sin database. Det andet tilfælde er at serveren crasher eller serverhosten pludseligt går konkurs (ja - det er rent faktisk sket for mig en gang). I det første tilfælde kan det være fint nok at have backup'en på serveren, men i det andet tilfælde giver det jo pludseligt ingen mening.
Det er også derfor jeg er kommet op med muligheden for at tage backup direkte til Dropbox.
Uanset hvilken måde du vælger at tage din backup på, bruges
backups mappen til at gemme backup-filerne i. Når de skal til Dropbox, er det dog kun midlertidigt.
Filerne
Til at starte med skal vi bruge følgende filer og en enkelt mappe:
- backups
- DatabaseBackup.class.php
- DropboxUploader.php
- index.php
Backups/.htaccess
For at starte et sted, kan vi jo starte med at kigge på vores .htaccess fil. Denne er ikke livsnødvendig, men jeg foretrækker at have den med som en ekstra sikkerhedsforanstaltning. Hvis du vælger at have din backup direkte på serveren, er det ikke så smart hvis andre uden problemer kan tilgå dine databaser.
I .htaccess filen sørger vi egentligt blot for at vi afviser adgang fra alle andre end localhost til mappen:
order deny,allow
deny from all
allow from localhost
Jeg vil ikke lave den hel store gennemgang af koden ovenfor, da den i korte træk blot afviser al trafik undtagen trafik fra localhost, altså fra serveren selv.
DatabaseBackup.class.php
I vores
DatabaseBackup.class.php fil sker al magien. Det er denne klasse vi laver et objekt af i
index.php for at kunne starte vores backup.
For dem af jer der skulle være interesseret i et UML diagram for klassen, kan dette ses herunder:
For at starte helt fra toppen af filen, begynder vi med at inkludere
DropboxUploader.php-klassen. Det er en klasse der bruges til at håndtere upload til Dropbox hvis man ønsker dette. Jeg har vedhæftet klassen sammen med de andre filer herunder, og ellers kan den også findes på
Dropbox's egen wiki.
Udover at inkludere
DropboxUploader.php, definerer vi også to konstanter så vi undgår magiske tal i koden:
- <?php
- require_once("DropboxUploader.php");
- define('SERVER',1);
- define('DROPBOX',2);
De to konstanter vi definerede, SERVER og DROPBOX, bruger vi herefter til at finde ud af om filerne skal gemmes på serveren eller om de skal uploades til Dropbox.
Vi definerer også en række private variabler som vi bruger til at huske den information vi får givet i konstruktøren:
- class DatabaseBackup{
- private $uploadeTo;
- private $uploader;
- private $dropboxDir;
- private $uploadeDir;
- private $queue = array();
-
- }
Der er ikke rigtigt nogen kommentar at knytte til ovenstående kode, da vi kommer til anvendelsen af disse lige om et øjeblik.
Vedhæftede filer:
Hvad synes du om denne artikel? Giv din mening til kende ved at stemme via pilene til venstre og/eller lægge en kommentar herunder.
Del også gerne artiklen med dine Facebook venner:
Kommentarer (3)
jeg kan godt lide at din fil dropboxuploader.php er noget du har kopiret fra nettet, men pis på det, rigtig nice artikel og jeg vil til at bruge den nu.
men pas på du kommer til at døje med mig hvis den ikke virker
kom endelig med flere artikler
Jeg tænkte at der ingen grund var til at lave sin egen Dropbox Uploader klasse, når Dropbox allerede havde været så venlige at stille en til rådighed :-)
Super fedt. Men til lidt mere større projekter, hvor der haves adgang til serveren, havde jeg måske en forestilling om at det vil være smartere at benytte noget SSH-baseret backup såsom rsync. Men kan selvfølgelig godt se det fede i at have mindre projekter på sin dropbox
Du skal være
logget ind for at skrive en kommentar.