Komut satırı uygulamalarının yürütülmesi kirli bir şey değildir. Aslında, bu Unix yolu. Ve en çok, örneğin, yeniden uyarlamayı denemekten daha mantıklıdır. Saf PHP kodunda ImageMagick. (Cmdline hatalarının eşitsizliğinden dolayı, iyi bir exec() soyutlaması için bakarsanız imagemagick is a bad example durumu.)
Yapabileceğiniz fazla bir kaydırma yok. En iyi ihtimalle bir yöntemle harici ikili giriş/çıkış özetleyebiliriz:
function exec($args) {
$args = implode(" ", array_map("escapeshellcmd", func_get_args()));
$opts = $this->opts();
return `{$this->bin} {$args} {$opts}`;
}
Yani sadece çağrı -> exec ("- o", "$ file") gerektiğinde. Özel cmdline uygulamasının --argument adlandırma şemasında yerleşik bir sistemi varsa, kodunuz yalnızca özel exec alt formları ile daha da geniralize edilebilir.
Gerçek kullanım durumunuza bağlı olarak, birkaç standart seçeneği saklayabilirsiniz. exec/popen için
function opts() {
$map = array(
"--ignore" => $this->ignore,
"--verbose" => $this->verbose,
"--dir={$this->dir}" => isset($this->dir),
);
return implode(" ", array_keys(array_intersect($map, array(1=>1))));
}
bir çok genel soyutlama sınıfını (komut_satırı programlarının geniş bir yelpazede için): --cmdline seçeneği isimlerinden 1 ilişkiyi = args: Sana neredeyse 1 var pspell, için yaptım muhtemelen mevcut değil.
Çok güzel bir soru. [Kullanıcı Katkı Notları] 'na (http://www.php.net/manual/en/function.exec.php) exec(), çoğunlukla tanımladığınız nitelikte çeşitli yaklaşımlar sunar. oradaki işlevlerin enkarnasyonları, bunlardan biri genellikle işe yarar. Ayrıca birkaç tane daha temiz OOP uygulaması vardır, fakat çok özel durumlara hizmet ederler (Linux'ta işlemlerin başlatılması ve durdurulması gibi). Bunun için "mükemmel" bir uygulamaya sahip olmak gerçekten güzel olurdu. –
"Ortak kullanım durumları" nelerdir? – Artefacto
Eğer bütün bunları listeleyip, onları tanıyabilsem, onları zaten tanıyor muydum? Basit görünen herhangi bir programlama görevinde, düşünmediğiniz pek çok yaygın koşul vardır. "Ortak kullanım durumları" ile kastettiğim tek şey, çözümün daha önce düşünülmesini istediğim ve bir kabuk çağrısını saran tek bir yöntem sınıfı değil. –