Willkommen auf dem Portal für Mediengestalter
|
|
Autor |
Nachricht |
mikzaxz
Threadersteller
Dabei seit: 11.01.2012
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Do 12.04.2012 19:40
Titel Problem mit MemCached nach exec() Aufruf einer PHP Datei |
 |
|
Hallo liebe Leute!
ich sitze schon den ganzen Tag vor einem Problemchen und ich weiss echt nicht weiter... ist auch nicht ganz einfach was bei Google zu finden bei so einem derart speziellen Problem
Folgendes Szenario:
Ich will, dass wenn ich auf einen bestimmten Link klicke, im Hintergrund eine php Datei ausgeführt wird und der Output dieser Datei im Memcache gespeichert wird.
Memcache ist installiert und funktioniert.
Wenn ich diese php Datei (product_list_functions.php) im Browser aufrufe, und die benötigten Parameter über GET übertrage, funktioniert alles.
Wenn ich das allerdings wie oben beschrieben, über die exec() Methode versuche, klappt alles, bis auf den Memcache set.
Habe viel rumprobiert und bin mir sicher, dass es an Memcache liegen muss.
Das ist der exec command:
Code:
Code: | exec("php product_list_functions.php ".escapeshellcmd("refresh")." ".escapeshellcmd($_GET['id'])." > /dev/null &"); |
Hier ist die (vereinfachte) product_list_functions.php:
Code:
Code: | <?
if(isset($_GET['action']) && $_GET['action'] == "refresh" && isset($_GET['id']) && $_GET['id'] > 0 ) {
$param1 = $_GET['action'];
$param2 = $_GET['id'];
}
if(isset($argv[1]) && isset($argv[2])) {
$param1 = $argv[1]; //Parameter 1 - wird mittels exec() übergeben
$param2 = $argv[2]; //Parameter 2 - wird mittels exec() übergeben
}
if(isset($param1) && $param1 == 'refresh' && isset($param2) && $param2 > 0) {
//....arbeite.... das Resultat ist das Array $products
}
/*
if (extension_loaded('memcache')) {
$fh = fopen('test.txt', 'w');
fwrite($fh, "test");
fclose($fh);
}
/*
/*
if(class_exists('Memcache')) {
$fh = fopen('test.txt', 'w');
fwrite($fh, "test");
fclose($fh);
}
*/
$memcache_data = "kategorieliste_".$prodcatid;
//Bis zu diesem Punkt passt alles
$memcache_obj = memcache_connect('localhost', 11211);
/*sämtlicher ab dieser Stelle eingefügter Code wird vom PHP Parser vollkommen ignoriert, ich vermute dass Fehlermeldungen das Skript zum Abbruch bringen (gar nicht so einfach das so nachzuvollziehen, denn wenn ich die Datei per Browser öffne funktioniert ja alles, per exec() bleibt die Ausgabe einfach aus */
$mem_del = memcache_delete($memcache_obj, $memcache_data);
$mem_action = memcache_add($memcache_obj, $memcache_data , $products, false, 0);
}
?> |
Ganz oben sieht man, optional die GET Parameter, mit denen habe ich die Funktion manuell überprüft.
Nochmal zur Erinnerung: Diese Datei soll per exec() ausgeführt werden, nicht im Browser.
Bei einer Ausführung über exec() wird nichts in den (mem)cache geschrieben (Beim Browseraufruf geht alles).
Ich vermute, dass aus irgendeinem Grund die Memcache Erweiterung nicht geladen wurde. Wie man an den auskommentierten zeilen sieht, habe ich da schon etwas rumprobiert.
Hat jemand ne Idee?
MFG
Chris
|
|
|
|
 |
choise
Dabei seit: 01.02.2007
Ort: Würzburg
Alter: 35
Geschlecht:
|
Verfasst Do 12.04.2012 20:05
Titel
|
 |
|
hmmm.
ich hab jetzt nicht so die erfahrung mit exec, aber wenn ich das richtig sehe führst du ja hier praktisch einen shell befehlt.
ist denn die php-version die du in deinem exec ausführst die gleiche, die dein webserver verwendet?
vielleicht mal den absoluten pfad verwenden.
|
|
|
|
 |
Anzeige
|
|
 |
bacon
Dabei seit: 24.10.2007
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Fr 13.04.2012 09:10
Titel
|
 |
|
Ja raff ich net, Du kannst ja auch nix draus lesen, wenn Du die Ausgabe direkt ins nulldevice schreibst. Da Dein CLI-PHP möglicherweise anders konfiguriert ist als Dein Apache-PHP oder CGI-PHP, oder aber einfach nur das error_reporting ausgeschaltet ist, oder ... oder ... oder ... Da sind viel zu viele systemische Unwägbarkeiten drin, um wirklich Böcke zu haben, das zu debuggen.
Ggf. kannste es mal mit zwei vernünftigen Bibliotheken versuchen:
https://github.com/symfony/Console
https://github.com/symfony/Process
|
|
|
|
 |
mikzaxz
Threadersteller
Dabei seit: 11.01.2012
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Fr 13.04.2012 10:49
Titel
|
 |
|
@choise
es hat sich jetzt gezeigt, dass es sehr wahrscheinlich genau daran liegt.
phpinfo(); , einmal über die Kommandozeile und einmal über den Browser angezeigt, zeigt bei der Kommandozeile das memcache Modul nicht.
Habe eben den hoster kontaktiert. Oder weiss einer, wie man dieses Problem lösen kann?
|
|
|
|
 |
mikzaxz
Threadersteller
Dabei seit: 11.01.2012
Ort: -
Alter: -
Geschlecht: -
|
Verfasst Fr 13.04.2012 13:19
Titel
|
 |
|
So,hier is die Lösung, danke @all
Code: | exec("php53 -c ORT-DER-PHP-INI product_list_functions.php $param1 $param2 > /dev/null &"); |
|
|
|
|
 |
|
|
 |
Ähnliche Themen |
[Flash, AS2] Problem: Aufruf einer .BAT-Datei mit fscommand
Direktor Aufruf abwarten, aber wie erstelle ich einen Aufruf
Mitgeben eines Suchbegriffs beim Aufruf einer PDF-Datei
php per exec entpacken
Seitenaktualisierung bei Aufruf
PHP - Dateien vor Aufruf schützen (+ Umfrage)
|
 |
|
Du kannst keine Beiträge in dieses Forum schreiben. Du kannst auf Beiträge in diesem Forum nicht antworten. Du kannst an Umfragen in diesem Forum nicht mitmachen.
|
|