Autor | Zpráva | ||
---|---|---|---|
TomasJ Profil |
Zdravím vás. Potřeboval bych radu ohledně vykonávání příkazů přes exec, system, passthru ... Na linuxu běží aplikace ffmpeg (přes ni chci zjistit iformace o nějakém hudebním souboru). Mám příkaz:
ffmpeg -i /var/www/**/****/***/****/*****/********/User_AccountID/Track.mp3 Ještě bych chtěl dodat, že jsem zkoušel spouštět příkazy takto: exec("ffmpeg -i /var/www/**/****/***/****/*****/********/User_AccountID/Track.mp3",$odpoved); echo $odpoved; //vypsalo Array (a to pole je prazdne) unset($odpoved); passthru("ffmpeg -i /var/www/**/****/***/****/*****/********/User_AccountID/Track.mp3",$odpoved); echo $odpoved; //vypsalo cislo 127 echo exec("ffmpeg -i /var/www/**/****/***/****/*****/********/User_AccountID/Track.mp3"); //nevypsalo nic |
||
Keeehi Profil |
Nevypisují se ty informace náhodou na chybový výstup? Pak by mohlo pomoct přidat na konec
2>&1 .
Jinak se ještě koukněte do manuálu, co která funkce vrací a co dělají jaké paramtery. exec s dvěma parametry se nechová stejně jako jako passthru se dvěma parametry. Také by bylo dobré vyzkoušet, zda script má vůbec oprávnění spouštět ffmpeg a zda má přístup k tomu souboru. PHP poběží nejspíše pod jiným uživatelem a bude v jiných skupinách, než přihlášený uživatel. |
||
TomasJ Profil |
#3 · Zasláno: 18. 8. 2012, 17:52:48
Keeehi:
Aha, tak podle mě to nejspíš bude s těmi uživateli... Tak zkusím to omrknout. |
||
Keeehi Profil |
#4 · Zasláno: 18. 8. 2012, 21:01:52
echo exec("groups `whoami`"); |
||
TomasJ Profil |
Keeehi:
Hmm mám kód úplně stejně napsaný, ale nic mi to nevypíše... :-/ A funkce exec je povolená. |
||
Keeehi Profil |
#6 · Zasláno: 19. 8. 2012, 12:54:58
Máte zapnuté vypisování chybových hlášek (error_reporting a display_errors)?
|
||
TomasJ Profil |
Keeehi:
Ano mám zkoušel jsem i nastavit přes php error_reporting(E_ALL); a v htaccess mám normálně display_errors na zapnuté. EDIT: Hmm, koukám, že je Safe Mode nastavený na zapnuto. Nemůže to být tím? Ale disable_functions je prázdné. |
||
Keeehi Profil |
#8 · Zasláno: 19. 8. 2012, 13:57:43
Pokud máte zapnuté vypisování chyb (ověříte tím, že chybu naschvál uděláte: třeba
echo $a; bez předchozí deklarace $a by měla vyhodit notice) tak na nemožnost provést tu funkci vás to upozorní chybou.
Pak to chce otestovat, zda vůbec funkce exec něco vrací. var_dump(exec("foo")); by mělo vypsat něco ve stylu foo: command not found.
|
||
TomasJ Profil |
Tak mi to nic nevrátí no (string(0) ""). Vůbec mě nenapadá v čem by to mohlo být...
|
||
Keeehi Profil |
#10 · Zasláno: 19. 8. 2012, 17:20:53
On by za to mohl být zodpovědný safe mode, protože pokud je zapnutý, můžou se programy spouštět jen ze složky která je definovaná v php.ini u safe_mode_exec_dir, ale zdá se mi divné, že pokud s tím je nějaký problém, tak že to nevyvolá žádnou chybu.
|
||
Mike8748 Profil |
#11 · Zasláno: 19. 8. 2012, 17:21:32
TomasJ:
skus exec('whoami',$output,$exit); var_dump($output); echo "\n".$exit; další možnost je z phpinfo si zjistit skutečnou cestu k adresáři, a pak skusit něco jako exec("whoami > ".$adresar); |
||
TomasJ Profil |
#12 · Zasláno: 19. 8. 2012, 23:14:25
Keeehi:
U safe_mode_exec_dir není žádná hodnota definována. To asi znamená, že nemá oprávnění spouštět z žádné složky? Mike8748: První možnost vrátila u $output prázdné pole a u $exit číslo 127. Druhá možnost: Adresář s absolutní cestou v souborovém systému... Tedy adresář ftp serveru var/www/......./muj_web/ ? |
||
Keeehi Profil |
#13 · Zasláno: 19. 8. 2012, 23:53:10
Dle linuxtopia bývá 127 jako neznámý příkaz.
Pokus 1 exec('echo hello',$output,$exit); var_dump($output); echo "\n".$exit; Pokus 2 exec('/bin/echo hello',$output,$exit); var_dump($output); echo "\n".$exit; Pokus 3 safe_mode_exec_dir = /bin nebo vypnout safemode.
exec('/bin/echo hello',$output,$exit); var_dump($output); echo "\n".$exit; 2 a 3 za předpokladu, že echo je /bin |
||
TomasJ Profil |
Keeehi:
Tak to asi bude tím safemode. Pokus 1: array(0) { } 127 Pokus 2: To samé jak Pokus 1. Pokus 3 vyzkouším až po vypnutém safe_mode (nemám práva k editaci php.ini) a určitě dám vědět. Pokud ani tím safemode to nebude, pak asi zbývá poslední věc, překontrolovat práva. |
||
Časová prodleva: 3 dny
|
|||
TomasJ Profil |
Zdravím, takže problémem byl skutečně safemode, ale teď mi třeba ten ffmpeg vrátí error 1, který je údajně "Catchall for general errors". Co je za obecnou chybu v příkazu
ffmpeg -i /var/www/.../Avicii_-_Level_two.mp3 ? Přes konzoli mi normálně jde...
Jelikož mi po zadání příkazu dir funkce exec() vrátila soubory z kořenové složky webu, zkoušel jsem i cestu od kořenové složky po cílový soubor. Pořád stejný chyba.
Samozřejmě místo teček mám mnohem delší cestu. |
||
Časová prodleva: 12 let
|
0