MyOOS Version 1.6.14

Dieses Jahr beginnen wir mit neuen Veröffentlichungen.

MyOOS Version 1.6.14

MyOOS 1.6.14 kann über unsere BerliOS Seite herunter
geladen werden. (ca. 9 MB)
https://developer.berlios.de/project/showfiles.php?group_id=814&release_id=15720

MyOOS ist ein Open Source Produkt unter der Gnu Public
Licence. MyOOS ist freie Software.

Freie Software hat etwas mit Freiheit zu tun, nicht mit
dem Preis. Um das Konzept zu verstehen, ist an »frei«
wie in »freier Rede«, und nicht wie in »Freibier« zu
denken.

Freie Software bedeutet die Freiheit des Benutzers, die
Software zu benutzen, zu kopieren, sie zu vertreiben, ´
zu studieren, zu verändern und zu verbessern. Genauer
gesagt, bezieht sich der Begriff »Freie Software« auf
vier Arten von Freiheit, die der Benutzer der Software hat:

* Die Freiheit, das Programm für jeden Zweck zu benutzen
* Die Freiheit, zu verstehen, wie das Programm funktioniert
und wie man es für seine Ansprüche anpassen kann.
* Die Freiheit, Kopien weiterzuverbreiten, so dass man
seinem Nächsten weiterhelfen kann.
* Die Freiheit, das Programm zu verbessern und die
Verbesserungen der Öffentlichkeit zur Verfügung zu stellen,
damit die ganze Gemeinschaft davon profitieren kann.

Unsere Sponsoren bekommen als kleines Dankeschön
die MyOOS Version 1.7.14
http://www.myoos.de/info/MyOOS-1.7.14-p-50.html

Ich freue mich darüber, dass MyOOS Ihnen zu Beginn
des neuen Jahres zwei neue Systeme vorstellen kann.

Der MySQL Query-Cache

Der MySQL Query-Cache beschleunigt in den meißten Fällen die Abfragen. Er ist ab der Version 4 von MYSQL enthalten.

Mit dem Query-Cache werden Querys und deren Ergebnismengen gespeichert. Wenn das gleiche Statement mehrmals benutzt wird und die betroffenen Datensätze sich nicht verändert haben, wird das Ergebnis aus dem Cache geliefert.

Hinweis: Der Abfrage-Cache gibt keine veralteten Daten zurück. Wenn Tabellen modifiziert werden, werden alle entsprechenden Einträge im Abfrage-Cache synchronisiert.

MySQL Dokumentation

Viel Spaß noch beim Optimieren. Sie können uns gerne einmal Ihrere Erfahrungen über die Vor- oder Nachteile des Query-Caches schreiben. Auf Feedback sind wir immer neugierig.

Die PHP.ini – PHP gegen Angriffe absichern

