PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : shell_exec in PHP (webseite) einbinden



Seiten : [1] 2

uhu-meister
15.12.09, 22:31
Hallo,
ich bastel gerade an einem webinterface für ein fast vergessenes game :D
leider funktioniert es nicht so wie ich es will.

Der Server soll mit dem Quellcode starten.
deswegen habe ich euch mal den quellcode rauskopiert.



<title>Red Faction Webinterface</title>
<body onLoad="startTimer()">


<table align="center" border="1">

<?php
$output = shell_exec("screen -A -m -d -S rfserver wine PF.exe -dedicated dm -port 7755");
echo "";
?>

<tr><td><center><font color="red">Das starten des Servers kann bis zu 30 Sekunden dauern!<br>Warte solange bevor du weiter gehst!<br><form name="timer"><input type=text value="" name="counter" size=10></form></font><br></br><span style="font-size: 8pt;">xxx</span> </center></td></tr>


</table>
<script LANGUAGE="JavaScript">
function startTimer(){
var time= new Date();
hours= time.getHours();
mins= time.getMinutes();
secs= time.getSeconds();
closeTime=hours*3600+mins*60+secs;
closeTime+=30;
Timer();
}

function Timer(){
var time= new Date();
hours= time.getHours();
mins= time.getMinutes();
secs= time.getSeconds();
curTime=hours*3600+mins*60+secs
if(curTime>=closeTime)
location = "index.php"
else
timeLeft();
}

function timeLeft(){
count = closeTime-curTime;
document.timer.counter.value = count + " Sekunden"
window.setTimeout("Timer()",1000)
}
</script>
</body>
</td></div>
</td>
</tr>
</table>

drcux
15.12.09, 22:55
Und was passiert? Sollen wir raten?

uhu-meister
15.12.09, 23:47
bin halt anfänger deswegen brauch ich hilfe ... hab gedacht das ist ein forum wo man hilfe bekommt ...

derRichard
16.12.09, 00:01
ja, aber du musst schon sagen was du willst bzw. was das problem eigentlich ist.
du gehst ja auch nicht zum arzt und sagst einfach nur "mir gehts nicht gut". :)

//richard

uhu-meister
16.12.09, 00:04
das stimmt hehe ^^
es passiert nichts mit dem shell also der server wird nicht gestartet mit dem befehel

<?php
$output = shell_exec("screen -A -m -d -S rfserver wine PF.exe -dedicated dm -port 7755");
echo "";
?>

derRichard
16.12.09, 00:06
geht der befehl wenn du ihn per hand startest?
steht im error_log vom apache etwas besonderes?
da sollten die fehlermeldungen auftauchen, falls der befehl fehlschlägt.

hth,
//richard

uhu-meister
16.12.09, 00:14
der befehl bei putty also per hand klappt ohne probleme

error_log
[Tue Dec 15 23:09:22 2009] [notice] suEXEC mechanism enabled (wrapper: /opt/lampp/bin/suexec)
[Tue Dec 15 23:09:22 2009] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Tue Dec 15 23:09:22 2009] [warn] RSA server certificate CommonName (CN) `localhost' does NOT match server name!?
[Tue Dec 15 23:09:22 2009] [notice] Digest: generating secret for digest authentication ...
[Tue Dec 15 23:09:22 2009] [notice] Digest: done
[Tue Dec 15 23:09:23 2009] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Tue Dec 15 23:09:23 2009] [warn] RSA server certificate CommonName (CN) `localhost' does NOT match server name!?
[Tue Dec 15 23:09:23 2009] [notice] Apache/2.2.12 (Unix) DAV/2 mod_ssl/2.2.12 OpenSSL/0.9.8k PHP/5.3.0 mod_apreq2-20051231/2.6.0 mod_perl/2.0.4 Perl/v5.10.0 configured -- resuming normal operations
[Tue Dec 15 23:26:09 2009] [notice] caught SIGTERM, shutting down
[Tue Dec 15 23:32:50 2009] [notice] suEXEC mechanism enabled (wrapper: /opt/lampp/bin/suexec)
[Tue Dec 15 23:32:50 2009] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Tue Dec 15 23:32:50 2009] [warn] RSA server certificate CommonName (CN) `localhost' does NOT match server name!?
[Tue Dec 15 23:32:50 2009] [notice] Digest: generating secret for digest authentication ...
[Tue Dec 15 23:32:50 2009] [notice] Digest: done
[Tue Dec 15 23:32:51 2009] [warn] RSA server certificate is a CA certificate (BasicConstraints: CA == TRUE !?)
[Tue Dec 15 23:32:51 2009] [warn] RSA server certificate CommonName (CN) `localhost' does NOT match server name!?
[Tue Dec 15 23:32:51 2009] [notice] Apache/2.2.12 (Unix) DAV/2 mod_ssl/2.2.12 OpenSSL/0.9.8k PHP/5.3.0 mod_apreq2-20051231/2.6.0 mod_perl/2.0.4 Perl/v5.10.0 configured -- resuming normal operations

