PHP: GUID erstellen (flexible Länge und Struktur)
Katrin | 28.07.2010
Um in PHP eine GUID (Globally Unique Identifier) zu erzeugen (wie Sie sie ggf. aus C# und anderen Programmiersprachen kennen), hilft Ihnen die folgende Funktion weiter:
function getGUID($len = 36) { $tmp = ""; $pos = array(8,13,18,23); while (strlen($tmp) < $len) $tmp .= md5(uniqid()); foreach ($pos as $p) if ($p <= $len) $tmp[$p] = "-"; return substr($tmp,0,$len); }
Ausgabe (Beispiel):
echo getGUID(); 3470b4e8-d6fe-1f76-6c09-0d31828e8a1d echo getGUID(20); 8b31eeb6-b451-a61d-f
Die Lage der Trennzeichen (“-”) können Sie durch das Array “$pos” bestimmen, die Länge der GUID durch den Parameter “$len”. Wenn Sie keinen Parameter übergeben, ist die GUID automatisch 36 Zeichen lang.
Topics: Anleitungen, php | Kommentar schreiben »
Linux: Dateien per SCP ohne Passworteingabe kopieren (SSH)
Günther | 24.07.2010
Wenn Sie automatisch per SCP Dateien kopieren möchten und dabei nicht das Passwort eingeben können oder möchten, dann hilft Ihnen diese Anleitung. Für dieses Beispiel sollen Dateien von Server 1 auf Server 2 kopiert werden:

Für dieses Beispiel gelten folgende Bedingungen:
- Das Script liegt auf Server 2 – die Daten werden von Server 1 “abgeholt”
- Der Benutzer für den Datentransfer heißt “backup”
Vorbereitungen auf Server 1 (Quelle):
- Unter dem Benutzernamen “backup” anmelden oder zum Benutzer wechseln:
su backup - Schlüssel für den automatischen Zugriff von Server 2 erstellen.
Dieser gilt nur für den aktuell angemeldeten Benutzernamen.
ssh-keygen -t dsa
Jede Frage mit “Enter” beantworten und kein Passwort eingeben:
Generating public/private dsa key pair.
Enter file in which to save the key (/home/backup/.ssh/id_dsa):
Created directory '/home/backup/.ssh'.
Enter passphrase (empty for no passphrase):
Enter same passphrase again:
Your identification has been saved in /home/backup/.ssh/id_dsa.
Your public key has been saved in /home/backup/.ssh/id_dsa.pub.
The key fingerprint is:
d2:5a:6c:9f:15:5c:2c:d1:d1:d5:3b:7f:3c:88:bf:d3 backup@servername.com
The key's randomart image is:
+--[ DSA 1024]----+
[Ihr virtueller Fingerabdruck]
+-----------------+
Die Datei liegt im .ssh Unterverzeichnis des Benutzers
Vorbereitungen auf Server 2 (Ziel):
- Ggf. müssen wir zuerst das .ssh Verzeichnis auf Server2 für den Benutzer “backup” anlegen:
mkdir /home/backup/.ssh
chmod 700 /home/backup/.ssh
chown backup:backup /home/backup/.ssh - Wir benötigen den öffentlichen Schlüssel des Benutzers “backup” vom “Server 1″ auf diesem Server. Durch diesen Schlüssel kann sich später Server 2 automatisch bei Server 1 anmelden (identifizieren).
scp backup@server1:~/.ssh/id_dsa.pub /home/backup/.ssh/public-key.tmp
Topics: Anleitungen, Linux, Sicherheit | Kommentar schreiben »
SVN: Nach einem Commit automatisch die Webseite aktualisieren (Post-Commit Hook)
Jockel | 23.07.2010
Bei SVN Projekten werden die Änderungen der Entwickler & Programmierer regelmäßig von deren lokaler Kopie in das entsprechende SVN Repository committed (= gesichert / gespeichert).
Bei diesem “Committen” können Sie Ihren SVN Server anweisen, sofort die Änderungen auf einen WebServer zu kopieren und dadurch stets die aktuellste Version zum Testen vorzuhalten.
Zuerst müssen Sie die Grundlage für spätere Updates schaffen … einen grundlegenden Export des aktuelles Repositories:
svn export http://yourDomain.com/svn/YourProject /path/to/webserver/
Wenn das WebServer verzeichnis (hier: “/path/to/webserver/”) bereits existiert und jetzt für den Export überschrieben werden soll, dann müssen die die Option “–force” an den Befehl anhängen:
svn export http://yourDomain.com/svn/YourProject /path/to/webserver/ --force
Nun richten Sie die Update-Automatik ein:
- Dafür gehen Sie in das “hooks” Verzeichnis Ihres Projektes auf dem SVN Server
- Kopieren Sie sich die Vorlage für den “post-commit” Hook:
cp post-commit.tmpl post-commit
- Bearbeiten Sie die Datei “post-commit”
nano post-commit
- Fügen Sie folgende Befehle ein:
1 2
cd /path/to/webserver/ svnlook dirs-changed [REPOS] -r [REV] | xargs /usr/bin/svn up -N
Hinweis:
Dieses Vorgehen ist (meist) nur für lokale Produktions- und Test-Webserver zu empfehlen. Bei Live-Systemen können auch kleine Fehler in der Entwicklung zu fatalen Problemen führen, da diese sofort online für jeden Besucher sichtbar wären.
Topics: Anleitungen, Apache WebServer, Linux, eclipse | Kommentar schreiben »
Oracle: Dynamischen SQL Befehl in einer LOOP
Günther | 22.07.2010
In Oracle können Sie auch dynamische SQL Statements als Datenquelle für SQL Abfragen nutzen. Aber nicht nur diese Technik wird im folgenden Beispiel erklärt.
Zusätzlich können Sie die Daten des dynamischen SQL Statements auch in einer Schleife (Loop) abarbeiten lassen und dadurch auch mehrere Befehl für jeden Datensatz (Record) verarbeiten. Sie haben dadurch die Möglichkeit, komplexe Verarbeitungen (Befehle) in mehrere einzelne Befehle auszuteilen (zu splitten):
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 | CREATE OR REPLACE PROCEDURE TEST (in_Filter IN number) IS Ssql varchar2(2000); TYPE c1 IS REF CURSOR; the_cursor c1; BEGIN -- SQL Basis (Basisstatement) Ssql := 'select distinct kunde.id as kunde_id FROM customer kunde WHERE kunde.status = 1'; -- Filter and das Statement anhängen (wenn ein Filter vorhanden) IF (in_Filter IS NOT NULL) then Ssql := Ssql || ' AND kunde.code = ' || in_Filter; end IF; -- Daten auslesen OPEN the_cursor FOR Ssql; -- Für jeden gefundenen Kunden Aktionen verarbeiten LOOP fetch the_cursor INTO tmp_kunde_id; EXIT WHEN the_cursor%NOTFOUND; -- Historie löschen DELETE FROM customer_state WHERE customer = tmp_kunde_id AND week < (SELECT TO_NUMBER(TO_CHAR(SYSDATE,'IW')) AS week FROM dual); -- Stati des Kunden kopieren INSERT INTO customer_invoices (customer,STATUS,week) SELECT cust_id, state_id, week FROM state_tbl WHERE STATUS > 0 end loop; close the_cursor; END; |
Topics: Anleitungen, Oracle | Kommentar schreiben »
WordPress: Fehler beim Laden des Stylesheets: Ein unbekannter Fehler ist aufgetreten (805303f4)
Günther | 22.07.2010
Wenn Sie bei Ihrem WordPress auch das Plugin “Google XML Sitemaps” benutzen, stehen Sie nach dem Update auf Version “3.2.4″ des Plugins vor einem kleinen Problem. Leider bekommen Sie es bewußt nicht immer mit sondern merken es erst nach einer Überprüfung z.Bsp. in den Google Webmaster Tools:
Ihre (vom Plugin generierte) XML Datei ist nicht erreichbar:
Fehler beim Laden des Stylesheets: Ein unbekannter Fehler ist aufgetreten (805303f4)
Teilweise tritt dieses Problem nur bei einer Domain auf – die Hauptdomain (oder erste Domain) läuft relativ ungestört weiter. Für Google und andere Suchmaschinen (Crawler) ist das kleine Problem jedoch massiv, denn sie können Ihre XML Sitemap nicht mehr (richtig) verarbeiten. Dadurch kann es zu plötzlich fehlenden Links und Einträgen in den Suchmaschinen bzgl. Ihrer Webseite kommen. Hintergrund ist ein Problem mit der Verlinkung auf die hinterlegte XSL Datei.
Lösung:
Benennen Sie die Daten “sitemap.xsl” im Verzeichnis “/wp-content/plugins/google-sitemap-generator/” einfach um. Ohne diese Daten erzeugt das Plugin die XML Sitemap wieder fehlerfrei und Google kann wieder alles lesen.
Beispielbefehl für Linux:
mv sitemap.xsl sitemap.xsl.old
In Ihrem FTP Programm können Sie die Datei einfach umbenennen. Häufig ist diese Funktion auf die Taste “F2″ gelegt.
Wichtig für eine schnelle Korrektur:
Erzeugen Sie nach der Umbenennung der XSL Datei Ihre XML Sitemap neu. Gehen Sie dafür in Ihrem WordPress Backend (Administrationsbereich “/wp-admin/”) auf “Einstellungen” > “XML-Sitemap”. Dort klicken Sie auf “… von Hand neu erstellen”. Danach ist die korrigierte XML Daten für die Suchmaschinen verfügbar.
Topics: Anleitungen, WordPress | Kommentar schreiben »
mySQL: root Passwort ändern
Jockel | 21.07.2010
Mit folgenden Befehlen können Sie das root Passwort Ihres mySQL Server ändern:
/usr/bin/mysqladmin -u root password 'new-password' /usr/bin/mysqladmin -u root -h YourDomain.com password 'new-password'
Beachten Sie dazu auch unsere anderen Artikel:
- mySQL: Vergessenes (root) Passwort zurücksetzen
- mySQL: Alte MD5 Passwörter – OLD_PASSWORD()
- MySQL: Root Passwort ändern
Topics: Allgemeines, Anleitungen, MySQL | Kommentar schreiben »
PHP: Apache2 Version in Variable auslesen
Jockel | 21.07.2010
Damit Sie auf einem Unix (Linux) System einfach die aktuelle Version des Apache WebServers herausfinden können, zeigen wir Ihnen ein PHP-Beispiel.
In dem PHP Script wird die Apache-Funktion “apache2ctl” genutzt, die die aktuelle Apache-Version auszulesen. Dieser Befehl wird mithilfe des PHP Befehles “passthru()” direkt an das Linuxsystem weitergegeben.
Hinweis:
Häufig ist auf “öffentlichen” Webservern aus Sicherheitsgründen die Nutzung einiger Befehle gesperrt. Dazu zählt häufig auch der Befehl “passthru()”. Wenn das Script bei Ihnen lokal auf dem Computer also einwadnfrei läuft und auf Ihrem Internetserver keine Daten zurück gibt, liegt diese Befehlssperre vor. Eine Möglichkeit, diese Sperre aufzuheben hat nur Ihr Web-Administrator (oder Provider).
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | <?php // PHP Version auslesen ob_start(); passthru("apache2ctl -v"); $ver = ob_get_contents(); if empty($ver) echo "passthru() disabled ?"; ob_end_clean(); $a = explode("\n", $ver); preg_match('/(server version: ){1}(.*)/i', $a[0], $v); $data[0] = $v[2]; preg_match('/(server built: ){1}(.*)/i', $a[1], $v); $data[1] = date("d.m.Y H:i:s", strtotime($v[2])); print_r($data); ?> |
Topics: Allgemeines, Anleitungen, Apache WebServer, Sicherheit, php | Kommentar schreiben »
Apache: Verzeichnisse mit Passwort schützen (htpasswd)
Günther | 20.07.2010
Mit dem Apache Webserver wird ein Hilfsprogramm ausgeliefert: htpasswd
Es ermöglicht Ihnen die einfache Erstellung von Passwortdateien. Am einfachsten ist es über die Kommandozeile zu bedienen. Mit dem Aufruf “htpasswd -h” erhalten Sie eine kurze Hilfe und Syntax.
Beispiel:
htpasswd -c .htusers peter
Durch diesen Befehl wird eine neue Passwortdatei angelegt. Dabei müssen Sie für den neuen Benutzer “peter” ein Passwort angeben und (durch eine wiederholte Eingabe) bestätigen.
Kopieren Sie die neu erstellte Datei in das vorgesehene, zu schützende Verzeichnis auf Ihrem Internetserver (WebServer).
Topics: Anleitungen, Apache WebServer, Datenschutz, Sicherheit | Kommentar schreiben »
PHP: Zugriff von Browsern außerhalb eines IP-Subnetzes unterbinden
Jockel | 19.07.2010
Mithilfe des folgenden PHP Scripts können Sie Besucher außerhalb des festgelegten IP Bereiches blockieren:
1 2 3 4 5 6 7 8 9 10 11 12 | <?php if (strncmp("192.168.0", $_SERVER["REMOTE_ADDR"], 9) != 0) { // Block access header("HTTP/1.0 403 Forbidden"); // header('Location: http://www.google.com'); exit; } else { // Allow access echo "Zugriff erlaubt ..."; } ?> |
In diesem Beispiel werden alle Besucher, deren IP Adresse nicht mit “192.168.0″ anfängt, blockiert.
Dieser IP Bereich wird nur LAN intern verwendet. Für die Filterung von Besuchern aus dem WAN (Internet) filtern Sie bitte auf die öffentliche IP Adresse Ihrer Webseitenbesucher. Passen Sie dabei auch die Länge der zu vergleichenden Zeichen an (im o.a. Beispiel werden die ersten 9 Zeichen verglichen). Diese können Sie sich mithilfe des folgenden PHP Scripts anzeigen:
1 2 3 | <?php echo $_SERVER["REMOTE_ADDR"]; ?> |
Topics: Allgemeines, Anleitungen, Sicherheit, php | Kommentar schreiben »
mySQL: Eindeutige ID (UID) erzeugen
Jockel | 18.07.2010
Damit Sie in einem SQL Statement eine eindeutige ID (unique ID = UID) nutzen können, steht Ihnen der Befehl “uuid()” zur Verfügung:
SELECT UUID();
Ergebnis:
f15be048-dfb8-102d-b15d-88b2e2560827
Hinweis:
In Verbindung mit einer aktiven Replikation kann diese Funktion derzeit noch nicht genutzt werden.
Topics: Allgemeines, Anleitungen, MySQL | Kommentar schreiben »
« Vorheriger Beitrag