크론 작업을 처음 사용하는데 이것이 효과가 있을지 잘 모르겠습니다.
보안을 위해 특정 GET 값(사용자 이름, 비밀번호, 보안 코드)을 찾는 한 페이지짜리 스크립트를 만들어서 컴퓨터와 이 세 가지를 모두 아는 사람만 명령을 실행할 수 있도록 하는 것이 어떨까 생각했습니다.
스크립트를 만들었고 브라우저에서 실행할 수 있지만 GET 값으로 크론 작업을 실행할 수 있나요?
예를 들어 제가
* 3 * * * /path_to_script/cronjob.php?username=test&password=test&code=1234
이게 가능한가요?
웹 서버를 통해 스크립트를 호출할 때만 $_GET[]
& $_POST[]
연관 배열이 초기화됩니다. 명령줄을 통해 호출되는 경우 매개변수는 C와 마찬가지로 $argv
배열에 전달됩니다.
스크립트에 전달된 모든 인수의 배열을 포함합니다. 명령줄에서 실행할 때 스크립트에 전달된 모든 인수의 배열을 포함합니다.
귀하의 명령은 다음과 같습니다:
* 3 * * * /path_to_script/cronjob.php username=test password=test code=1234
그런 다음 parse_str()를 사용하여 매개변수를 설정하고 액세스합니다:
<?php
var_dump($argv);
/*
array(4) {
[0]=>
string(27) "/path_to_script/cronjob.php"
[1]=>
string(13) "username=test"
[2]=>
string(13) "password=test"
[3]=>
string(9) "code=1234"
}
*/
parse_str($argv[3], $params);
echo $params['code']; // 1234
질문에 대한 직접적인 답변은 아니지만 더 나은 해결책이라고 생각합니다:
크론을 제외한 다른 사람이 스크립트를 실행하지 못하게 하려면 웹 루트 외부에 배치하세요. 이렇게 하면 웹 서버를 통한 액세스가 전혀 없습니다.
특수 사용자로도 명령을 실행해야하는 경우 GET
을 사용하지 말고 사용자가 로그인하고 로그인 한 세션 (특정 설정 세션 변수...)을 확인한 다음 해당 페이지에만 스크립트를 포함 시키십시오.
공개적으로 액세스할 수 있는 스크립트는 다음과 같습니다:
session_start();
if (isset($_SESSION['user']))
{
include '/path/to/script/outside/of/web-root';
}
else
{
die('No access.');
}
* 3 * * * /path_to_script/cronjob.php?username=test&password=test&code=1234
이 작동하지 않습니다.
* 3 * * * /path_to_script/cronjob.php username=test password=test code=1234
이 기능은
또한 parse_str () 함수 값을 사용해야 할 수 있으며,
$str = "first=value&arr[]=foo+bar&arr[]=baz";
parse_str($str);
echo $first; // value
echo $arr[0]; // foo bar
echo $arr[1]; // baz
난 이미 몇 살 수 있다는 사실을 알고 있지만 이 게시물을 이 번호요 공유하지는 그러니까 나한테 너무 다른 사람을 돕기 위해 내 발견사항 나를 가장 잘 알려져 있다.
시작했는데 오프하도록 컬 요청을 통해 실행할 수 있는 20 분마다:
*/20 * * * * /usr/local/bin/curl --silent 'https://demo.tld/app/stats/?update&key=1234'
내가 사용하는 방법은 해당 페이지를 보라 내가 표시됨과 apiu 트리거하여 일부 다른 웹 사이트 및 json 으로 잡고 있는 통계 업데이트하십시오 수집하십시오 수만 있고 양식이 내거냐.
이후 많은 대역폭을 (go for php 기반 위에 크론조프 기본적으로 두 가지 방향에서 싶었다 크론조프 실행했음 문제가 있지만 붙여넣습니다 매개변수입니다. 이 게시물을 볼 수 있는 순간은 내가 도왔으매 구해줬으니 날:)
*/20 * * * * /usr/local/bin/php /home/path/to/public_html/app/stats/index.php update key=1234
이제 경로와 파일 이름을 알 수 있듯이 (이네스.프프) 에 따라 다음 매개변수입니다 (없이? 및 &, & # 39, s).
하지만 이렇게 확보하십시오 크론조프 apc® you& # 39 만 t 의 전달할 수 있기 때문에, re 반쯤 won& 매개변수입니다 # 39 를 통해 ',' $ _GET. # 39, ve 코딩할 때 약간 귀찮은 원하는거요 you& 스크립트에 대한 검사를 통해 '$ _GET' 키!
그래서, 어떻게 작동합니까 그리고는요? 단순 (적어도 일부 연구 후) 을 매개 변수를 통해 '$ argv' 이라는 변수에 스크립트입니다 크론조프 패스.
그래서 내가 알고 있는 '검색' $ $ _GET 메서드입니다 변형하려면 argv '에' 있습니다.
내가 찾은 다음 솔루션이므로 which we want to execute argv '때' 만 $ 의 경우, 그래서 '이 실제로 설정되었습니다 랩된 이세' 확인:
if( isset( $argv ) )
{
foreach( $argv as $arg ) {
$e = explode( '=', $arg );
if( count($e) == 2 )
$_GET[$e[0]] = $e[1];
else
$_GET[$e[0]] = 0;
}
}
너무 ᄋ "이번 수 있습니다:)
내가 찾을 때 유용 정보기술 (it) '에서' 기능을 사용하려면 가토프트 () 또는 콘솔 함장님이요 데릭쉐퍼드와 매개변수입니다 cron
>. 이 함수는 반환되므로 배열입니다 옵션 / 쌍, 또는 거짓값 인수 실패 시.
$options = getopt("f:hp:");
var_dump($options);
shell> php example.php -fvalue -h
위의 예제를 는 출력:
array(2) {
["f"]=>
string(5) "value"
["h"]=>
bool(false)
}
자세한 옵션 및 다른 매개변수입니다 전체 설명서 살펴보겠습니다.