<?php
// Stuff for db connection
$dbhost = 'xxx';
$dbuser = 'xxx';
$dbpass = 'xxx';
$dbname = 'xxx';
backup_tables($dbhost,$dbuser,$dbpass,$dbname);
/* backup the db OR just a table */
function backup_tables($host,$user,$pass,$name,$tables = '*') {
$link = mysql_connect($host,$user,$pass);
mysql_select_db($name,$link);
//get all of the tables
if($tables == '*') {
$tables = array();
$result = mysql_query('SHOW TABLES');
while($row = mysql_fetch_row($result)) {
$tables[] = $row[0];
}
} else {
$tables = is_array($tables) ? $tables : explode(',',$tables);
}
//cycle through
foreach($tables as $table) {
$result = mysql_query('SELECT * FROM '.$table);
$num_fields = mysql_num_fields($result);
$return.= "DROP TABLE IF EXISTS '.$table.';";
$row2 = mysql_fetch_row(mysql_query('SHOW CREATE TABLE '.$table));
$return.= "nn".$row2[1].";nn";
for ($i = 0; $i < $num_fields; $i++) {
while($row = mysql_fetch_row($result)) {
$return.= 'INSERT INTO '.$table.' VALUES(';
for($j=0; $j<$num_fields; $j++) {
$row[$j] = addslashes($row[$j]);
$row[$j] = ereg_replace("n","\n",$row[$j]);
if (isset($row[$j])) { $return.= '"'.$row[$j].'"' ; } else { $return.= '""'; }
if ($j<($num_fields-1)) { $return.= ','; } } $return.= ");n"; } } $return.="nnn"; } //save file //$handle = fopen('db-backup-'.time().'-'.(md5(implode(',',$tables))).'.sql','w+'); //fwrite($handle,$return); //fclose($handle); // Or just echo the output echo $return; } ?>
Met htaccess is het mogelijk om de toegang tot een directory te ‘sturen’ (Linux webruimte). Dit doet u door een ascii-file genaamd .htaccess (let op de punt) te plaatsen in de betreffende directory. In deze file worden opdrachten opgenomen. Een htaccess file werkt voor de directory waarin de file geplaatst wordt en de directories daaronder. Binnen een website mogen meerdere files gebruikt worden.
Afsluiten directory-listing
In veel gevallen is het niet wenselijk dat bezoekers de inhoud van directories kunnen bekijken. Dit kan opgelost worden door in iedere directory het bestand index.html te zetten. Index.html wordt nl. altijd automatisch door de browser geopend, waardoor een directory listing voorkomen wordt. Voor een uitgebreide website is dit omslachtig. Daarnaast is het zeer omslachtig deze pagina’s aan te passen. Htaccess is een efficiëneter oplossing.
Maak een .htaccess file
zet hierin het commando options -indexes
Het is nu niet meer mogelijk om de directory-inhoud van de huidige en de ondergelegen directory’s op te vragen. Plaats de .htaccess file in de www-directory en uw hele site is beschermd. Variaties:
options +indexes
zet de listing aan.
IndexIgnore *.gif *.jpg
Sta directory listing toe, maar geef geen gif en jpg-files weer.
Bezoekers doorsturen naar een andere pagina
Met de toevoeging: Redirect /dir/page1.htm http://mydomain/somedir/page2.htm. Is het mogelijk om bezoekers van pagina1.htm door te sturen naar http://mydomain/somedir/page2.htm.
Afvangen fouten
U kent ongetwijfeld de lelijke 404 foutmelding die u ziet als een bepaald pagina niet meer bestaat. Deze fouten zijn op te vangen. Op het moment dat er een dergelijke fout ontstaat, kan de bezoeker doorgestuurd worden naar een door u te bepalen pagina. Voeg (een van de) regels toe aan uw .htaccess file:
ErrorDocument 403 /somedir/page1.html ErrorDocument 404 /somedir/page2.html
200 OK 201 Created 202 Accepted 204 No Content 205 Reset Content 206 Partial Content 300 Multiple Choices 301 Moved Permanently 302 Moved Temporarily 303 See Other 304 Not Modified 305 Use Proxy 400 Bad Request 401 Authorization Required 403 Forbidden 404 Not Found 405 Method Not Allowed 406 Not Acceptable (encoding) 407 Proxy Authentication Required 408 Request Timed Out 409 Conflicting Request 410 Gone 411 Content Length Required 412 Precondition Failed 413 Request Entity Too Long 414 Request URI Too Long 415 Unsupported Media Type 500 Internal Server Error 501 Not Implemented 502 Bad Gateway 503 Service Unavailable 504 Gateway Timeout 505 HTTP Version Not Supported
Afsluiten directory met een wachtwoord
Met htaccess is het mogelijk om een bepaalde directoy af te sluiten met een wachtwoord. Wilt u een of meerdere gebruikers toegang geven, plaats dan een .htaccess file met de volgende inhoud:
AuthUserFile /home/gebruiker/home/gebruiker/www/toegang/.htpasswd AuthGroupFile /dev/null AuthName SecretWebsite AuthType Basic require valid-user
In dit voorbeeld wordt het wachtwoord en gebruikersnaam van de mensen die toegang mogen krijgen, opgeslagen in de directory /home/gebruiker/home/gebruiker/www/toegang/. Om een gebruiker toe te voegen moet u met ssh (secure telnet) inloggen op de server om een wachtwoordfile (.htpasswd) te creeren. De inloggegevens voor ssh zijn gelijk aan de inloggegevens voor ftp. Ga naar de juiste directory (in dit geval /home/gebruiker/home/gebruiker/www/toegang/) en voer het volgende commando uit:
htpasswd -c .htpasswd username
Vervang username met de naam waarmee u wilt inloggen. De server vraagt nu om een wachtwoord en slaat dit gecodeerd op. De directory is nu beveiligd. Wilt u meerdere gebruikersnamen toevoegen? Gebruik dan na de eerste keer:
htpasswd .htpasswd username
Als u gebruikersnamen wilt wissen, opent u .htpasswd en verwijderd de gewenste regel(s).
Beveiligen van de .htaccess file zelf
Natuurlijk moet ook de .htaccess file beveiligd worden. Als iemand deze file kan benaderen, zou deze persoon meteen weten waar bijvoorbeeld de .htpasswd file staat. Voeg daarom toe:
order allow,deny deny from all
De eerste regel geeft aan dat het commando ‘deny’ alleen geldt voor de file .htaccess. De derde regel geeft aan dat niemand toegang heeft (iedere toegang wordt geweigerd). Het opvragen van deze file zal nu resulteren in een error 403 (Forbidden).
Als extra beveiliging kan aan de file via ssh de permissie 644 gegeven worden (chmod 644).
$file = checkoutthisfile.exe echo str_replace(strstr($file, '.'), '', $file);
function randomPass() {
// How long should it be?
$length = 10;
$characters = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHJKLMNOPQRSTUVWXYZ";
$string = "";
for ($p = 0; $p < $length; $p++) {
$string .= $characters[mt_rand(0, strlen($characters))];
}
return $string;
}
Selecting a database:
mysql> USE database;
Listing databases:
mysql> SHOW DATABASES;
Listing tables in a db:
mysql> SHOW TABLES;
Describing the format of a table:
mysql> DESCRIBE table;
Creating a database:
mysql> CREATE DATABASE db_name;
Creating a table:
mysql> CREATE TABLE table_name (field1_name TYPE(SIZE), field2_name TYPE(SIZE)); Ex: mysql> CREATE TABLE pet (name VARCHAR(20), sex CHAR(1), birth DATE);
Load tab-delimited data into a table:
mysql> LOAD DATA LOCAL INFILE "infile.txt" INTO TABLE table_name; (Use n for NULL)
Inserting one row at a time:
mysql> INSERT INTO table_name VALUES ('MyName', 'MyOwner', '2002-08-31');
(Use NULL for NULL)
Retrieving information (general):
mysql> SELECT from_columns FROM table WHERE conditions; All values: SELECT * FROM table; Some values: SELECT * FROM table WHERE rec_name = "value"; Multiple critera: SELECT * FROM TABLE WHERE rec1 = "value1" AND rec2 = "value2";
Reloading a new data set into existing table:
mysql> SET AUTOCOMMIT=1; # used for quick recreation of table mysql> DELETE FROM pet; mysql> LOAD DATA LOCAL INFILE "infile.txt" INTO TABLE table;
Fixing all records with a certain value:
mysql> UPDATE table SET column_name = "new_value" WHERE record_name = "value";
Selecting specific columns:
mysql> SELECT column_name FROM table;
Retrieving unique output records:
mysql> SELECT DISTINCT column_name FROM table;
Sorting:
mysql> SELECT col1, col2 FROM table ORDER BY col2; Backwards: SELECT col1, col2 FROM table ORDER BY col2 DESC;
Date calculations:
mysql> SELECT CURRENT_DATE, (YEAR(CURRENT_DATE)-YEAR(date_col)) AS time_diff [FROM table]; MONTH(some_date) extracts the month value and DAYOFMONTH() extracts day.
Pattern Matching:
mysql> SELECT * FROM table WHERE rec LIKE "blah%"; (% is wildcard - arbitrary # of chars) Find 5-char values: SELECT * FROM table WHERE rec like "_____"; (_ is any single character)
Extended Regular Expression Matching:
mysql> SELECT * FROM table WHERE rec RLIKE "^b$";
(. for char, [...] for char class, * for 0 or more instances
^ for beginning, {n} for repeat n times, and $ for end)
(RLIKE or REGEXP)
To force case-sensitivity, use “REGEXP BINARY”
Counting Rows:
mysql> SELECT COUNT(*) FROM table;
Grouping with Counting:
mysql> SELECT owner, COUNT(*) FROM table GROUP BY owner; (GROUP BY groups together all records for each 'owner')
Selecting from multiple tables:
(Example)
mysql> SELECT pet.name, comment FROM pet, event WHERE pet.name = event.name; (You can join a table to itself to compare by using 'AS')
Currently selected database:
mysql> SELECT DATABASE();
Maximum value:
mysql> SELECT MAX(col_name) AS label FROM table;
Auto-incrementing rows:
mysql> CREATE TABLE table (number INT NOT NULL AUTO_INCREMENT, name CHAR(10) NOT NULL);
mysql> INSERT INTO table (name) VALUES ("tom"),("dick"),("harry");
Adding a column to an already-created table:
mysql> ALTER TABLE tbl ADD COLUMN [column_create syntax] AFTER col_name;
Removing a column:
mysql> ALTER TABLE tbl DROP COLUMN col;
(Full ALTER TABLE syntax available at mysql.com.)
Batch mode (feeding in a script):
# mysql -u user -p < batch_file
(Use -t for nice table layout and -vvv for command echoing.)
Alternatively: mysql> source batch_file;
Backing up a database with mysqldump:
# mysqldump --opt -u username -p database > database_backup.sql
(Use ‘mysqldump –opt –all-databases > all_backup.sql’ to backup everything.)
(More info at MySQL’s docs.)