Copying sources and texts (also in parts) for publishing without our permission is NOT ALLOWED. We are fed up with finding our work on other sites (like stackoverflow).
Das Kopieren von Quellcode und Texten (auch in Auszügen) ist nicht erlaubt. Wir haben es gründlich satt, unsere Arbeit auf anderen Webseiten zu finden.

Copying for non-public usage is allowed.           Das private Kopieren und Benutzen ist natürlich erlaubt und erwünscht.
28. Jul 2010
Teaser

PHP: GUID erstellen (flexible Länge und Struktur)

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.

24. Jul 2010
Teaser

Linux: Dateien per SCP ohne Passworteingabe kopieren (SSH)

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.
In dieser Anleitung 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
23. Jul 2010
Teaser

SVN: Nach einem Commit automatisch die Webseite aktualisieren (Post-Commit Hook)

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

22. Jul 2010
Teaser

Oracle: Dynamischen SQL Befehl in einer LOOP

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

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;
22. Jul 2010
Teaser

WordPress: Fehler beim Laden des Stylesheets: Ein unbekannter Fehler ist aufgetreten (805303f4)

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.

21. Jul 2010
Teaser

mySQL: root Passwort ändern

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:

21. Jul 2010
Teaser

PHP: Apache2 Version in Variable auslesen

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

20. Jul 2010
Teaser

Apache: Verzeichnisse mit Passwort schützen (htpasswd)

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

19. Jul 2010
Teaser

PHP: Zugriff von Browsern außerhalb eines IP-Subnetzes unterbinden

Mithilfe des folgenden PHP Scripts können Sie Besucher außerhalb des festgelegten IP Bereiches blockieren:

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:

18. Jul 2010
Teaser

mySQL: Eindeutige ID (UID) erzeugen

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.