Mumpits
Hallo liebe Leute,
Mein Anliegen:
Ich habe einen Radiostream(auf einem fremden Server) laufen. Da nicht immer jemand auf Sendung sein kann habe ich auf meinem VServer einen Playlistserver aufgesetzt, der auch super funktioniert..
Nun möchte ich jedem Moderator die Möglichkeit geben, die Playlist an bzw auszustellen, onair, bzw offair gehen kann.
Das ganze denke ich kann am besten mit PHP realisiert werden.
Es soll also eine leere PHP Seite mit 2 buttons erscheinen, ein Start und ein Stop Button.
Wenn jemand auf den Start Button klickt, soll PHP sich automatisch auf den Shell einloggen und in ein bestimmtes Verzeichnis wechseln und das Kommando ./sc_trans_linux & ausführen. Anschließend soll er sich natürlich auch automatisch ausloggen.
Bei dem Stop Button müsste er die Kill ID / Prozess ID herausfinden und den Prozess per kill beenden.
Ich hoffe es finden sich hier PHP und Linux-Freaks, die mir helfen können..
Vielen Dank schonmal im Vorraus,
Martin
Hunter
@ Mumpits
| Zitat: |
| Ich hoffe es finden sich hier PHP und Linux-Freaks, die mir helfen können.. |
Eher weniger, aber ich versuchs trotzdem mal.
Im PHP gibt es den Befehl system. Da ich nicht weiss, ob system auch "&" ausführt, damit dein Programm nach dem Aufruf zur Shell zurückkehrt, würde ich dir empfehlen, mit diesem Befehl ein Skript aufzurufen, was ungefähr folgenden Inhalt hat:
| code: |
1:
2:
3:
|
#! /bin/bash
/home/.../sc_trans_linux &
echo "$!" > /home/.../sc_trans_linux.pid |
|
Zum Beenden des Programmes empfiehlt sich dann folgendes Script:
| code: |
1:
2:
|
#! /bin/bash
kill `cat home/.../sc_trans_linux.pid` |
|
Diverse Abfragen, bspw. mit if [ -e ... ob ein Pidfile existiert überlasse ich dann dir. Diese wären wahrscheinlich eh sinnvoller in deiner PHP Umgebung untergebracht, da du es dann gleich dem Nutzer mitteilen kannst.
Wenn du die Scripte direkt aufrufen willst, vergiss nicht, sie mit chmod ausführbar zu machen.
Mumpits
Das hört sich doch schonmal super an... sagmal wie verknüpfe ich das mit buttons? könntest du mir eine komplette index machen mit den beiden buttons und den jeweiligen commandos? und wie loggt der sich überhaupt ein? er muss ja auf jeden fall die shell daten haben..
Hunter
@ Mumpits
Sorry, aber den PHP Code dafür hab ich gerad nicht im Kopf, da wirst du selber paar Tutorials wälzen müssen.
Was das Einloggen betrifft, wozu? Ein PHP Script welches sich abarbeiten lässt, ist ja automatisch eingeloggt. Es kann dir höhstens passieren, dass PHP keine Rechte weiter hat, aber das musst du dann mit deinem Provider klären.
Mumpits
Das Script ist autom. eingelogt? Aber als welcher User? Der Ordner indem sich das Programm befindet ist nicht per WWW zugänglich.. und es ist ein eigener ssh user..
Hunter
@ mumpits
Sich via PHP mit einem gespeicherten Passwort über SSH einzuloggen ist ziemlich fahrlässig. Einfacher wäre es, du schmeisst das Script in ein Verzeichnis das für jeden zugänglich ist (bspw. chmod 755) und machst es dann ebenfalls für jeden ausführbar (chmod 711). Dann kann der User unter dem PHP Scripte ausgeführt werden das Program starten. Die Frage wäre dann noch, ob das Script auf Resourcen zurückgreift, die dem PHP User nicht zugänglich sind.
In dem Falle wäre bspw. dann sudo zu empfehlen, natürlich mit einer engen Restriktion was das Ausführen von Befehlen angeht. Als erstes solltest du rausfinden, mit welchem User deine Scripte laufen.
Anschliesend machst du folgendes:
su -c "visudo" (dann root Passwort eingeben)
In der sich öffenden Datei fügst du eine neue Zeile an:
| code: |
1:
|
webuser ALL=(scriptuser) NOPASSWD:/home/scriptdir/script.sh |
|
Zum Editieren drückst du einmal "i" und zum Speichern dann <ESC> und danach ":wq" (ohne die "").
Pass aber auf, dass der Webuser nicht das Recht hat, die script.sh zu bearbeiten oder durch eine andere Datei zu ersetzen... ;-)
Mumpits
So ich habe mir mal was zusammengestellt... jedoch funktioniert es nicht ganz, "headers already set" wenns um den cookie geht.. und es führt beim anklicken der buttons kein commando aus!
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
37:
38:
39:
40:
41:
42:
43:
44:
45:
46:
47:
48:
49:
50:
51:
52:
53:
54:
55:
56:
57:
58:
59:
60:
61:
62:
63:
64:
65:
66:
67:
68:
69:
70:
71:
72:
73:
74:
75:
76:
77:
78:
79:
80:
81:
82:
83:
84:
85:
86:
87:
88:
89:
90:
91:
92:
93:
94:
95:
96:
97:
98:
99:
100:
101:
102:
103:
104:
105:
106:
107:
108:
109:
110:
111:
112:
113:
114:
115:
116:
117:
118:
119:
120:
121:
122:
123:
124:
125:
126:
127:
128:
129:
130:
131:
132:
133:
134:
135:
136:
137:
138:
139:
140:
141:
142:
143:
144:
145:
146:
147:
148:
149:
150:
151:
152:
153:
154:
155:
156:
157:
158:
159:
160:
161:
162:
163:
164:
165:
166:
167:
168:
169:
170:
171:
172:
173:
174:
175:
176:
177:
178:
179:
180:
181:
182:
183:
184:
185:
186:
187:
188:
189:
190:
191:
192:
193:
194:
195:
196:
197:
198:
199:
200:
201:
202:
203:
204:
205:
206:
207:
208:
209:
210:
211:
212:
213:
214:
215:
216:
217:
218:
219:
220:
221:
222:
223:
224:
225:
226:
227:
228:
229:
230:
231:
232:
233:
234:
235:
236:
237:
238:
239:
240:
241:
242:
243:
244:
245:
|
<?
function check($pass)
{
$return=false;
$hash=file('pass');
$hash=$hash[0];
if ($hash == md5($pass))
{
$return=true;
}
return $return;
}
if ($_GET['SCHROTT'] == "")
{
echo ('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>shoutcast micropanel</title>
</head>
<style>
body{background-color:#ffffff; font-size:9pt; font-family:sans-serif;}
input{border:solid 1px #000000; font-size:9pt; font-family:sans-serif;}
table{font-size:9pt; font-family:sans-serif;}
a{font-size:9pt; font-family:sans-serif; color:#444444; font-weight:bold;}
</style>
<body>');
$loggedin=false;
if ($_POST['pass'] == "" and $_COOKIE['pass'] == "")
{
//login
echo ("<table><tr><td>Password:</td><td><form action=$PHP_SELF method=post><input type=password name=pass></td><td><input type=submit value='O.K.'></td></table></form>");
}
elseif ($_POST['pass'] != "" and $_COOKIE['pass'] == "")
{
if (check($_POST['pass']))
{
$loggedin=true;
setcookie('pass', $_POST['pass']);
}
else
{
die ('Wrong Password, try <a href="javascript:history.back()">again</a>');
}
}
elseif ($_COOKIE['pass'] != "")
{
if (check($_COOKIE['pass']))
{
$loggedin=true;
}
else
{
setcookie('pass', "");
echo('User management error, please re-login. Your Browser *MUST* accept cookies.');
}
}
if (!$loggedin)
{
die ('');
}
else
{
echo ('<center><div style="border:solid 1px #000000; width:300; padding:0; margin:5;">
<div style="border-bottom:solid 1px #000000; width:300px; min-width:300px; font-decoration:underlined; background-color:#bbbbbb; font-weight:bold;">
Show-itJukebox Shoutcast Port6666:
</div>
<div style="margin:5px; padding-left:5; padding-right:5; border:solid 1px #000000; width:280;">
<center><a target=execute href=' . $PHP_SELF . '?SCHROTT=conf&action=1> Jukebox Einschalten</a> <a target=execute href=' . $PHP_SELF . '?SCHROTT=conf&action=2>Jukebox Auschalten</a></center>
</div>
</div>
<div style="border:solid 1px #000000; width:300; padding:0; margin:5;">
<div style="border-bottom:solid 1px #000000; width:100%; font-decoration:underlined; background-color:#bbbbbb; font-weight:bold;">
Executing Output:
</div>
<iframe name=execute frameborder=0 width=280; height=60; style="margin:5px; border:solid 1px #000000;" src=about:blank ></iframe>
</div>
</center>
</body>
</html>
');
}
}
else
{
switch ($_GET['SCHROTT'])
{
case 'status':
{ echo ('
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>shoutcast micropanel</title>
<meta http-equiv="refresh" content="3; URL='
. $PHP_SELF
. '?SCHROTT=status">
</head>
<style>
body{background-color:#ffffff; font-size:9pt; font-family:sans-serif;}
input{border:solid 1px #000000; font-size:9pt; font-family:sans-serif;}
table{font-size:9pt; font-family:sans-serif;}
a{font-size:9pt; font-family:sans-serif; color:#444444; font-weight:bold;}
</style>
<body>
<center>');
echo ('</center></body></html>');
}
break;
case 'chpass':
{
echo ('
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>shoutcast micropanel</title>
</head>
<html>
<head>
<title>shoutcast micropanel</title>
</head>
<style>
body{background-color:#ffffff; font-size:7pt; font-family:sans-serif;}
input{border:solid 1px #000000; font-size:9pt; font-family:sans-serif;}
table{font-size:9pt; font-family:sans-serif;}
a{font-size:9pt; font-family:sans-serif; color:#444444; font-weight:bold;}
</style>
<body>
');
if (check($_COOKIE['pass']))
{
$exe="/var/www/web3/html/media/sc_trans_040/radiostart.sh";
echo ("Starting...<br>Executing '$exe'");
system ($exe);
}
else
{
echo ('Denied.');
}
echo ('</body></html>');
break;
}
case 'stop':
{
echo ('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>shoutcast micropanel</title>
</head>
<style>
body{background-color:#ffffff; font-size:7pt; font-family:sans-serif;}
input{border:solid 1px #000000; font-size:9pt; font-family:sans-serif;}
table{font-size:9pt; font-family:sans-serif;}
a{font-size:9pt; font-family:sans-serif; color:#444444; font-weight:bold;}
</style>
<body>');
if (check($_COOKIE['pass']))
{
$exe="/var/www/web3/html/media/sc_trans_040/radiostop.sh";
echo ("Stopping...<br>Executing '$exe'");
system ($exe);
}
else
{
die ('Denied.');
}
echo ('</body></html>');
break;
}
case 'logout':
{
echo ('<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<html>
<head>
<title>shoutcast micropanel</title>
<meta http-equiv="refresh" content="2; URL=index.php">
</head>
<style>
body{background-color:#ffffff; font-size:9pt; font-family:sans-serif;}
input{border:solid 1px #000000; font-size:9pt; font-family:sans-serif;}
table{font-size:9pt; font-family:sans-serif;}
a{font-size:9pt; font-family:sans-serif; color:#444444; font-weight:bold;}
</style>
<html>
<style>
body{background-color:#ffffff; font-size:7pt; font-family:sans-serif;}
input{border:solid 1px #000000; font-size:9pt; font-family:sans-serif;}
table{font-size:9pt; font-family:sans-serif;}
a{font-size:9pt; font-family:sans-serif; color:#444444; font-weight:bold;}
</style>
<body>
<html>
<head>
<title>shoutcast micropanel</title>
</head>
<style>
body{background-color:#ffffff; font-size:7pt; font-family:sans-serif;}
input{border:solid 1px #000000; font-size:9pt; font-family:sans-serif;}
table{font-size:9pt; font-family:sans-serif;}
a{font-size:9pt; font-family:sans-serif; color:#444444; font-weight:bold;}
</style>
<body>');
$action=$_GET['action'];
if ($action=="1") {
system("/var/www/web3/html/media/sc_trans_040/radiostop.sh");
echo "Jukebox gestoppt";
}
elseif ($action=="2") {
system("/var/www/web3/html/media/sc_trans_040/radiostart.sh");
echo "Jukebox aktiviert";
}
echo ('</body></html>');
break;
}
}
}
?>
|
|
Smu
oh das ist interessant sowas kann ich mehr als gut gebrauchen
mein compardre ist beim "sinnlos durchs web" surfen hierdrauf gestossen
nun hab ich versucht das einzubauen und bin gescheitert
--->
www.meetsworld.de/autostream.php
zeigt leider nix an
ist noch jemand in der lage das ganze so zu coden, dass es 100% funzt?
Ich wäre dankbar