kostenloser Webspace werbefrei: lima-city


Problem PHP ausführen

lima-cityForumProgrammiersprachenPHP, MySQL & .htaccess

  1. Autor dieses Themas

    aklasse

    Kostenloser Webspace von aklasse

    aklasse hat kostenlosen Webspace.

    Hallo!

    Da ich in Zukunft ein PHP Script als Cronjob benutzen (regelmäßig ausführen) möchte wollte ich genau das austesten: ein PHP Script als ausführbares Programm auszuführen.
    Dazu benutze ich folgende 2 Scripte:

    1: Dieses Script ruft das Andere Script als ausführbares Programm auf
    <?php
      echo "outputstart\n";
      system("/var/home/user/cronjob.php", $state);
      echo "\noutputend\n";
      echo "\nstatesstart\n";
      echo $state;
      echo "\nstateend";
    ?>


    2: Das Script das später den Cronjob darstellen soll
    (Hashbang am Anfang um es von PHP ausführen zu lassen, ist ja nicht direkt ausführbar)
    !#/usr/bin/php53 -q
    <?php
      echo "Hello World";
      ?>

    Funktioniert noch. Ich bekomme die Ausgabe zurückgeschrieben und gebe sie aus:
    outputstart
    Hello World
    
    outputend
    
    statesstart
    2
    stateend


    Nun habe ich einfach folgendes probiert:
    !#/usr/bin/php53 -q
    <?php
      echo time();
      ?>

    Ich bekomme aber nicht die Zeit, sondern eine leere Ausgabe:
    outputstart
    
    outputend
    
    statesstart
    2
    stateend


    Ein Script wie folgendes ergibt auch eine leere Ausgabe:
    !#/usr/bin/php53 -q
    <?php
      $hello = "Hallo";
      echo $hello;
      ?>


    Ebenso die print funktion:
    !#/usr/bin/php53 -q
    <?php
      print("Hello World");
      ?>


    Auch Dateifunktionen bei denen ich die Auswirkungen in der Erstellung einer Datei sehen hätte können funktionieren nicht.

    Woran liegt hier das Problem?
    Wie kann ich diesen Fehler beheben?


    Beste Grüße
    Stefan

    Beitrag zuletzt geändert: 24.1.2012 23:45:55 von aklasse
  2. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

  3. Der Fehler tritt auf weil das Programm überhaupt nicht ausgeführt wird, sondern nur string Konstanten mit echo ausgegeben werden.

    Du musst für die lokale Ausführung von PHP den PHP Kommandozeileninterpreter benutzen, bei mir im paket php5-cli.

    Beitrag zuletzt geändert: 24.1.2012 23:46:05 von fatfox
  4. Autor dieses Themas

    aklasse

    Kostenloser Webspace von aklasse

    aklasse hat kostenlosen Webspace.

    Okay, das habe ich noch nicht ganz verstanden.
    Soweit ich weiß ist bei mit PHP als Fast CGI installiert und liegt an dem angegebenen Ort.
    Mit system("/var/home/user/cronjob.php"); wird versucht die Datei auszuführen (hat auch entsprechende Rechte). Im File das natürlich keine ausführbare Datei ist findet er das #! und lässt das Script dann von meinem PHP Modul interpretieren.

    In welchen Teil liegt hier der Fehler?


    Vielen Dank und beste Grüße
    Stefan
  5. Auf deinem Server liegt die Datei mit dem Aufruf der system() Funktion und die bekommt als Argument einen Pfad zu einem lokalen php script übergeben und das wird wie es das Wesen der system() Funktion ist auf der Kommandozeile interpretiert, das geht aber nicht weil kein Kommandozeilen Interpreter für PHP existiert, deshalb wird das Script als Shellscript behandelt und da erzeugen eben nur Konstanten eine Ausgabe weil ev. eingeführte Variablen usw. überhaupt nicht interpretiert werden und daher ignoriert werde. Erst wenn du php5-cli installierst wird PHP um einen Kommandozeileninterpreter erweitert und dann geht das auch (wenn der CGI Prozess Ausführungsrechte für das lokale Script hat und system() unvorsichtiger weise erlaubt ist)
  6. Autor dieses Themas

    aklasse

    Kostenloser Webspace von aklasse

    aklasse hat kostenlosen Webspace.

    Okay, aber kann ich PHP denn nicht direkt als Interpreter angeben?

    !#/usr/bin/php53

    Hiermit sollte das Script doch mehr oder weniger zu einer "ausführbaren Datei" werden, da automatisch der angegebene PHP Interpreter benutzt wird.

    Warum wird diese Zeile überlesen und er interpretiert das File als Shell Script?

    Grüße
    Stefan
  7. weil php ohne cli eben keine eingabe via konsole akzeptiert
  8. Autor dieses Themas

    aklasse

    Kostenloser Webspace von aklasse

    aklasse hat kostenlosen Webspace.

    Danke, mit cli funktioniert es jetzt perfekt!
    (Musste den korrekten Pfad dazu erst finden)

    Grüße
    Stefan
  9. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Warum kann
    php
    nicht so eingesetzt werden wie
    php-cli
    ? Wo ist da eigentlich der Unterschied? Es sollte doch auch mit
    #!/usr/bin/php -q
    funktionieren, oder etwa nicht?
  10. Wenn du es probierst wirst du sehen das es nicht funktioniert. (Es gibt aber (glaube ich) Distributionen die das per default mit installieren und automatisch den geeigneten Interpreter aufrufen wennn das alias php aufgerufen wird)

    Im übrigen hat -q verhindert das man die Fehlermeldung gesehen hat die eine Fehlerursache angegeben hätte.

    @ TE

    Bitte den korrigierten Code posten und Beitrag melden damit er geschlossen wird (ev. Titel als gelöst markieren), Danke.

    Beitrag zuletzt geändert: 29.1.2012 11:28:26 von fatfox
  11. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    Der korrigierte Code war:
    !#/usr/bin/php53-cli
    <?php
      print "Hello World";
      ?>
    Der Hoster hat einen falschen Pfad für das PHP-Binary auf seiner Hilfeseite angegeben, deshalb hat sich aklasse den Pfad erst selber raussuchen müssen.
  12. fleischhoernchen

    Kostenloser Webspace von fleischhoernchen

    fleischhoernchen hat kostenlosen Webspace.

    Anders: Warum?
    Wenn eh beides PHP-Skripte sind, dann kannst du die aus zu führenden Dinge aus dem zweiten doch einfach ins erste übernehmen oder du packst alles ins zweite, fürst dieses über den crond oder runwhen aus und sparst dir den HTTP-Request.

    Warum einfach, wenn's auch kompliziert und dazu noch auf kosten von Performanz, Rechenzeit und Speicher geht? o_0
  13. hackyourlife

    Moderator Kostenloser Webspace von hackyourlife

    hackyourlife hat kostenlosen Webspace.

    fleischhoernchen schrieb:
    Anders: Warum?
    Wenn eh beides PHP-Skripte sind, dann kannst du die aus zu führenden Dinge aus dem zweiten doch einfach ins erste übernehmen oder du packst alles ins zweite, fürst dieses über den crond oder runwhen aus und sparst dir den HTTP-Request.
    Wie aklasse eben geschrieben hat:
    aklasse schrieb:
    Da ich in Zukunft ein PHP Script als Cronjob benutzen (regelmäßig ausführen) möchte wollte ich genau das austesten: ein PHP Script als ausführbares Programm auszuführen.
    Er wollte nur TESTEN wie er hinbekommt, dass sein PHP-Script als ausführbares Programm läuft.
    Das 2. PHP-Script das
    system("/var/home/user/cronjob.php", $state);
    beinhaltet sollte nur das erste laden, um zu sehen, dass das PHP-Script als ausführbares Programm startet, da er sonst keine Möglichkeit hat ein Kommando auszuführen.
  14. Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!

    lima-city: Gratis werbefreier Webspace für deine eigene Homepage

Dir gefällt dieses Thema?

Über lima-city

Login zum Webhosting ohne Werbung!