2011-04-29 1 views
1

다른 개발자의 CLI PHP 스크립트를 실행의 일부로 호출해야하는 웹 서비스 엔드 포인트가 있습니다. 의사 코드과 같이 : 이제

function startCLI($input, $output){ 

    $cmd = escapeshellarg('php bin/startcli.php $input $output'); 
    exec($cmd, $output, $ret); 

    if ($output){ 
    print_r($output[0]); 
    } 
} 

, 당신이 요구 될 수 있습니다 왜 $_POST['var']clistart.php 스크립트에 전달하지?

글쎄, 당신은 당신이 해외에서 당신의 레거시 코드를 얻었을 때 당신이 지불하는 것을 얻습니다. 때로는 시스템을 분해하고 다시 사용하는 데 걸리는 시간이 제가 구현해야 할 시간보다 큽니다. 전체 솔루션.

그럼 clistart.php 스크립트에 새 변수를 추가 할 수 없다는 것을 정당화하자. 지옥, 학구적 인 운동으로 받아 들여. 웹에서 요청한 PHP 스크립트에서 실행 된 CLI 스크립트가 실행을 위해 $ _GET 또는 $ _POST에 액세스 할 수 있습니까?

업데이트 : $ _ENV와 getenv()putenv()에 키를 추가하려고 시도했지만 그 결과는 같습니다. 현재 실행중인 스크립트와 해당 작업을 QUEUE하는 자식 스크립트의 환경을 업데이트 할 수 있지만 그런 다음 작업은 자체 $ _ENV 컨텍스트가있는 지속성 프로세스에 의해 실행되므로 해당 변수를 지속적 프로세스의 컨텍스트에 전달하는 방법이없는 것처럼 보입니다.

다른 아이디어가없는 한 데이터베이스 또는 파일 터치를 사용해야합니다.

+3

(print_r ($ GLOBALS)) 이것을 테스트하는 것은 쉬운 일이 아니며 질문을 작성하고 답변을 기다리는 데 소요되는 시간보다 확실히 적은 시간을 소비합니다. –

+0

나는 아직도 뭔가를 놓치고있다. 커맨드 라인에서'clistart.php'를 사용하는 다른 방법의 예를 들려 줄 수 있습니까? –

답변

1

$ _GET 및 $ _POST는 스크립트 웹 요청 컨텍스트의 일부이며 CLI에서 사용할 수 없으므로 자체 컨텍스트가 채워집니다.

+0

사용 된 PHP 바이너리의 유형에 따라 다릅니다. 두 번째 스크립트를 PHP-CGI 변형을 통해 실행하면'QUERY_STRING'이 환경에 있기 때문에'$ _GET'이 채워집니다. $ _POST를 전송하는 것도 가능하지만 약간의 작업이 필요합니다. – mario

0

환경 변수로 배열 내용을 내보내지 않고 - putenv를 통해.

하지만 CLI 스크립트가 HTTP 변수를 조사하는 이유는 무엇입니까? CLI 전용 스크립트는 그것들을 보지 않을 것입니다.

또는 CLI는 CGI 스크립트로 실행되도록 설계된 것을 의미합니까?

+0

CLI는 일반적인 '작업 흐름'응용 프로그램입니다.이 유틸리티는 서버의 리소스에 과세하지 않습니다 (특히 지속적인 서비스이지만 ffmpeg를 실행 함). 단지 서버의 부하에 관심이 있었기 때문에 원래 웹을 염두에두고 작성하지 않았습니다. 나는 웹 컴포넌트를 추가하고있다. $ _POST에서 1-2 변수에 액세스하는 것은 서비스를 종료하고 새 구성으로 다시 가져 오는 대신에 사용할 수 있습니다. –

+0

여기 뭔가가 빠졌습니다. CLI 스크립트가 put() 또는 환경 변수에서 인수로 전달할 수없는 것을 찾는 변수는 무엇입니까? –

+0

이 영구적 인 작업 관리 코드는 오래되어 허약하며 범위를 벗어났습니다. 대기중인 작업을 생성 할 때 새로운 변수를 수신하도록 수정하면 중단 될 가능성이 없습니다. 나는 블랙 박스를 선호하고 그것을 고칠 때까지 내부를 둘러싼 다. :) –

관련 문제