Haftpflicht Blogger
Virtual Server von Host Europe

Magento – Lösung des Varien/Profiler Problems

| 31. Dezember 2010 | Ein Kommentar

Preissuchmaschinen sind oft so konzipiert, dass sie in bestimmten Intervallen, z. B. einmal täglich die Shopinternetseite besuchen und dort eine bestimmte CSV- oder Excel Datei mit Artikelinformationen abrufen.

Nun kann es nicht die Aufgabe eines Shopbetreibers sein, diese Datei mit Artikelinformationen, Preisen, Lagerbeständen, etc. manuell zu pflegen und aktuell zu halten. Auch das alleinige Anstoßen eines Exports nach jeder Änderung der Artikelbeschreibung, des Artikelpreises, etc. wäre zu umständlich.

Der Vorgang mußte also automatisiert werden, um die Aktualität und damit die Qualität der Daten für die Preissuchmaschine auf einen hohen Niveau zu halten. 
 

Aufgabenstellung

  • Ein PHP-Skript ist zu erstellen, welches aus einer Magento-Datenbank (e-Commerce Shopsystem) die CSV-Datei für eine bestimmte Preissuchmaschine erzeugt.
     
  • Dieses PHP-Skript als Cronjob in regelmäßigen Zeitabständen anzustoßen, so dass der Shopbetreiber sich keine Gedanken mehr um die Aktualität der Preissuchmaschinendatei mehr machen muss. 

Auf einem Windows-System geschrieben und getestet, lief das Skript auch wunderbar.  Beim Produktionssystem unter Linux (Suse 11.1) und Plesk (Version 8.6) erhielt ich jedoch die folgende Fehlermeldung:
 

PHP Warning:  include_once(Varien/Profiler.php): failed to open stream: No such file or directory in /srv/www/vhosts/maxilearn.de/httpdocs/app/Mage.php on line 51
PHP Warning:  include_once(): Failed opening 'Varien/Profiler.php' for inclusion (include_path='/srv/www/vhosts/DeineShopDomain.de/httpdocs/app/code/… u.s.w.')
in /srv/www/vhosts/DeineShopDomain.de/httpdocs/app/Mage.php on line 51

 

Wie sich leicht durch eine Internetrecherche herausstellte, hatten schon viele vor mir ähnliche Fehlermeldungen. Leider gab es hierbei jedoch keine Lösung, die bei meiner Installation zum Erfolg führte.

Der Vollständigkeit halber möchte ich die gefundenen Lösungsvorschläge dennoch kurz aufführen, vielleicht führen diese ja bei einer anderen Systemkonfiguration zum Erfolg:

  • Schreibweise und Existenz der Pfade prüfen
  • Vorhandensein der Dateien, die nicht includiert werden konnten, prüfen (Grund: korrupte, gepackte Verzeichnisse oder Downloads)
  • Richtige Schreib-/Leserechte bei den Dateien/Verzeichnisse
  • PHP-Version fehlerhaft: Viele machen die PHP Version 5.2.5 für den obigen Fehler verantwortlich. Bei manchen ging nach einem Upgrade auf 5.2.6 plötzlich alles, bei anderen jedoch zeigte sich keine Veränderung.
  • Plesk spezifisch: Die vhost.conf Datei um eine Eintragung erweitern

<Directory /srv/www/vhosts/deineshopdomain.de/httpdocs> (Verzeichnis kann bei anderem Linux abweichen)
php_admin_value include_path
“.:/usr/share/pear:/srv/www/vhosts/DeineShopDomain.de/httpdocs/lib:/… u.s.w. ”
</Directory>

danach ein

/usr/local/psa/admin/sbin/websrvmng -a -v

rcapache2 reload

Insbesondere dem letzten Lösungsvorschlag hatte ich große Erfolgschancen eingeräumt, zeigte doch ein phpinfo.php Aufruf, dass nunmehr der PHP include_path eindeutig die beanstandeten Laufwerke beinhaltete. 

Ein erneuter Start des Skrips

/usr/bin/php5  -f  skript.php

auf Command-Line Ebene ergab aber wieder die oben genannten Fehlermeldungen.

Lösung
Ich habe mir daraufhin die Command Line Parameter für das PHP5 Programm angeschaut und bin fündig geworden. 

Die include-path Einweisung im Skriptprogramm wird ignoriert, die  include-path Anweisung in der Plesk-Vhost.conf Datei wird ignoriert, aber durch den Parameter "-c [/pfad/php.ini]" kann man PHP5 anweisen die php.ini Datei zu verwenden und plötzlich ging die Sonne auf, die Welt war wieder in Ordnung und das Skript lief sofort wieder fehlerfrei durch.   

Man beachte die Stellung des Parameters -c vor dem -f, wenn man optional keine php.ini Datei angibt, weil sich diese im gleichen Verzeichnis wie die Skriptdatei befindet:

/usr/bin/php5  -c  -f  skript.php

Stichworte: , , ,

Kategorie: Magento

Kommentare (1)

Trackback-URL | Kommentarfeed

  1. tom sagt:

    Du kannst auch eine Datei so includen
    require($_SERVER[„DOCUMENT_ROOT“].“/Pfad/in/Verzeichnis/script.php“);

    dann klapps auch mit dem finden des scripts

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.