2011-07-15 11 views
17

Windows XP üzerinde çalışıyorum. ssh oturumunu otomatikleştiren bir TCL komut dosyasını arayarak tarayıcım aracılığıyla bir sistem() komutunu başarıyla çalıştırabilirim. Ayrıca betikten bir değer döndürüyorum. Ancak benim sorunum, betiğin ssh oturumunu tarayıcıda döker olmasıdır.sistem() çıktısının nasıl saklanacağı

$ lastline = sistemiyle (.: $ Kullanici ' "C: \ tcl \ bin \ tclsh.exe" \ yolu \ filename.tcl dosyaya''

benim php komut benziyor.. $) $ val geçmesi;

filename.tcl:

spawn plink -ssh $ user @ $ konak
bekliyoruz "assword:"
gönderme "$ pas \ r"
"\ istemini bekliyoruz:/- >"
set $ dönen_değer
/...some kod ... Bu iyi çalışır [dize /..string../ $ expect_out (tampon) karşılaştırmak]/
çıkış $ dönen_değer

her şey iyi çalışır ve geri doğru $ dönen_değer olsun ama php dosyası baskılar benziyor benim tarayıcıda tüm SSH oturumu yürütme sonucu: adı olarak "admin" kullanma

. [email protected]'s şifre: ===/* Bazı metin */=== \ istemi:/-> .../Bazı metin/

i sistemini engellemek istiyorum() Tarayıcımdaki bu yazdırmasını fonksiyon
i shell_exec() fonksiyonunu kullandık ama (i tcl komut ayrıştırılır ve php script dönmek için kesin bir değer var olan) orada olduğunu tüm sSH oturumu sonuç döndürür yolu i peşin() yerine

sayesinde shell_exec() kullanarak ancak sistemi kullanmadan yapabilirsiniz

cevap

24

documentation for system() özellikle diyor bakın:

harici komutu çalıştırır ve alternatifler listelenmiştir o sayfada çıkışı

görüntüler. Bunun yerine the exec function kullanırsanız, sadece herhangi bir çıktı görüntülemeden komutları çalıştırır.

Örnek:

<?php 
echo "Hello, "; 
system("ls -l"); 
echo "world!\n"; 
?> 

system çıktısını görüntüler:

$ php -q foo.php 
Hello, total 1 
-rw-r--r-- 1 bar domain users 59 Jul 15 16:10 foo.php 
world! 

herhangi bir çıktı göstermeyecektir exec kullanırken: my ques bu yönünü ortaya eksik

<?php 
echo "Hello, "; 
exec("ls -l"); 
echo "world!\n"; 
?> 

$ php -q foo.php 
Hello, world! 
+1

teşekkürler csl ... işe yarıyor ... daha önce ob_start() ve ob_end_clean() işlevlerini kullanarak sistem() komutunu istediğiniz gibi almak için önce ve sonra kullanıyordum sonuçlar ... giriş için teşekkürler .... – user806168

3

kullanın ob_start(); önce ve ob_clean(); Sisteminizde() çağrısı ve ardından ob_end_clean() önce ob_start kullanabilirsiniz tarayıcısı() için çıkışa şey önlemek istiyorsanız Genelde bunu

http://sandbox.phpcode.eu/g/850a3.php

<?php 
ob_start(); 
echo '<pre>'; 
$last_line = system('ls'); 
ob_clean(); 
echo 'nothing returned!'; 
?> 
+0

sry Ancak bu $ sonuç ne zaman olsa bile, geri dönüşümü gerçekleştirdiğim $ return_value değerini saklar. tcl komut dosyası. Yine de, çıkışım hala tarayıcımın ssh oturumunu döker – user806168

+0

Cevabımı düzenledim. Bu bir – genesis