Die wichtigsten Sicherheitseinstellungen in der php.ini

  • allow_url_fopen – Diese Einstellung legt fest, dass PHP-Skripte nur lokale Dateien des Servers einbinden können. Verbietet man dies, wird es einem Angreifer erschwert seinen Schadcode aus dem Internet nachzuladen. Manchmal benötigt man dies allerdings, etwa um NewsFeeds von externen Servern zu laden. Empfohlene Einstellung: OFF
  • allow_url_include – Ähnlich wie allow_url_fopen, allerdings betrifft diese Einstellung nicht das öffnen von Dateien, sondern das inkludieren (include(), require()) von Dateien.
    Empfohlene Einstellung: OFF (erst ab PHP 5.2.0 verfügbar!)
  • disable_functions – Hier kann man eine, durch Komma separierte, Liste mit PHP-Funktionen eintragen deren Benutzung gesperrt sein soll. Wenn man sie nicht unbedingt benötigt, sollten hier alle Funktionen eingetragen werden, die einen serverweiten Zugriff gestatten. Manche Funktionen, wie etwa exec(), sind vergleichbar mit einem Generalschlüssel für den Server.
    Empfohlene Einstellung: escapeshellcmd, exec, ini_restore, passthru, popen, proc_nice, proc_open, shell_exec, system
  • display_errors – Im produktiven Einsatz sollten PHP-Fehlermeldungen nicht angezeigt werden. Fehlermeldungen sind nicht nur lästig und hinterlassen einen unprofessionellen Eindruck beim Kunden sondern, und das ist viel wichtiger, geben Fehlermeldungen jedem Angreifer wichtige Informationen über die Struktur und den Aufbau unserer Scripts.
    Empfohlene Einstellung: OFF
  • open_basedir – Legt ein Verzeichnis fest, in dem wir mit PHP arbeiten können. Auf diese Art kann man verhindern, dass ein manipuliertes Script Zugriff auf gewisse Ordner oder ganze Bereiche auf unserem Server erhält.
    Empfohlene Einstellung: Root Verzeichnis der Internetpräsenz
  • register_globals – Ist diese Einstellung aktiv, werden Variablen aus GET und POST global verfügbar gemacht und überschreiben damit ggfs. andere Variablen mit dem selben Name. Ist diese Einstellung deaktiviert, muss auf Eingaben von aussen explizit mit $_GET, $_POST, $_SESSION zugegriffen werden. Empfohlene Einstellung: OFF

  • safe_mode – Ist der Safe_Mode aktiviert, werden u.a. Berechtigungs-Prüfungen durchgeführt, ob die gewünschte Aktion von einem User durchführbar ist. Empfohlene Einstellung: ON

404 Fehlerseite

Wer kennt das nicht? Man ruft eine Web-Ressource auf – und vollkommen unerwartet findet man sich im Niemandsland des Web wieder.

404 – Not Found

Fehler der Art 404 müssen Sie auf jeden Fall auffangen, schließlich handelt es sich dabei um die am häufigsten auftretende Art von Fehler im Web. Vorbildlich ist die 404-Fehlerseite der Initiative Einfach für Alle der Aktion Mensch. Die Seite ist im Design der Website gehalten, schlägt einen sehr freundlichen Ton an und ist um konkrete Hilfestellung und Problemlösung bemüht.

Um stets auf dem Laufenden zu bleiben, welche 404er auf Ihrer Site auftreten, können Sie
sich bei jedem Aufruf der Fehlerseite eine automatisch generierte Mail zusenden lassen.

Die Konfiguration der Funktion ist denkbar einfach:

Tagen Sie in die Datei
~/shop/oos_debug.php

  define('SEND_404_ERROR', 'true');
  define('REPORTLEVEL_404', '1');
  define('WEBMASTER_NAME', 'Ihr Name');
  define('WEBMASTER_EMAIL_ADDRESS', 'ihre@mail.tld');

Mit false

  define('SEND_404_ERROR', 'false');

deaktivieren Sie die Benachtichtungen per Mail

  define('REPORTLEVEL_404', '1'); //

0 = Keine Benachrichtigungen
1 = Mail Benachrichtigungen nur bei fehlerhaften Links auf der eigenen Seite
2 = Sendet bei allen 404 Fehlern eine Mail

  define('WEBMASTER_NAME', 'Ihr Name');

Tragen Sie hier den Namen vom Empfänger ein.

  define('WEBMASTER_EMAIL_ADDRESS', 'ihre@mail.tld');

Die Mail Adresse vom Empfänger.

Gestaltung der Fehlerseite

Die Standardfehlerseite, wenn Sie keine eigenen Fehlerseiten definieren, geben kaum Hilfestellung, wie Nutzer an die gewünschten Informationen gelangen, und wirken aufgrund ihres reduzierten Designs wie ein Fremdkörper und nicht wie ein Teil Ihrer Website.

Google veröffentlich folgende Empfehlungen zur Gestaltung der Fehlerseite:

