Code snippets

Quick mysql database back up for webdevelopers

<?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; } ?>
By michael schouman on November 30, 2011 | Code snippets | A comment?

Uw website beveiligen met een .htaccess

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).

By michael schouman on November 28, 2011 | Code snippets | A comment?

php echo only a filename without extension


$file = checkoutthisfile.exe

echo str_replace(strstr($file, '.'), '', $file);
By michael schouman on October 13, 2011 | Code snippets | A comment?

Generate random password php function

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;
}
By michael schouman on October 10, 2011 | Code snippets | A comment?

Selecting a database:

mysql&gt; USE database;

Listing databases:

mysql&gt; SHOW DATABASES;

Listing tables in a db:

mysql&gt; SHOW TABLES;

Describing the format of a table:

mysql&gt; DESCRIBE table;

Creating a database:

mysql&gt; CREATE DATABASE db_name;

Creating a table:

mysql&gt; CREATE TABLE table_name (field1_name TYPE(SIZE), field2_name TYPE(SIZE));
Ex: mysql&gt; CREATE TABLE pet (name VARCHAR(20), sex CHAR(1), birth DATE);

Load tab-delimited data into a table:

mysql&gt; LOAD DATA LOCAL INFILE "infile.txt" INTO TABLE table_name;
(Use n for NULL)

Inserting one row at a time:

mysql&gt; INSERT INTO table_name VALUES ('MyName', 'MyOwner', '2002-08-31');
(Use NULL for NULL)

Retrieving information (general):

mysql&gt; 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&gt; SET AUTOCOMMIT=1; # used for quick recreation of table
mysql&gt; DELETE FROM pet;
mysql&gt; LOAD DATA LOCAL INFILE "infile.txt" INTO TABLE table;

Fixing all records with a certain value:

mysql&gt; UPDATE table SET column_name = "new_value" WHERE record_name = "value";

Selecting specific columns:

mysql&gt; SELECT column_name FROM table;

Retrieving unique output records:

mysql&gt; SELECT DISTINCT column_name FROM table;

Sorting:

mysql&gt; SELECT col1, col2 FROM table ORDER BY col2;
Backwards: SELECT col1, col2 FROM table ORDER BY col2 DESC;

Date calculations:

mysql&gt; 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&gt; 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&gt; 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&gt; SELECT COUNT(*) FROM table;

Grouping with Counting:

mysql&gt; SELECT owner, COUNT(*) FROM table GROUP BY owner;
(GROUP BY groups together all records for each 'owner')

Selecting from multiple tables:
(Example)

mysql&gt; 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&gt; SELECT DATABASE();

Maximum value:

mysql&gt; SELECT MAX(col_name) AS label FROM table;

Auto-incrementing rows:

mysql&gt; CREATE TABLE table (number INT NOT NULL AUTO_INCREMENT, name CHAR(10) NOT NULL);
mysql&gt; INSERT INTO table (name) VALUES ("tom"),("dick"),("harry");

Adding a column to an already-created table:

mysql&gt; ALTER TABLE tbl ADD COLUMN [column_create syntax] AFTER col_name;

Removing a column:

mysql&gt; ALTER TABLE tbl DROP COLUMN col;

(Full ALTER TABLE syntax available at mysql.com.)

Batch mode (feeding in a script):

# mysql -u user -p &lt; 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 &gt; database_backup.sql

(Use ‘mysqldump –opt –all-databases > all_backup.sql’ to backup everything.)
(More info at MySQL’s docs.)

By michael schouman on October 6, 2011 | Code snippets | A comment?