aus dem error_log werde ich nicht schlau

derRichard
16.12.09, 00:19
bist du sicher, dass das das error_log ist von dem zeitraum, als das php-skript gestartet wurde?
ich glaube nicht, dass man einfach so screen via php starten kann, weil man dort kein gültiges tty hat.
googlen nach screen in verbindung mit php sollte helfen.

hth,
//richard

uhu-meister
16.12.09, 00:21
ja das klappt so wird es ja auch bei richtigen webinterface gemacht...

hab google schon 2tage lang durch stöbert aber nie was gefunden

oziris
16.12.09, 06:08
Bitte schiebe zunächst das hier
<table align="center" border="1">unter das
?>



Bitte modifiziere diese Zeile
$output = shell_exec("screen -A -m -d -S rfserver wine PF.exe -dedicated dm -port 7755");so, dass sie so aussieht
$output = shell_exec("screen -A -m -d -S rfserver wine PF.exe -dedicated dm -port 7755 2>&1");



Bitte mache dann aus
echo "";das hier
echo "<pre>#BEGIN#\n$output\n#END#</pre>";



Teile uns dann bitte mit, was zwischen #BEGIN# und #END# auf der Seite ausgegeben wurde.

Viel Glück. Du kannst es brauchen.

PS: Sollte die Seite ewig laden und dann unvollständig abbrechen, dann wird Dein Befehl/Spiel nicht ordentlich in den Hintergrund geforkt.

marce
16.12.09, 07:36
ich unterstelle auch mal, daß dem Webserver ein anderes Environment zur Verfügung steht als dem Shell-Benutzer, er also evtl. von wine, screen und ähnlichen Dingen nichts weiß.
Evtl., dank entprechender Serverkonfiguration, ist ihm das ausführen von Dateien außerhalb des DocRoot auch einfach verboten.
Oder es fehlen einfach die notwendigen Rechte.

uhu-meister
16.12.09, 13:40
oziris : es wird nur das angezeigt #BEGIN# #END#

shell-exec kann man per php ausführen das klappt aber leider bei mir nicht hat jemand eine idee

appache server läuft mit dem user "web"

eule
16.12.09, 14:05
hat jemand eine idee

Logdateien lesen

marce
16.12.09, 14:07
... und welche erzeugen (-> Debug-Ausgaben)

uhu-meister
16.12.09, 17:14
in denn log daten steht nichts kein error oder so ...
es kann vielleicht an rechte liegen weiss aber nicht wie ich dem user web zuteile das er das ausüben darf

oziris
16.12.09, 18:47
oziris : es wird nur das angezeigt #BEGIN# #END#
Dann hat es entweder geklappt oder der Safe-Mode (safe_mode) ist an und Warnings (error_reporting) oder Fehleranzeige (display_errors) sind aus.

uhu-meister
16.12.09, 19:07
(safe_mode) ist aus
(error_reporting) ist an
(display_errors) ist an

kennt jemand noch idee was das sein könnte

oziris
16.12.09, 19:50
(safe_mode) ist aus
(error_reporting) ist an
(display_errors) ist an
Dann wurde das Kommando erfolgreich ausgeführt.
Herzlichen Glückwunsch.

PS: error_reporting kann nicht nur an und aus, sondern verschiedene Stufen bzw. eine Bitmaske, die angibt welche Fehler gemeldet werden.

uhu-meister
16.12.09, 20:15
nein kann nicht sein weil wenn ich mich per putty einlogge und dann screen -r eintippe ist kein screen offen...

somit ist der befehl nicht ausgefhrt worden

drcux
16.12.09, 20:18
nein kann nicht sein weil wenn ich mich per putty einlogge und dann screen -r eintippe ist kein screen offen...


Und das machst du auch als User web?

uhu-meister
16.12.09, 20:47
mit root und mit web check ich das und nirgendwo ist ein screen offen

drcux
16.12.09, 22:36
mit root und mit web check ich das und nirgendwo ist ein screen offen

Sicher?


<detlef-pc:~ # screen -r
There is no screen to be resumed.
detlef-pc:~ # ps aux | grep SCREEN
detlef 5623 0.0 0.0 22632 1112 ? Ss 22:34 0:00 SCREEN


