2016-08-18 2 views
-1

PHP 파일 (file1.php)에 함수가 있습니다. 이 기능을 호출하기 위해 cronjob을 사용하려고합니다. 내 cron 작업 명령은 다음과 같습니다 (즉, 문제가 함수 자체와 함께 표시되지 않습니다cronjob을 사용하여 PHP 파일에서 함수를 실행하십시오.

참고로
php /home/name/public_html/file1.php mail1 

, 함수 코드는 다음과 파일에서 직접 호출 할 때 작동

function mail1($runTotal, $accountArray){ 
    $to = $accountArray[0]['phoneNumber'] . '@vzwpix.com'; 
    $subject = ''; 
    $msg = "You have spent $" . $runTotal . " of $1,750 since the beginning of the month.;; 
    $msg = wordwrap($msg); 
    $headers = 'From: [email protected]'; 
    if (mail($to, $subject, $msg, $headers)) { 
     echo $msg . " sent to " . $to; 
    } 
} 
.

잘못된 방법으로 함수를 호출합니까?

+0

저는 http://php.net/manual/en/reserved.variables.argv.php를 사용하고 전달 된 값을 기반으로 PHP 스크립트로 함수를 실행합니다. 예 : 그래도 그 함수에 대한 매개 변수 값을 어떻게 얻었는지 모르겠다면 ... – chris85

+0

나는 내가 해석하는 것만 큼 쉽지 않다고 생각합니다. 할머니와 할머니를 이해하는 사람을 위해 좀 더 자세히 설명해 주시겠습니까? – Jepf

+0

파일 이름 다음에 함수 이름을 넣으면 해당 함수가 호출된다고 가정합니다. 이 기능을 설명하는 PHP 문서에는 없습니다. –

답변

1

PHP 스크립트를 호출하려는 함수의 이름을 전달하면 해당 스크립트 내에서 함수가 자동으로 실행되지 않습니다. 스크립트 파일에는 다음과 같은 논리가 필요합니다. ord에 전달 된 명령 행 인수에 응답한다. 제대로 실행됩니다.

file1.php에는 여러 함수가 정의되어 있다고 가정 해 보겠습니다. 일련의 함수 정의 - 함수 외부의 코드는 없습니다. 명령 줄 ($ php file1.php)에서 해당 파일을 실행하면 PHP는 해당 파일을로드하고 함수를 구문 분석하지만 어떤 파일이든 은 아무 것도 호출하지 않으므로이 호출되면 스크립트는 끝까지 실행됩니다 완료 될 것이고 실제로 아무 일도 일어나지 않았을 것입니다.

그래서 함수 중 하나를 실행하려면 스크립트는 제공된 모든 명령 줄 인수를 검사 한 다음 적절하게 반응해야합니다.

PHP에서 변수는 먼저 실행 된 파일의 이름과 명령 줄 인수가 순서대로 포함 된 배열입니다. 따옴표로 묶거나 제대로 이스케이프 처리되지 않은 경우 공백은 명령 행 인수의 분리 자로 사용됩니다. 명령이 명령 줄을 통해 실행 된 경우이 변수는 루트 범위 *에서 사용할 수 있습니다.

명령 줄에서 실행할 때 스크립트에 전달 된 모든 인수의 배열을 포함합니다 :

다음은 $argv 변수의 PHP의 설명이다.

참고 : 첫 번째 인수 $ argv [0]은 항상 스크립트를 실행하는 데 사용 된 이름입니다.

당신이 php file1.php send mail --dry-run를 실행하면

는 다음 $argv 변수는 (JSON에 여기에 표시) 할 것입니다 : ["file1.php", "send", "mail", "--dry-run"].

file1.php 파일 코드 끝 부분에 변수를보고 적절한 조치를 취하는 것입니다. 귀하의 질문에 설명 된 특정 경우, 파일의 마지막에 이런 식으로 뭔가를 추가하려고 : 궁극적으로 재미 php file1.php mail1, 어느 때 CRON 작업이 무엇을하고 있는지 지금

//If we have a command line argument 
if (!empty($argv[1])) { 
    switch ($argv[1]) { 
     case "mail1": 
      mail1(); //Call our mail() function 
      echo "\n\nCalled function mail1()\n\n"; //Print what we did to the console 
      break; 
    } 
} 

, 그 첫 번째 인수 ($argv[1]) "mail1"이므로 switch 문에 mail1 대소 문자가 실행되어 사용자의 mail1 함수를 호출하고 콘솔에 도움이되는 메모를 작성하므로 사용자가 요청한 내용을 알 수 있습니다.

유용한 링크 :이 도움이

희망!

* 루트 범위로 볼 때 전역 변수가 아니므로 함수 또는 클래스 내에서 액세스 할 수는 있지만 전역에 액세스 할 수는 없지만 액세스 할 수는 없습니다. 위의 코드 예제에서는 해당 코드가 함수 또는 클래스 외부에 있으므로 에 액세스 할 수 있습니다.

관련 문제