Problem PHP ausführen
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
aufruf
ausgabe
benutzen
code
datei
erstellung
fehler
file
funktion
funktionieren
http
interpreter
leere ausgabe
modul
paket
pfad
programm
system
url
zukunft
-
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 -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
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 -
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 -
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)
-
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 -
weil php ohne cli eben keine eingabe via konsole akzeptiert
-
Danke, mit cli funktioniert es jetzt perfekt!
(Musste den korrekten Pfad dazu erst finden)
Grüße
Stefan -
Warum kann
nicht so eingesetzt werden wiephp
? Wo ist da eigentlich der Unterschied? Es sollte doch auch mitphp-cli
funktionieren, oder etwa nicht?#!/usr/bin/php -q
-
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 -
Der korrigierte Code war:
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.!#/usr/bin/php53-cli <?php print "Hello World"; ?>
-
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 -
fleischhoernchen schrieb:
Wie aklasse eben geschrieben hat:
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.aklasse schrieb:
Er wollte nur TESTEN wie er hinbekommt, dass sein PHP-Script als ausführbares Programm läuft.
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.
Das 2. PHP-Script das
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.system("/var/home/user/cronjob.php", $state);
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage