Nasıl bir PHP komut dosyası harici bir editöre kaçış yoktur ve sonradan geri?

6 Cevap php

Özellikle ben belirli bir noktada kullanıcı girişi gerektiren bir PHP komut satırı komut dosyası var. Ben (örneğin vi gibi) harici bir düzenleyici yürütmek mümkün istiyorum, ve komut başlamadan önce yürütme bitirmek için düzenleyici için beklerdi.

Benim temel fikir olarak düzenleme yapmak için geçici bir dosya kullanmak ve sonrasında dosyanın içeriğini almak için oldu. Çizgisinde bir şey:

$filename = '/tmp/script_' . time() . '.tmp';

get_user_input ($filename);

$input = file_get_contents ($filename);
unlink ($filename);

Bu bir PHP komut satırı komut, ancak ben aynı etkiyi elde etmek için istihdam edilebilir kabuk komut dosyası hile çeşit var olduğunu umuyorum mümkün olmadığını sanıyorum.

Bu diğer betik dillerde nasıl ulaşılabileceği için önerileri de daha fazla kabul edilir.

6 Cevap

Sen terminaline editörün çıktısını yönlendirebilirsiniz:

system("vim > `tty`");

Ben sadece bu çalıştı ve pencereler çalışıyor, bu nedenle muhtemelen vi veya ne olursa olsun app linux üzerinde istediğiniz ile çoğaltabilirsiniz.

Tuşu (bu durumda) notepad çalışırken exec () php sürecini asılı olmasıdır.

<?php

exec('notepad c:\test'); 
echo file_get_contents('c:\test');

?>

$ php -r test.php

Düzenleme: girişimi gösterir ve bstark işaret ettiği gibi, benim not defteri testi böylece tüm ince yeni bir pencere patlar, ama takmak için hiçbir terminali vardır, çünkü konsol modunda çalışan herhangi bir editör başarısız olur.

Söyleniyor, ben exec ('nano test') ile bir linux kutunun üzerinde çalıştı; echo file_get_contents ('test'); ve vi gibi, sadece bir şey görüntülemeden çalışır gibi kötü başarısız değil. Kapatın ve dosyayı kaydetmek için basın "ctrl-X, y", bazı şeyler yazabilirsiniz, ve sonra php komut devam etti ve ben ne yazmıştı görüntülenir. Neyse .. Ben bu yüzden yeni cevap geliyor, doğru çözüm bulundu

I system('vi'); alınamıyor veya exec('vi') Benim için düzgün çalışması için. Ben terminalden, Mac OS X kulüpler:

~ > php -a
Interactive mode enabled

<?php

system('vi');
Vim: Warning: Output is not to a terminal

Bu noktada ben vi, ancak Terminal penceresi tüm bu yansıtmak için güncelleme yok olmak görünür.

Üzerinde çalıştığı terminali php vi bağlamak hiç de mümkün olmadığını bilmiyorum, ama hızlı ve kolay bir çözüm aynı terminaldeki bir ekran editörü kullanmak değildir.

Sen sistemi ("xterm-e vi") (terminal app adı ile xterm değiştirin) gibi, bu tür ed (muhtemelen bu istemiyorum) gibi bir satır editörü kullanabilirsiniz veya yeni bir pencere açmak ya.

Perlde, sistem ("vi") sadece çalışır, perl fantezi ardışık / tamponlama php yapar tür yapmaz çünkü: eklemek için düzenlenebilir.

Bu yüzden kolay bir çözüm varken çılgın şeyler denemek için bize yol bir dosya yazma senin fikrin gibi görünüyor :)

<?php

$out = fopen('php://stdout', 'w+');
$in = fopen('php://stdin', 'r+');

fwrite($out, "foo?\n");
$var = fread($in, 1024);
echo strtoupper($var);

Bu üretim, bir şey (1024 bayt veya bence satır sonu) alıncaya kadar fread () çağrısı php süreci askıda kalacaktır:

$ php test.php
foo?
bar <= my input
BAR