Problem mit MemCached nach exec() Aufruf einer PHP Datei
Einklappen
X
-
Nicht schimpfen. Er liefert wenigstens eine Lösung hier ab. Könnte auch anderen helfen.Zitat von streuner Beitrag anzeigenCrossposting
Peter
Einen Kommentar schreiben:
-
Einen Kommentar schreiben:
-
So, hier is die Lösung:
thx allCode:exec("php53 -c ORT-DER-PHP-INI product_list_functions.php $param1 $param2 > /dev/null &");
Einen Kommentar schreiben:
-
Du kannst versuchen beim Aufruf den Pfad zur php.ini der Webserverkonfiguration zu übergeben.
Einen Kommentar schreiben:
-
@Quetschi
Ja genau daran scheints wohl zu liegen. Bei der über die Kommandozeile ausgeführte phpinfo(); Datei wurde memcache nicht als extension angezeigt. Habe eben den hoster kontaktiert, was man da machen kann.
Oder hast du eine Idee?
Einen Kommentar schreiben:
-
Vermute, dass deine CLI-Version anders kompiliert wurde als das Modul für den Webserver. Mach mal eine PHP-Datei, die dir nur phpinfo(); ausgibt und ruf diese mal über Kommandozeile und mal über den Browser auf und achte auf Unterschiede bei den geladenen Modulen.
Im übrigen ist es eine gute Idee mögliche Fehlermeldungen oder Debug-Ausgaben (die man ja auch einsetzen könnte) in den Abfall zu verschieben.
Einen Kommentar schreiben:
-
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:
Hier ist die (vereinfachte) product_list_functions.php:Code:exec("php product_list_functions.php ".escapeshellcmd("refresh")." ".escapeshellcmd($_GET['id'])." > /dev/null &");
Ganz oben sieht man, optional die GET Parameter, mit denen habe ich die Funktion manuell überprüft.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); } ?>
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
ChrisZuletzt geändert von Teljo; 12.04.2012, 19:10.Stichworte: -

Einen Kommentar schreiben: