Portál AbcLinuxu, 25. dubna 2024 17:11


Dotaz: PHP - Spouštění souborů sh

28.2.2011 20:47 Libor Kron
PHP - Spouštění souborů sh
Přečteno: 376×
Odpovědět | Admin
Zdravím.

V PHP mám řádek

exec('bash /home/bash/delete.sh');

ale po spuštění PHP obsah souboru neprovede.. Poradí prosím někdo co je potřeba ještě nastavit? Dík
Nástroje: Začni sledovat (0) ?Zašle upozornění na váš email při vložení nového komentáře.

Odpovědi

Jendа avatar 28.2.2011 21:06 Jendа | skóre: 78 | blog: Jenda | JO70FB
Rozbalit Rozbalit vše Re: PHP - Spouštění souborů sh
Odpovědět | | Sbalit | Link | Blokovat | Admin
A co třeba nějakou chybu, tu to vypíše? (aneb nemáš vypnuté vypisování chyb?)
Já to s tou denacifikací Slovenska myslel vážně.
28.2.2011 21:17 Libor Kron
Rozbalit Rozbalit vše Re: PHP - Spouštění souborů sh
Právě že to nevypíše nic, chyby mám zapnuty.

Dal jsem tam ještě podmínku
$aaa = exec('bash /home/virt/delete.sh');
if($aaa){
echo "povedlo se";
}else{
echo "nepovedlo se";
}
a vypisuje se "nepovedlo se".. ale chyba právě žádna :(

prava souboru jsou nastaveny na 0777
28.2.2011 21:34 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP - Spouštění souborů sh
Zkuste si přečíst co funkce exec() vrací - nakopnout stačí :),
a pak se ujistěte jestli tam nehcete jen '/home/virt/delete.sh'.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
28.2.2011 21:43 Libor Kron
Rozbalit Rozbalit vše Re: PHP - Spouštění souborů sh
Přesně tak, teď jsem to zkusil jen tak, jenže problém je v tom, že ja potřebuji pracovat z adresari mimo dosah www-data. Proto to dělám přes bash. Jenže tak to asi nejde.. Nějaký nápad? Zkoušel jsem

'sudo /home/virt/delete.sh' i 'su /home/virt/delete.sh' ale nejde to..

Děkuji
28.2.2011 22:38 camel1cz | skóre: 25
Rozbalit Rozbalit vše Re: PHP - Spouštění souborů sh
Rozhodně je nutné sudo... často také bývá v konfiguraci (sudoers) povoleno sudo jen pro vyjmenované skupiny atd. (www-data tam téměř jistě není)
28.2.2011 22:46 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP - Spouštění souborů sh
Toš, tak, - co vrací exec() ?, poslední řádek výstupu toho scriptu a pokud je ten prázdný tak je to false.
Co vypíše něco jako toto:
$out = '';
$retval = -1;
$lastln = exec('/home/virt/delete.sh', $out, $retval);
echo "Last line: '$lastln' <br />\n";
echo "Return code: '$retval' <br />\n";
echo " Out: <br />\n<pre>\n";
print_r($out);
echo "</pre>\n";
script se pustí pod www-data (nebo jiným uživatelem na kterého běží apache), a co může on, to může i ten script.
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
28.2.2011 22:53 Libor Kron
Rozbalit Rozbalit vše Re: PHP - Spouštění souborů sh
Toš vrací to tohle :)
Last line: '600' 
Return code: '0' 
Out: 
Array
(
    [0] => 120
    [1] => 600
    [2] => 600
    [3] => 600
)
28.2.2011 23:19 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP - Spouštění souborů sh
Toš a?,
Návratový kód scriptu má být 0?
Script má vypisovat ta čísla?
Odpovídá to jako by jste zadal v terminálu:
libor@mojedelo> /home/virt/delete.sh
a ono by to vypsalo:
120
600
600
600
a echo $? by vypsalo 0
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†
28.2.2011 23:51 Libor Kron
Rozbalit Rozbalit vše Re: PHP - Spouštění souborů sh
Hm, no v tom scriptu mam jenom na vystupu

echo "Všechno smazano!"

ale tohle to nevypisuje kdyz to spustim z CL

co to je vubec za cisla? Da se z toho vycist co se mu nelibi?

diky
1.3.2011 08:45 Šangala | skóre: 56 | blog: Dutá Vrba - Wally
Rozbalit Rozbalit vše Re: PHP - Spouštění souborů sh
Asi nemáte :), nebo to díky tomu, že to běží v jiném prostředí, dělá to „něco“ jiného než chcete.
Zkuste si tam vložit třeba příkaz 'ls' místo toho scriptu.
Němu se všechno líbí, script skončil s '0' a to obvykle znamená „v pořádku“.
TIP: Podívejte se do zdroje stránky, nebo to změňte na:
$out = '';
$retval = -1;
$lastln = exec('/home/bash/delete.sh', $out, $retval);
echo "Last line: '".htmlspecialchars($lastln)."' <br />\n";
echo "Return code: '$retval' <br />\n";
echo " Out: <br />\n<pre>\n";
var_dump($out);
echo "</pre>\n";  
(No ale pak si uvědomte, že var_dump() vrací více informací)
V html nemusíte vždy vidět to, co je ve zdroji stránky, pokud to není ošetřeno…
Nebo to vyjďte ručně
$out = '';
$retval = -1;
$lastln = exec('/home/bash/delete.sh', $out, $retval);
echo "Last line: '".htmlspecialchars($lastln)."' <br />\n";
echo "Return code: '$retval' <br />\n";
echo " Out: <br />\n<pre>\n";
foreach ($out as $line)
  echo htmlspecialchars($line) . "<br />";
echo "</pre>\n";  
To, že trpíš stihomamem, ještě neznamená, že po tobě nejdou. ⰞⰏⰉⰓⰀⰜⰉ ⰗⰞⰅⰜⰘ ⰈⰅⰏⰉ ⰒⰑⰎⰉⰁⰕⰅ ⰏⰉ ⰒⰓⰄⰅⰎ ·:⁖⁘⁙†

Založit nové vláknoNahoru

Tiskni Sdílej: Linkuj Jaggni to Vybrali.sme.sk Google Del.icio.us Facebook

ISSN 1214-1267, (c) 1999-2007 Stickfish s.r.o.