Hier finden Sie einige Vorschläge für das Erstellen einer effektiven 404-Seite, die auch dazu beitragen kann, dass Besucher auf Ihrer Website bleiben und sie dabei unterstützt, die gewünschten Informationen zu finden:

  • Erklären Sie Besuchern deutlich, dass die gewünschte Seite nicht gefunden werden kann. Verwenden Sie freundliche und einladende Formulierungen.
  • Stellen Sie sicher, dass Ihre 404-Seite dasselbe Design (einschließlich Navigation) wie der Rest Ihrer Website aufweist.
  • Fügen Sie Links zu Ihren meistgelesenen Artikeln oder Posts hinzu, sowie einen Link zur Startseite Ihrer Website.
  • Ziehen Sie in Erwägung, Nutzern die Möglichkeit zu geben, einen fehlerhaften Link zu melden.
  • Unabhängig davon, wie schön und nützlich Ihre benutzerdefinierte 404-Seite auch sein mag – Sie möchten wahrscheinlich nicht, dass sie in den Google-Suchergebnissen angezeigt wird. Um die Indizierung von 404-Seiten durch Google und anderen Suchmaschinen zu unterbinden, stellen Sie sicher, dass Ihr Webserver einen tatsächlichen 404-HTTP-Statuscode ausgibt, wenn eine nicht existierende Seite aufgerufen wird.

http://www.google.com/support/webmasters/

Links zur Seitmap

<?php echo '<a href ="' . oos_href_link($aModules['info'], $aFilename['info_sitemap']) . '">Sitemap</a>'; ?></a>

Links zum WebShop

<?php echo '<a href ="' . oos_href_link($aModules['main'], $aFilename['main']) . '">' . STORE_NAME . '</a>'; ?>

Link zu den meistgelesenen Artikeln

<?php echo '<a href ="' . oos_href_link($aModules['products'], $aFilename['product_info'], 'products_id=zahl') . '">Ihr Produkt</a>'; ?>

404-Seiten verbessern
Google stellt unter Webmatertools das 404-Widget zur Verfügung.

Sie können Ihrer benutzerdefinierten 404-Seite das 404-Widget von Google hinzufügen. Mithilfe des 404-Widgets erhalten Nutzer automatisch nützliche Vorschläge anstatt Fehlermeldungen.

  • Es wird ein Suchfeld für Ihre Website mit entsprechenden Suchvorschlägen hinzugefügt.
  • Es versucht, Alternativen für falsche URLs anzugeben
  • .

http://www.google.com/support/webmasters/

MySQL Performance Monitoring mit AdoDB

Nützliches Utility im ADOdb Layer

http://phplens.com/lens/adodb/docs-perf.htm

Grundsätzlich „merkt“ man Performance Probleme erst dann, wenn der Server sehr deutlich langsamer wird – allerdings kann man zu diesem Zeitpunkt nur raten, was denn nun die begrenzte Resource ist.

Im MyOOS stehen Ihnen umfassende Monitoring- und Diagnosefunktionen zur Verfügung.

Um harte Fakten zu bekommen (beziehungsweise permanent zu überwachen, bevor es zu Problemen kommt), sollte man sich des Performance Monitors bedienen:

~/shop/includes/

define('OOS_LOG_SQL', 'true');    // OOS Performance Monitor

Für die kurzfristige permanente Überwachung kann man die Ausgabe deaktiven in

~/shop/includes/oos_nice_exit.php

  if (OOS_LOG_SQL == 'true') {
    $dbconn->LogSQL(false); // turn off logging
    // output summary of SQL logging results
/*
    $perf = NewPerfMonitor($dbconn);
    echo $perf->SuspiciousSQL();
    echo $perf->ExpensiveSQL();
    echo $perf->InvalidSQL();
*/
  }

Über folgendes einfache Skipt

  define('OOS_VALID_MOD', 'yes');
  require_once(dirname(__FILE__) . '/includes/oos_main.php');
 
  $perf = NewPerfMonitor($dbconn);
  echo $perf->UI();

starten Sie den Monitor.

Smarty $use_sub_dirs=true

MyOOS verwendet in der Kundinstallation die Vorgabewert ‚false‘ von
Smarty für [i]$use_sub_dirs[/i].

Wenn $use_sub_dirs auf ‚true‘ gesetzt ist wird Smarty unterhalb der Verzeichnisse templates_c und cache Unterverzeichnisse anlegen. In einer Umgebung in der möglicherweise zehntausende Dateien angelegt werden kann das helfen, die Geschwindigkeit des Zugriffs auf das Dateisystem zu optimieren. Andererseits gibt es Umgebungen, in denen PHP-Prozesse nicht die Berechtigung zum Anlegen von Unterverzeichnissen haben, so dass diese Funktion nicht genutzt werden kann. Der Vorgabewert ist ‚false‘, aus Performancegründen wird allerdings empfohlen diesen Wert auf ‚true‘ zu setzen, wenn die Systemumgebung dies zulässt

Quelle: Smarty Handbuch

Wenn man die Dateistruktur mit 10 Verzeichnissen im MyOOS nutzen möchten, ändert man in
~/shop/includes/classes/class_template.php

von

$this->use_sub_dirs = false;

nach

$this->use_sub_dirs = true;

Mit xdebug dem Profiler / Debugger für PHP kann die Performance leicht feststellen.

weitere Informationen:
Smarty Handbuch
Installation von xdebug
www.oos-shop.de/doc/smarty/html/

Entlastung von MySQL mit Adodb

Wenn der Shop eingerichtet ist kann man die eingebauten Performance-Vorteile nutzen.

Eigentlich ist die Angelegenheit ganz banal. in der Datei
~/shop/includes/oos_define.php den Wert der Konstanten
USE_DB_CACHE auf true ändern.

  define('USE_DB_CACHE', 'true');   // OOS SQL-Layer Cache

Weitere Änderungen an den Sourcen vom Projekt sind nicht notwendig. Aber wer es einmal ausporbieren möchte….

~/shop/includes/oos_blocks.php

Über die Datenbankabfrage werden die Content Blöcke rechts und links zum Inhalt geladen.

 $block_result = $dbconn->GetAll($block_sql);

Wenn das Ergebnis der Datenbankabfrage für 24 Stunden gültig sein soll

 $dbconn->cacheSecs = 3600*24; // cache 24 hours

für 12 Stunden verwendet man

 $dbconn->cacheSecs = 3600*12; // cache 12 hours

für 30 Minuten

 $dbconn->cacheSecs = 1800;

Wir ersetzen nun

 $block_result = $dbconn->GetAll($block_sql);

durch

 if (USE_DB_CACHE == 'true') {
   $dbconn->cacheSecs = 3600*24; // cache 24 hours
   $block_result = $dbconn->CacheExecute($block_sql);
 } else {
   $block_result = $dbconn->GetAll($block_sql);
 }

Der Shop speichert nun in das $ADODB_CACHE_DIR das Ergebis für
einen Tag zwischen.

Weitere Informationen im adodb Handbuch und in unserem adodb Handbuch

xdebug Installation

xdebug ist ein PHP-Debugger-Tool.

Um xdebug mit PHP nutzen zu können, muss das PECL Modul xdebug verwendet werden.

Da PECL-Erweiterungen nicht mit PHP mitgeliefert werden, müssen sie nachträglich installiert werden. Danach kann man sie, wie andere Erweiterungen auch, von PHP aus verwenden.

pecl install xdebug

Der Installer kümmert sich darum, dass die Erweiterung automatisch in der neusten Version heruntergeladen, das Archiv entpackt, die Erweiterung kompiliert und in das Erweiterungs-Verzeichnis kopiert wird. Im Anschluss muss die Erweiterung noch in der php.ini eingetragen werden.

Bei mir steht da folgendes drin:

# cat /etc/php5/apache2/php.ini | grep xdebug
zend_extension="/usr/lib/php5/extensions/xdebug.so"
xdebug.auto_trace=1
xdebug.auto_profile=1
xdebug.collect_params=1
xdebug.profiler_enable=1
xdebug.profiler_output_dir="/home/r23/entwicklung/www/xdebug"

Die von XDebug generierten Files lassen sich dann in KCachegrind öffnen und nach verschiedenen Kriterien filtern.

schicke Graphen mit KCachegrind