PHP script komut satırı yapmak için nasıl

4 Cevap php

Ben belirli bir Unix hesabına (komut yaşıyor aynı Unix sunucu) kullanıcılara bilgi verecek bir komut dosyası yazmak gerekiyor. Parmak yoluyla passwd dosyasında veya mevcut olan şeyler çoğunlukla şey türlü.

PHP güvenli modda, yani file_get_contents() gibi php yerleşik bir şey aracılığıyla passwd dosyasına erişemiyor. Güvenli modda çünkü Ayrıca, çeşitli komut satırı fonksiyonları devre dışı bırakılır.

Ben bir priz üzerinden bilgi almak düşündüm (ne anlama geldiğini henüz hiçbir ipucu, ama ben denemek düşündüm) ama socket_create() bilinmeyen bir fonksiyonu olduğu ölümcül bir hata alıyorum. Ben (Bilginize, ben değiştiremem ki) php-config dosyasını çekti ve emin yeterli, yuva etkin değildir.

Ben orada iken Ancak, ben hiçbir gerçek dizin kümesi satır '--with-exec-dir=' gördüm.

Öyleyse ben EVERY komut satırı fonksiyonu çalışıyordu diğerleri hiç bir şey yaptı ise, bazı attı ki, tip hatalar "güvenli mod izin verilmez" olduğunu hatırladı. : Ben gibi bir şey koyarsanız

echo "[[";
exec("finger user");
echo "]]";

I [[]] ile bitirmek istiyorum. Peki ya hiç hata, sadece sonuç yok.

Alt satır:

Is there something I haven't tried? (in general) Is there a runtime config option I can set to make exec() work?

hızlı not: ben hala hiçbir çıkışı ile özellikle passthru("pwd"), passthru() de çalıştı.

update

yorumlarına dayanarak, ben şu ikisi çalıştı:

$stuff = exec("pwd", $return);

echo "stuff=".$stuff."\n";
echo "return=";
print_r($return);

hangi sonuçları:

stuff=
return=Array
(
)

ve

$stuff = passthru("pwd", $return);

echo "stuff=".$stuff."\n";
echo "return=";
print_r($return);

hangi sonuçları:

stuff=
return=1

1 umutlu sesler, ancak ben henüz istediğim.

Idea

Yani bu (sormayın lütfen) Ben erişimi yok aslında zaten varolan komut bir güncelleme. CGI aracılığıyla adında bir perl senaryo. Cgi üzerinden php yapmak için bir yol (yani perl ile anlaşma ya eski kod güvenmek zorunda değilsiniz) var mı?

4 Cevap

Cevap tüm sayesinde, aşağıdaki nihayet çalıştı budur:

  • Cgi-bin klasörü oluşturun
  • Php script üstüne ekleyin:

     #!/usr/local/bin/php-cgi
    

Bu benim sunucu yapılandırmasına özel bir şey olup olmadığını bilmiyorum, ama exec() çalıştırmak ve sonra ben ne alabilirsiniz.

Ben güvenli modda bunu yapamam korkuyorum. Eğer sunucu yapılandırmasının kontrolünü varsa güvenli modu kaldırmak zorunda.

Ben yerel dosyaları okumak için yuva üzerinde, prizler ağ ile ilgili şeyler için kullanılır güvenemez düşünüyorum.

exec gereği herhangi bir veri döndürmez.

Gibi bir şey deneyin

exec("finger user",$output);

echo "[[";
foreach($output as $key => $value){
echo $value;
}
echo "]]";

Exec bir değer verir, bunu:

$var = exec("finger user");

ve sonra istediğini elde etmek çıkışını ayrıştırmak. Böylece isteğe bağlı bir değişken ekleyerek, dönüş durumunu alabilirsiniz:

exec("finger user", $var, $return_status);

ya da sadece:

echo exec("finger user");

İstediğiniz tüm çıktıyı görmek için ise.