2013-07-17 21 views
10

Bir nginx sunucusunda PHP'de bir shell komut text2wave çalıştırmaya çalışıyorum.Text2wave festivali nginx php exec ile çalışmaz

Sorun, komutun gerektiği gibi çalışmadan sessizce çıkmasıdır. Ayrıca herhangi bir hata göstermiyor. Beklediğim gibi çalıştığını (normal bir kullanıcı olarak) kabukta php komutu ile komut çalıştırırsanız

<?php 
$result = `/usr/bin/text2wave --help`; 
var_dump($result); 

:

İşte kod. Ancak, nginx aracılığıyla bir http isteği üzerinden çalıştırırsam, var_dump NULL 'u döndürür (ayrıca hata günlük dosyalarında günlük kaydı yoktur)

Yardımlarınız için teşekkürler!

+0

belki de php örneğinin komutu çalıştırma iznine sahip olmadığı için, izinler 'text2wave' –

+0

çalıştırılabilirliğini ve izinlerini kontrol edin -rwxr-xr-x. Nginx php –

+0

üzerinden mükemmel çalışan program festivali ile aynı ilk satırda ini_set ('display_errors', 'on') 'seçeneğini aktifleştirmeye çalışın ve herhangi bir şey gösterip göstermediğine bakın. –

cevap

0

Tahminimce, web sunucunuz tarafından kullanılan php.ini yapılandırma dosyasında kabuk yürütme devre dışı bırakılmış olacaktır.

deneyin açılış /etc/php5/fpm/php.ini dosya, disable_functions direktifini bulma ve aşağıdaki işlevlerden hiçbiri direktifin değerindeki bulunduğundan emin yapma: shell_exec,exec,passthru,system

+0

OP'nin '$ result = '/ usr/bin/text2wave --help'; 'i nasıl çalıştırdığını açıklayabilir misiniz? Tekrar bak - bu bir (string) değişken atama, bir işlev değil. OP herhangi bir yapılandırmayı düzeltmek zorunda değildir; bunun yerine OP'nin PHP kodunu düzeltmesi gerekiyor. –

+0

@ e-sushi http://php.net/manual/en/language.operators.execution.php –

+0

Ah, bunlar * "backticks" *! Bunların biçimlendirme hataları olduğunu sanıyordum… (duvara çarpıyor) Benim kötü; kesinlikle haklısın. Head-up için teşekkürler. Yanlış cevabımı buna göre kaldırdım. Benim bakış açıma göre, bu ödülü hak ettiniz! Öte yandan, tek tırnak ve backticks arasındaki farkı görmediğim gerçeğine baktığımda, * "view" *, güvenmek için en iyi şey olmayabilir. ;) –

3

deneyin:

<?php 
function sys_cmd($cmd) 
{ 
    $hd = popen($cmd,"r") or die('function disabled'); 
    while (!feof($hd)) 
    { 
     $rs .= fread($hd,1024);  
    } 
    pclose($hd); 
    return $rs; 
} 
echo sys_cmd('ls -l'); 
?> 
+0

olsa da, betik 'ls -l' ile çalışır, ancak 'text2wave --help' ile (elbette text2wave 'ın normal kullanımıyla değil) çalışır. –

0

herkes için Aynı problemden nefret ediyorum ... Problemin ne olduğunu bulmayı başardım. Peki .. tür.

Apache'ye geçtim ve hemen çalışmaya başladı. o zor bir karar olmasına rağmen Yani çözüm

... Ben çalıştırma komutları yaparken nginx php ran yolu ile ilgili bir şey vardı sanırım nginx

kullanmak değildir, ben başka hiçbir çözüm buldu ancak apache için ... şimdi iyi çalışıyor