Problem mit MemCached nach exec() Aufruf einer PHP Datei

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • 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:
    exec("php product_list_functions.php  ".escapeshellcmd("refresh")." ".escapeshellcmd($_GET['id'])." >  /dev/null &");
    Hier ist die (vereinfachte) product_list_functions.php:

    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
    Zuletzt geändert von Teljo; 12.04.2012, 19:10.

  • #2
    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.
    Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
    Schön - etwas Geschichte kann ja nicht schaden.
    Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

    Kommentar


    • #3
      @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?

      Kommentar


      • #4
        Du kannst versuchen beim Aufruf den Pfad zur php.ini der Webserverkonfiguration zu übergeben.
        Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
        Schön - etwas Geschichte kann ja nicht schaden.
        Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

        Kommentar


        • #5
          So, hier is die Lösung:

          Code:
          exec("php53 -c ORT-DER-PHP-INI product_list_functions.php $param1 $param2 > /dev/null &");
          thx all

          Kommentar


          • #6
            Crossposting Problem mit MemCached nach exec() Aufruf einer PHP Datei - php.de
            Erst wenn der letzte FTP Server kostenpflichtig, der letzte GNU-Sourcecode verkauft, der letzte Algorithmus patentiert,
            der letzte Netzknoten verkommerzialisert ist, werdet Ihr merken, dass Geld nicht von alleine programmiert.

            "Diese Software verdient die 3 großen GGG: --- Gesehen --- Gelacht --- Gelöscht ---"

            Kommentar


            • #7
              Zitat von streuner Beitrag anzeigen
              Crossposting
              Nicht schimpfen. Er liefert wenigstens eine Lösung hier ab. Könnte auch anderen helfen.

              Peter
              Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
              Meine Seite

              Kommentar


              • #8
                Du Diplomat!
                Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                Schön - etwas Geschichte kann ja nicht schaden.
                Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                Kommentar

                Lädt...
                X