[PHP] Fatal error: Call to undefined function yaml_parse_file()

Tags: Allgemein | Apache | Debian (Linux) | PHP | Webserver Kommentieren

Dieser Fehler besagt, dass die Extension „yaml“ nicht geladen wurde. Dies kann man beheben, indem man in der entsprechenden php.ini (z.B. /etc/php5/apache2/php.ini) die Zeile

hinzufügt und anschließend der Webserver neu startet.

Als Position in der php.ini bietet sich der folgende Bereich an:

 

, , , , ,

Langsame Suchfunktion in xt:commerce 3

Tags: Allgemein | Debian (Linux) | MySQL | MySQL-Server | Webserver | xt:Commerce Kommentieren

Ein Kunde hatte das Problem, dass der auf unserem Server installierte xt:commerce 3 teilweise so hohen Datenbank-Load verursachte, dass der MySQL-Server abrauchte und somit den ganzen Server kurzzeitig in einer Nicht-Erreichbarkeit stürzte. Zwar war schon länger ein Update auf eine neue xt:commerce-Version geplant, jedoch befand sich der neue Shop noch in der Entwicklung und es musste kurzfristig eine Lösung erarbeitet werden, da die Ausfälle sich häuften (teilweise bis zu 3x am Tag).

Relativ schnell entpuppte sich die Suchfunktion des xt:commerce als ausschlaggebend, welche bei meinen Tests bei einer Volltextsuche meist zwischen 40 und 50 Sekunden benötigte, dabei den MySQL-Server komplett belastet – nun stelle man sich dies am Tages-Hoch mit hunderten Besuchern vor.

Mit den folgenden Umstellungen in der MySQL-Datenbank lässt sich die Suche durch einfaches Setzen von Indizes stark beschleunigen:

Tabelle „products_description„:

  • products_id
  • language_id
  • products_name
  • products_description (FULLTEXT)
  • products_short_description (FULLTEXT)
  • products_keywords

Tabelle „products_options„:

  • language_id
  • products_options_name

Tabelle „products_attributes„:

  • products_id
  • options_id

Tabelle „products_options_values„:

  • language_id
  • products_options_values_name

Tabelle „specials„:

  • products_id

Wichtig ist, dass die neuen Indexes eine möglichst hohe Kardinalität besitzen (also viele verschiedene Werte), damit eine Performancesteigerung erreicht werden kann.

Quellen

  • http://forums.xt-commerce.com/topic/60364-suchfunktion-sehr-langsam-sessions/
  • http://thomas.eses.name/mysql-indexe-richtig-setzen/

E_DEPRECATED-Fehlermeldungen im xt:commerce ausschalten

Tags: Allgemein | PHP | Programmierung | xt:Commerce Kommentieren

Besonders nach einem Update auf eine aktuelle PHP-Version erscheinen beim alten xt:commerce (z.B. Version 3.0.4) diverse Fehlermeldungen im Error-Log, die gemeinhin auf die veralteten ereg-Funktionen hinweisen, die im veralteten Shop-System an vieler Stelle Verwendung findet. Dies führt auf Dauer zu Gigabyte großen Log-Dateien und belastet den Server unnötig. Beispiel:

[Fri Apr 10 14:22:22 XXXX] [error] [client 213.221.XXX.XXX] PHP Deprecated:  Function eregi() is deprecated in /var/www/XXX/includes/classes/language.php on line 96, referer: http://www.google.de/imgres?imgurlXXX
[Fri Apr 10 14:22:22 XXXX] [error] [client 188.165.XXX.XXX] PHP Deprecated:  Function ereg() is deprecated in/var/www/XXX/includes/application_top.php on line 212
[Fri Apr 10 14:22:22 XXXX] [error] [client 188.165.XXX.XXX] PHP Deprecated:  Function ereg() is deprecated in/var/www/XXX/includes/classes/paypal_checkout.php on line 105

Das Error-Reporting lässt sich in der Datei /includes/application_top.php umstellen. Man ersetze Zeile 35 durch Folgende:

 

iOS Web Apps: Eingeloggt bleiben

Tags: Apps | iOS | iPad | iPhone | PHP Kommentieren

