2014-07-05 2 views
0

나는 현재 현재 작동하고있는 여러 개의 PHP 스크립트가 있습니다. 주어진 시간에 모든 스크립트를 실행하기 위해 크론 작업을 만들었습니다. 그러나 이제 클라이언트는 트리거/이벤트 유형을 원하므로 스크립트를 실행할 수 있습니다. 그래서 나는 exec 함수를 사용하려고 생각했다.순서대로 PHP 스크립트를 실행

그래서 여기 스크립트가 순서대로 실행되어야합니다. 예 : 2 단계의 스크립트 즉, step1.php & step2.php이 있습니다. 어떻게하면 2 개의 PHP 스크립트를 순서대로 또는 배경 과정에서 실행할 수 있습니까?

나는 결과를 반환 할 수 있습니다 간부 함수의 세번째 매개 변수를 사용하는 것을 읽을 수 있지만 그것은 단지 항상 나에게 그 결과 주었다 string(0) ""

This is what I want to achieve: 
$step1 = exec("php step1.php > /dev/null &", $output, $returnVal); 
if($step1 === TRUE) exec("php step2.php > /dev/null &", $output, $returnVal); 

아니면 자신의 간부를 사용하는 것보다 더 적합한 다른 PHP 함수 ?? ? 정말로 모르겠다. 당신이 step1.php

$step1 = exec("php step1.php > /dev/null &", $output, $returnVal); 

명령의 결과에서 지금 마지막 줄입니다 1 단계를 $ 성공 true 출력을 가지고 있다고 가정

감사합니다 많은 사람

답변

0

도와주세요.

[편집 : 매뉴얼을 잘못 읽었습니다. 원하는 결과에 따라 출력 결과에 대해 $ step1을 확인해야하며 step1.php 스크립트에서 아무 것도 출력하지 않으므로 빈 문자열이 표시 됩니 까? 그러나 다른 모든 것은 정확합니다.]

반환 상태는 확인해야 할 사항은 $returnVal입니다. 이 변수는 (설명서에 따라) 참조에 의해 전달되기 때문에 코드가 있어야한다 :

exec("php step1.php > /dev/null &", $output, $returnVal); 
if($returnVal === TRUE) exec("php step2.php > /dev/null &", $output, $returnVal); 
if($returnVal === TRUE) exec("php step3.php > /dev/null &", $output, $returnVal); 

당신은 심지어 while 루프를 사용할 수 있습니다

$num_steps = 4; //Arbitrary number for example 
$step = 1; 

while($returnVal === TRUE && $i <= $num_steps) { 

    exec('php step'.$step.'.php > /dev/null &', $output, $returnVal); 
    $i++; 
} 

[주의, 내가 테스트하지 않은 위와 그것이 당신이 뭘하고 싶은 적합하지 않을 수 있습니다]

EDIT : 아래의 답변은 '더 나은'입니다. 귀하의 현재 프로세스가 설정되었다고 가정하고 변경할 수 없습니다 (예 : 보유한 시간, 기존 코드를 리팩터링 할 수 없음 등).

0

다른 PHP 스크립트의 코드를 처리하기 위해 PHP 스크립트에서 exec()를 실행할 필요는 없습니다. 이 당신이 원하는 것을 할 수있는 수십 가지 방법이 아마, 그러나 사람은 아마 사용합니다 :

올드 (의사가) :

이 step1.php 및 step2.php의 코드를 기능화

<?php 
    $var = true; 
    return $var; 
?> 

새로운 기능 :

<?php 
    function foo() { 
     $var = true; 
     return $var; 
    } 
?> 

그 스크립트 (코드가 이제 작용하기 때문에, 그것은 당신이 함수를 호출 할 때까지 실행되지 않습니다)을 포함합니다.많은 사용자의 요구 사항에 따라

<?php 
    include('step1.php'); 
    include('step2.php'); 

    if(foo() == true) { 
     bar(); //bar() is found in step2.php 
    } 
?> 

을 다시, 이러한 목표를 달성하기 위해 여러 가지 방법을 :

<?php 
    include('step1.php'); 
    include('step2.php'); 
?> 

지금 당신은 당신이 요구하는 어떤 논리를 필요로하는 함수를 호출 : 그래서, 스크립트에서 단계 스크립트를 호출하는 php 스크립트의 단계 코드에서 수행중인 작업을 설명합니다. 나는 step1과 step2가 무엇을 실행하려고하는지에 대한 세부 사항이 없다는 가정하에이를 가정하고있다.

0

첫 번째 스크립트의 끝에서 두 번째 스크립트를 호출하십시오.

if (... == TRUE) { 
    include('second_script.php'); 
} 

그리고 나서 cron에서 첫 번째 스크립트 만 실행하면됩니다.

+0

안녕하세요 요한, 먼저 시간을내어 주셔서 감사합니다. :). 그러나 스크립트를 포함 시키면 백그라운드에서 실행되지 않습니다. – user2720708

+0

나는 다음과 같은 것을 의미했다 :'$ result = exec ("php two_scripts.php>/dev/null &", $ output);'그래서 리턴 값을 검사 할 필요가 없다. –

관련 문제