문제

나는 최근 PHP 라이브러리 대신 명령줄을 사용하여 작업을 수행하기로 선택한 두 가지 상황에 직면했습니다.예를 들어, PHP에서는 다음을 수행합니다.

`curl http://someplace.com`

대신에:

$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://www.example.com/");
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_exec($ch);
curl_close($ch);

다른 상황은 PHP 인터페이스 대신 ImageMagick의 명령줄 인터페이스를 사용하는 것입니다.

내가 이야기한 어떤 사람들은 도서관을 이용하는 것이 더 낫다고 생각합니다.어떤 사람들은 더 좋을수록 더 빠르다고 말하고 다른 사람들은 더 안전하다고 말합니다.

당신의 의견 것입니다?하나를 다른 것보다 사용하면 어떤 이점이 있습니까?

한 가지 이점은 코드가 5줄이 아닌 한 줄만 있다는 것입니다.

도움이 되었습니까?

해결책

나는 항상 라이브러리를 사용합니다.

  1. 두 번 포크 할 필요가 없습니다 (하위 쉘의 경우 한 번, 실행중인 프로그램의 경우) - 따라서 더 빠릅니다.

  2. 보안에 도움이되는 명령 줄 인수를 피하는 것에 대해 걱정할 필요가 없습니다.

코드 줄 수가 걱정 된 경우 5 줄을 함수에서 한 번 작성한 다음 필요할 때 해당 기능을 호출하십시오.

다른 팁

응용 프로그램 실행은 잠재적으로 위험하며 거의 항상 비용이 많이 드는 운영입니다. 프로그램에 전달하는 모든 매개 변수를 올바르게 탈출해야합니다.

새로운 프로세스를 만드는 데 드는 비용도 기존 프로세스에서 간단한 기능을 호출하는 것보다 훨씬 높습니다.

당신이하고있는 일은 지금 잘 작동 할 수 있지만, 응용 프로그램에 수천 명의 동시 사용자가있는 것은 아닙니다. (당신은 그것을 계획하고 있지 않습니까? :))

명령줄 호출 사용과 라이브러리 사용 간의 균형은 애플리케이션 속도와 애플리케이션이 실행되는 컴퓨터 속도입니다.

이와 같은 명령줄 호출을 할 때마다 PHP는 프로세스를 분기해야 합니다(실제로 두 개, 셸과 실행하려는 명령).이것이 의미하는 바는 컴퓨터가 다른 응용 프로그램을 시작해야 한다는 것입니다.이는 많은 시스템 리소스를 소모하는 값비싼 일입니다.사용자(또는 시작 프로세스)가 컴퓨터에서 한 번에 너무 많은 프로그램을 시작하려고 하면 어떻게 되는지 생각해 보십시오.

라이브러리를 사용할 때 프로세스를 포크할 필요가 없습니다.PHP 자체는 다른 응용 프로그램이 수행하는 작업을 수행합니다.

즉, 저는 PHP 라이브러리를 통해 사용할 수 없는 명령줄 애플리케이션을 호출하는 데 능숙한 프로덕션 웹 애플리케이션을 많이 알고 있습니다.응용 프로그램의 트래픽이 적은 부분이거나 자주 방문하지 않는 페이지라면 문제 없이 벗어날 수 있지만 확장할 때가 되면 큰 상처를 받게 됩니다.

고려해야 할 보안도 있습니다.PHP에서 이와 같은 명령을 실행할 때 변수를 사용하여 명령 문자열을 구성하는 경우 다음과 같은 위험이 있습니다.

;rm -rf /

명령에 삽입되면 좋지 않습니다(rm -rf /는 전체 파일 시스템을 삭제합니다).예, 이를 처리하기 위해 입력 변수를 이스케이프할 수 있습니다. 하지만 베테랑 PHP 개발자에게 수동 이스케이프 SQL 쿼리가 어떻게 작동했는지 물어보세요.

간단히 말해서, 당신은 아마도 그것을 피할 수 있지만 그것은 모범 사례가 아니며 미래에 s---가 팬에 부딪힐 때 많은 고통을 겪게 됩니다.

라이센스 : CC-BY-SA ~와 함께 속성
제휴하지 않습니다 StackOverflow
scroll top