PHP'nin shell_exec ile bash çağırıyor -

2 Cevap php

Benim sunucuda bir bash betiği çağırmak için PHP'nin shell_exec fonksiyonunu kullanıyorum.

shell_exec("bash -x /tesladata/isetools/0-extractbytickerforweb.bash $ticker $isedate > /t24alv2/iseoutput/$ticker-$isedate-$thistime.log &");

Şimdi, daha önce ("... bash-x") bir CGI komut dosyası çalıştıran komutu vardı ve çok daha hızlı (ani) idi. Şimdi (> 10 sn) çalıştırmak için komut dosyası için bir acı yavaş zaman alır ve çıkan sayfa işlemek için.

Herhangi bir bu çok yavaş neden fikir? Benim bütün site PHP dönüştürülür ediliyor beri hala, CGI değil PHP bash komut dosyasını çalıştırmak ve istiyorum. Belki başka bir fonksiyonu daha uygundur? Herhangi bir fikir mutluluk duyacağız.

2 Cevap

Sen PHP'nin exec ve system işlevleri de bir göz atabilirsiniz, ancak gerçekten onlar olsa denemek değer script yürütülmesini hızlandırmak neden bir sebep görmüyorum. Ben apache ile ilgili bir sorun bu sonuca olmanın kaynak PHP değil, (eğer apache kullanıyorsanız varsayarak) eminim this bug thread.

Ayrıca gerçekten bir kamu web sitesinde bu komutları kullanarak son derece dikkatli olmalıdır. escapeshellarg ve escapeshellcmd yararlanın.

For Windows users running Apache as an NT Service: Bu büyük ölçüde shell_exec () veya exec (a user account ve not the default system account ile çalıştırmak için Apache hizmetini yapılandırarak) performansını artırmak gibi görünüyor.

Örneğin, standart bir NT hizmeti olarak çalışan Apache () (svn komutları çalıştırarak, özellikle) 15-17 saniye alıyor komutları shell_exec sonuçlandı bulundu. Changing the Apache service to run with a user account caused the time to drop to to 4-5 seconds--a huge difference.

Bunu yapmak için, servis kontrol panelini açın, Apache hizmeti sağ tıklatın ve Özellikler'i seçin. Oturum Açma sekmesini tıklayın ve "Bu hesap" için "Yerel sistem hesabı" radyo düğmesini değiştirin. Sonra servis kullanmak istediğiniz kullanıcı hesabı belirtin.

Ben bir Windows admin guru değilim unutmayın; Bir kullanıcı hesabı olan bir hizmeti çalıştıran ben farkında değilim ki önemli sonuçlar doğurabilir.