Wie du siehst, erkennt screen unter root das offene screen vom User detlef nicht.

oziris
17.12.09, 05:48
Vielleicht geht das Programm wieder aus, nachdem das Kommando erfolgreich gelaufen ist. (Ich benutze selbst kein Screen, weiß daher nicht, wie es sich in so einem Fall verhält.)

Apropos, warum benutzt Du eigentlich Screen? Man kann das Programm doch auch anders im Hintergrund starten und hat dann hübsche Logfiles, in denen Fehler leichter zu finden sind, z.B. mit nohup, start-stop-daemon und sogar mit nur der bash!
Musst Du das Programm etwa nachträglich steuern, ohne dass es über Signale geht?

JAF
17.12.09, 08:15
hallo,

ich verwende screen in verbindung mit einer php-http seite

bei mir verwende ich den aufruf ...

screen -d -m -L ...
... und dann das programm, das ich in dem screen starten will.

funktioniert bei mir ohne probleme und screen beendet sich, sobald das programm in dem screen aus ist.

btw: du kannst auch das logging in eine file aktivieren bei screen. damit siehst du, was in diesem virtuellen terminal ausgegeben wird.

uhu-meister
17.12.09, 15:58
Hallo,
ich habe schon fast alle ausprobiert und habe im internet nur teilweisse was gefunden nie was komplettes.

ich habe jetzt denn rootserver neu installieren lassen.
Was ich jetzt auf dem root installiert habe ist xampp.

hab es anders versucht :

<?php
$output = shell_exec("./rfserver");
echo "";
?>

leider klappt dies auch nicht.

Es wäre sehr nett wenn mir jemand ein tut schreiben würde wie ich es richtig einstelle mit rechten etc.

xampp läuft über den user nobody
und das script soll durch den user gameserver ausgeführt werden.

das script liegt im ordner: opt/lampp/htdocs
und die daten für den gameserver liegen im /home/gameserver

wäre es möglich per sudo zu arbeiten

TheDarkRose
17.12.09, 16:09
1. Warum willst du den Gameserver unbedingt über PHP starten?
2. was soll das echo ""; bewirken? Sollte das nicht echo $output heißen?
3. Wie schon erwähnt, welche Rechte hat das Gameserverskript.
4. Ruf mal das Skript über den vollen Pfad auf.
5. www.root-und-kein-plan.ath.cx

uhu-meister
17.12.09, 16:16
1. schon mal was von webinterface gehört ????
2. hab es aus einem funktionieren webinterface genommen da ich mich mit php 0 auskenne
3. imomment keine warte auf vorschläge
4. es klappt ohne probleme per putty und user root

5. kannst dir sparren die page... ich weiss wie man mit root umgeht da ich 3 jahre lang 2 root server hatte aber nur cs server laufen gelassen habe ohne webinterface

ich brächte eure hilfe bei dem problem und keine wieso weshalb warum!!!
ich möchte das per PHP ausführen !

oziris
17.12.09, 16:18
ich habe jetzt denn rootserver neu installieren lassen.
WTF! Du hast doch nicht etwa versucht Unwissenheit mit Neuinstallation zu kompensieren, oder? Man muss erstmal rausfinden, wo das Problem liegt, damit man es lösen kann...

wäre es möglich per sudo zu arbeitenWie meinst Du das? (Bitte konkretisieren)

uhu-meister
17.12.09, 16:20
habe viel mit dem system und user rechte rumgespielt und somit hatte ich kein überblick mehr ^^ es war ja eh nichts auf dem server drauf installiert auser xampp und gameserver

also ich lesse in vielen forums das man mit anderen user denn befehl in der php starten kann die schreiben da alle per sudo. Aber Wie man das einstellt etc. steht nicht da

oziris
17.12.09, 16:28
Wenn man "sudo" ordentlich installiert hat, dann kann man mit dem "visudo" Kommando die entsprechende Konfigurationsdatei bearbeiten. Dort kann man dann Eintragen, welcher Benutzer welche Befehle als ein anderer Benutzer ausführen darf und ob er über ein TTY eingeloggt sein muss (letzteres ist für eine Webanwendung relevant).

Das ist aber alles nur wildes Herum-Gerate. Du solltest erstmal versuchen herauszufinden, was an Deinem Kommando, in dieser speziellen Umgebung nicht funktioniert. Dazu empfehle ich Teile des Kommandos im shell_exec() wegzulassen oder durch Test-Befehle zu ersetzen.