명령 줄 응용 프로그램을 실행해도 아무런 문제가 없습니다. 사실 유닉스 방식이다. 대부분의 경우 예를 들어 다시 구현하려고 시도하는 것보다 훨씬 건전합니다. 순수한 PHP 코드의 ImageMagick. (좋은 cmd (abstraction)을 찾으려면 cmdline args의 차이로 인해 imagemagick is a bad example 대소 문자를 찾으십시오.
많은 랩핑 작업을 수행 할 수 없습니다. 기껏해야 당신은 방법에 외부 바이너리 인 -/출력을 요약 할 수 있습니다 :
function exec($args) {
$args = implode(" ", array_map("escapeshellcmd", func_get_args()));
$opts = $this->opts();
return `{$this->bin} {$args} {$opts}`;
}
그래서 그냥 전화 -> 간부 ("- O", "$ 파일")를 필요한 곳. 특정 cmdline 앱에 고유 한 시스템이있는 경우 - 특권 명명법에 특수한 exec 서브 메쏘드로 코드를 추가 할 수 있습니다.
실제 사용 사례에 따라 몇 가지 표준 옵션을 숨길 수 있습니다. 간부 /는 popen에 대한
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))));
}
매우 일반적인 추상화 클래스 (있는 CmdLine 프로그램의 광범위한) : --cmdline하는 옵션 이름의 1의 관계 = 인수 : 나는 당신이 거의 1이 pspell 위해 이런 짓을 아마 존재하지 않을 것이다.
아주 좋은 질문입니다. exec()에 대한 [User Contributed Notes] (http://www.php.net/manual/en/function.exec.php)는 다양한 접근법을 제공합니다. 주로 대부분의 품질에 대해 설명합니다. 기능의 화신, 그 중 하나가 일반적으로 작동합니다. 몇 가지 클리너 OOP 구현이 있지만 매우 구체적인 경우 (예 : Linux에서 프로세스 시작 및 중지)를 제공합니다. 이를 위해 "완벽한"구현을하는 것이 정말 좋을 것입니다. –
"일반적인 사용 사례"는 무엇입니까? – Artefacto
글쎄, 만약 내가 그 모든 것들을 나열하고 내가 그들을 알고 있다고 확신 할 수 있다면, 나는 누군가가 이미 그것을 구현했는지 묻는 대신에 이것을 직접 구현할 것이다. 단순한 것처럼 보이는 프로그래밍 작업에는 고려하지 않는 수많은 공통 조건이 있습니다. 필자가 "공통적 인 사용 사례"로 말한 것은 솔루션을 이미 생각하고, 쉘 호출을 래핑하는 단일 메서드 클래스가 아니라는 것입니다. –