Hat man eine Website / Web-App, die einen Login erfordert, zum iOS Home Screen hinzugefügt ist man bei jedem App-Start gezwungen, sich neu anzumelden. Dieses Verhalten lässt sich durch folgendes Snippet korrigieren, sodass man weiterhin (auch nach Geräteneustart) eingeloggt bleibt:

Dadurch wir die Cookie-Lebenszeit auf 1 Jahr verlängert.

Quelle

http://stackoverflow.com/questions/9998900/maintain-php-session-in-web-app-on-iphone/14594908#14594908

Baïkal Installation: „Validation error, Admin password is required.“

Tags: PHP Kommentieren

Schlägt die Installation von Baïkal („CalDAV + CardDAV lightweight server“) mit folgender Fehlermeldung fehl:

„Validation error, Admin password is required.“

liegt der Fehler sehr wahrscheinlich an der  magic_quotes_gpc-Einstellung von PHP. Diese muss nämlich auf off stehen.

Leider war es mir kurzfristig nicht möglich, diese Einstellung zu setzen. Dann hilft jedoch folgender Hot-Fix in der Datei Core/Frameworks/Flake/Framework.php:116:

Quellen

PHP: Duplikate aus Array entfernen

Tags: PHP Kommentieren

Die Funktion array_unique() (PHP 4 >= 4.0.1, PHP 5) stellt die Funktionalität zur Verfügung, doppelte Einträge (der Werte) aus einem Array zu entfernen. Es sollte jedoch beachtet werden, dass die Array-Schlüssel erhalten bleiben.
Um ein neues Array mit fortlaufenden Schlüsseln zu generieren, verwende man diesen Code (falls man das Array anschließend mit einer for-Schleife durchlaufen möchte):

$array = array_values(array_unique($array));

PHP: Koordinaten zu einer Adresse herausfinden

Tags: PHP | Programmierung | Webdesign Kommentieren

Über den Dienst Google Maps kann man automatisiert die Koordinaten einer Adresse herausfinden. Das Angenehme hierbei ist: Es ist total egal, wie die Adresse formatiert ist – was Google versteht wird korrekt verarbeitet.
Die folgende Funktion nimmt eine Adresse als beliebig formatierten String entgegen, sendet eine Anfrage an Google und gibt ein Array mit den Koordinaten zurück. Dies macht Sinn, wenn eine dynamische Google Maps-Karte auf der Website angezeigt werden soll.
Achtung: Das öffnen von Remote-Dateien muss auf dem Server aktiviert sein. Sonst muss man den Weg über Sockets gehen.

/**
* Liest die Geokoordinaten einer Adresse aus
*/

function getGeoData($address){
$geo = file_get_contents("http://maps.google.com/maps/geo?q=".rawurlencode($address));
if($geo && substr_count($geo, '"code": 200,') != -1){
preg_match("#[ ([0-9.]+), ([0-9.]+), 0 ]#", $geo, $match);
return array($match[2], $match[1]);
}
}

Lange Texte mit PHP beschneiden

Tags: PHP | Webdesign Kommentieren

Um einen Text an einer bestimmten Position abzuschneiden, um einen overflow zu vermeiden, kann man die folgende Funktion verwenden:

Die Funktion nimmt den zu verändernden String entgegen, schneidet den String ab der Zeichenposition ab und setzt 3 Punkte dahinter (wenn nicht anders definiert).
Leider werden Worte jedoch mittendrin abgeschnitten und das Resultat ist eher unschön. Im Folgenden eine Funktion, die ab der Maximalzeichenzahl noch das Wort übernimmt und den Rest abschneidet:

Einen zufälligen String erzeugen

Tags: PHP | Programmierung Kommentieren

Es kann in vielen Fällen einmal vorkommen, dass ein zufällig generierter String einer bestimmten Länge benötigt wird. Soll eine temporäre Datei angelegt, ein Schlüssel für eine Verschlüsselungsbasis erzeugt, ein Passwort generiert oder ein Bestätigungsschlüssel für ein Double-Opt-In-Verfahren erzeugt werden – mit dieser Funktion ein Kinderspiel.

@param int $l Bezeichnet die Zeichenanzahl des zu erzeugenden Strings
@param string $b Enthält die verwendeten Zeichen. Als Standard sind alls Buchstaben in Groß- und Kleinschreibung plus alle Ziffern angegeben.
@return string Der zufällig erzeugte String

TOP