ugrás a tartalomhoz

Shellben futtatva van kimenet, shell_exec -el pedig nincs.

tazvagyok · 2007. Júl. 26. (Cs), 11.16
Sziasztok!

Miért lehet az, hogy egy akármilyen parancsot shellben futtatva kapok kimenetet a képernyőre, de shell_exec-el futtatva nem. A parancs futtatásához nem kell root-nak lenni.

Segítségeteket előre is köszönöm.
 
1

Előfordul

janoszen · 2007. Júl. 26. (Cs), 11.38
Nekem is előfordult, pl alsaplayer ---status esetén... Kerülő megoldás hogy beleküldöd egy fájlba vagy socketbe a kimenetet az sokszor megoldja.
2

Próbáltam fileba

tazvagyok · 2007. Júl. 26. (Cs), 12.06
Próbáltam fileba, létre is jön egy 0 bíte-os file... :(
A socketes megoldást leírnád nekem, mert ahhoz nem értek.
Köszönöm
3

stderr?

zila · 2007. Júl. 26. (Cs), 12.10
Nem lehet, hogy az adott script a stderr-re ír és nem a stdout-ra? Terminálnál mindkettő a képernyő szokott lenni, de bármi más esetben a kettő külön stream...
4

És azt hogyan kellene? :D

tazvagyok · 2007. Júl. 26. (Cs), 12.18
Jelenleg ennyi a script:
<?php
$html = shell_exec("pure-ftpwho -w");
echo $html;
?>


Köszönöm.
5

Root jog kell

scomp · 2007. Júl. 26. (Cs), 12.24
Ehez a parancshoz valószínűleg root jogok kellenek. Ezért nincs kimenet...
6

De kiadtam egy iet

tazvagyok · 2007. Júl. 26. (Cs), 12.27
sudo chmod +s /usr/sbin/pure-ftpwho
Ez nem oldja meg? Hogyan tudnék shell_exec -et rootként futtatni? Hogyan kellene paraméterezni, mert erre nem találtam megoldást.
7

stdout/stderr?

Hodicska Gergely · 2007. Júl. 26. (Cs), 12.35
Nem lehet, hogy csak annyi van, hogy a script az simán a stderr-re ír? Egy kis szemléltetés:
felho##kukac##jastest:~/php.shell_exec.test$ cat mixed.output.sh
#!/bin/sh
echo 1>&2 "error"
echo "out"
felho##kukac##jastest:~/php.shell_exec.test$ ./mixed.output.sh > out.txt 2> err.txt
felho##kukac##jastest:~/php.shell_exec.test$ cat err.txt
error
felho##kukac##jastest:~/php.shell_exec.test$ cat out.txt
out
felho##kukac##jastest:~/php.shell_exec.test$ cat test.php
<?php

var_dump(shell_exec("./mixed.output.sh"));
echo "\n";
var_dump(shell_exec("./mixed.output.sh 2>&1"));

?>
felho##kukac##jastest:~/php.shell_exec.test$ php test.php
error
string(4) "out
"

string(10) "error
out
"
Üdv,
Felhő
8

ne haragudj

tazvagyok · 2007. Júl. 26. (Cs), 12.59
de ezt nem értem. Azt látom hogy ezt shellbe írogatod, de ez mire is jó nekem és hogyan?

:)
10

kicsit gondold át

Hodicska Gergely · 2007. Júl. 26. (Cs), 22.17
Ugye a problémád az volt, hogy shellben meghívva egy parancsot kapsz kimenetet, PHP-ból meghívva nem. Erre írtam, hogy lehet, hogy a shell script az stderr-re ír, nem a stdout-ra, és ezt próbáltam meg illusztrálni. A cat parancsok szolgálnak arra, hogy lásd, hogy mit is tartalmaz az adott fájl, amit végrehajtok. A shell script annyit tud, hogy ir stderr-re és stdout-ra is. A következő parancs ezt bizonyítja, a különböző kimeneteket különböző fájlokba irányítva hívom meg a scriptet, és látszik is, hogy a kiírt szöveg a megfelelő fájlokba kerülnek. Ezután meghívok egy PHP scripet, ami shell_exec segítségével meghívja ezt a scriptet, de a második esetben az stderr-t átirányítva az stdout-ra. És az elvárásnak megfelelően első esetben csak az "out" szöveggel tér vissza a parancs, míg második esetben az "error" szöveget is visszakapjuk.

Tehát ez alapján meg tudsz győződni arról, hogy a shell scripted hova ír (meghívod parancssorból úgy, hogy a különböző kimeneteket különböző fájlokba teszed), és ha azt tapasztalod, hogy tényleg az stderr-t használja, akkor arra is kaptál példát, hogy PHP-ból ezt hogyan tudod megkapni.


Üdv,
Felhő
9

stderr

scomp · 2007. Júl. 26. (Cs), 13.41
ha stderr kimenetetre van szükséged akkor így nézne ki a script:
<? 
echo shell_exec("pure-ftpwho -w 2>&1"); 
?>