CD-Laufwerk mit eject öffnen

9 views
Skip to first unread message

Carlos Naplos

unread,
Jan 10, 2021, 10:01:02 AMJan 10
to
Hallo

Ich versuche unter xubuntu/apache2, das CD-Laufwerk mit eject zu öffnen.
Im Terminalfenster funktioniert das mit eject.
Aber aus PHP heraus mit shell_exec reagiert das CD-Laufwerk nicht.

Meine php-Datei sieht so aus:

<?php
echo 'Output von "eject -v -i 0 cdrom":';
$output = shell_exec('eject -v -i 0 cdrom');
echo "<pre>$output</pre>";

echo 'Output von "eject -v -sT cdrom":';
$output = shell_exec('eject -v -sT cdrom');
echo "<pre>$output</pre>";
?>

Und so die Ausgabe:

Output von "eject -v -i 0 cdrom":

eject: device name is `cdrom'
eject: expanded name is `/dev/cdrom'
eject: `/dev/cdrom' is a link to `/dev/sr0'
eject: `/dev/sr0' is not mounted
eject: `/dev/sr0' is not a mount point

Output von "eject -v -sT cdrom":

eject: device name is `cdrom'
eject: expanded name is `/dev/cdrom'
eject: `/dev/cdrom' is a link to `/dev/sr0'
eject: `/dev/sr0' is not mounted
eject: `/dev/sr0' is not a mount point
eject: `/dev/sr0' is not a multipartition device
eject: toggling tray

Die letzte Zeile sag ja eigentlich, dass eject die Schublade
öffnet/schließt, aber es passiert nichts.

Hat jemand eine Idee, woran das liegen könnte.

Gruß Carlos

Matthias P. Würfl

unread,
Jan 11, 2021, 3:58:05 PMJan 11
to
Carlos Naplos schrieb am Sonntag, 10. Januar 2021 um 15:01:02 UTC:

> Ich versuche unter xubuntu/apache2, das CD-Laufwerk mit eject zu öffnen.
> Im Terminalfenster funktioniert das mit eject.
> Aber aus PHP heraus mit shell_exec reagiert das CD-Laufwerk nicht.
[...]
> Hat jemand eine Idee, woran das liegen könnte.

Ich gehe davon aus, dass der Benutzer, unter dem das PHP läuft (www-data?) keine Berechtigung auf das Laufwerk hat. Du müsstest ihn vielleicht der Gruppe "cdrom" hinzufügen.

usermod -a -G cdrom www-data

Alternativ bzw. wenn's das nicht war: Was passiert, wenn Du das PHP-Script als normaler Benutzer von der bash aus startest z.B. mit "php script.php" oder so?

Grüße, Matthias

Carlos Naplos

unread,
Jan 11, 2021, 5:52:41 PMJan 11
to


Am 11.01.2021 um 21:58 schrieb Matthias P. Würfl:
> Carlos Naplos schrieb am Sonntag, 10. Januar 2021 um 15:01:02 UTC:
>
>> Ich versuche unter xubuntu/apache2, das CD-Laufwerk mit eject zu öffnen.
>> Im Terminalfenster funktioniert das mit eject.
>> Aber aus PHP heraus mit shell_exec reagiert das CD-Laufwerk nicht.
> [...]
>> Hat jemand eine Idee, woran das liegen könnte.
>
> Ich gehe davon aus, dass der Benutzer, unter dem das PHP läuft (www-data?) keine Berechtigung auf das Laufwerk hat. Du müsstest ihn vielleicht der Gruppe "cdrom" hinzufügen.
>
> usermod -a -G cdrom www-data

Super, das war's! Nach einem Reboot funktioniert es jetzt.

*Vielen Dank!*


p.s.:

Einen Schönheitsfehler hat die Sache noch:

Ich rufe das Script aus einem Menü heraus auf:
<li><a href="disctoggle.php" target="_blank">Eject</a> </li>

Mit target="_blank" wird jedesmal ein neues Browser-Fenster bzw. -Tab
geöffnet. Und ich weiß nicht, wie es nach getaner Arbeit wieder
automatisch geschlossen werden kann.

Mit target="_self" ist dann das Menü weg. Klar mit dem Zurück-Button des
Browsers ist man schnell wieder dort, aber elegant ist das nicht.

Carlos Naplos

unread,
Jan 11, 2021, 7:32:17 PMJan 11
to


Am 11.01.2021 um 23:52 schrieb Carlos Naplos:


> Einen Schönheitsfehler hat die Sache noch:
>
> Ich rufe das Script aus einem Menü heraus auf:
>     <li><a href="disctoggle.php" target="_blank">Eject</a> </li>
>
> Mit target="_blank" wird jedesmal ein neues Browser-Fenster bzw. -Tab
> geöffnet. Und ich weiß nicht, wie es nach getaner Arbeit wieder
> automatisch geschlossen werden kann.
>
> Mit target="_self" ist dann das Menü weg. Klar mit dem Zurück-Button des
> Browsers ist man schnell wieder dort, aber elegant ist das nicht.

Ich hab's gefunden:

echo "<script>window.close();</script>";

schießt das Fenster wieder.

Gruß CN

Karl Pflästerer

unread,
Jan 12, 2021, 12:38:37 PMJan 12
to
Mache daraus doch einen Button und löse einen XHHTP Request aus. Dann
öffnet sich kein Fenster (zum Beispiel). Oder fange den Click event ab.
oder ...


Carlos Naplos

unread,
Jan 13, 2021, 12:53:38 PMJan 13
to
"öffnet sich kein Fenster" wäre super, aber "XHHTP Request" sagt mir nichts.
Kannst Du das kurz erklären?

Ich habe das in einem Menü:
...
<li><a href="disctoggle.php" target="_blank">Eject</a> </li>
...

disctoggle.php sieht jetzt so aus:
<?php
shell_exec('eject -v -i 0 cdrom');
shell_exec('eject -v -sT cdrom');
echo "<script>window.close();</script>";
?>

Gruß CN

Karl Pflästerer

unread,
Jan 14, 2021, 3:02:09 AMJan 14
to
Zu XHHTP: Das sollte eigent XHRequest heißen.
https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest

Zu deinem Skript. Für den Privat gebrauch ist das OK. Trotzdem solltest
du dir angewöhnen auf Fehler zu reagieren. Mit exec() bekommst du
Fehlermeldung und Status des Kommandos. Wenn Status != 0 weißt du das
was falsch war. Dann kann man darauf reagieren (anzeigen. Log schreiben,
...)

Beispiel:

php > var_dump(shell_exec('doesnot exist'));
sh: doesnot: command not found
NULL
php > var_dump(exec('doesnot exist', $res, $ret));
sh: doesnot: command not found
string(0) ""
php > var_dump($res, $ret);
array(0) {
}
int(127)


In $ret steht 127; dann weißt du, das was falsch war (nur wenn dort 0
steht, war der Call erfolgreich).

Carlos Naplos

unread,
Jan 14, 2021, 3:01:04 PMJan 14
to
Ja, das ist rein für den privaten Gebrauch. Um mal selbst so was mit php
und sql-Datenbank zu programmieren.

Ich habe mich sowieso schon gefragt, warum es da zwei Funktionen,
shell_exec und exec gibt.

Die Sache mit XMLHttpRequest ist mir zu kompliziert.

Aber danke für die Unterstützung.

Gruß CN
Reply all
Reply to author
Forward
0 new messages