웹 페이지를 통해 PHP 스크립트에 매개 변수를 전달하려면 어떻게합니까?


139

웹 페이지가로드 될 때마다 PHP 스크립트를 호출합니다. 그러나 PHP 스크립트를 실행 해야하는 매개 변수가 있습니다 (일반적으로 스크립트를 테스트 할 때 명령 줄을 통과합니다).

페이지가로드 될 때 스크립트가 실행될 때마다이 인수를 전달하려면 어떻게해야합니까?


1
코드를 게시 할 수 있습니까?
SenorAmor

1
명령 줄을 실행 하시겠습니까? 또는 PHP 스크립트?
Christopher Pelayo

알았어, 고마워 아래 답변을 얻었습니다 : $ GET을 사용하고 URL 자체의 매개 변수 값으로 전달하십시오.
Nick

답변:


232

아마도 다음과 같이 명령 행에서 인수를 전달할 것입니다.

php /path/to/wwwpublic/path/to/script.php arg1 arg2

... 그리고 스크립트에서 다음과 같이 액세스하십시오.

<?php
// $argv[0] is '/path/to/wwwpublic/path/to/script.php'
$argument1 = $argv[1];
$argument2 = $argv[2];
?>

HTTP를 통해 인수를 전달할 때 (웹을 통해 스크립트에 액세스) 수행 할 작업은 쿼리 문자열을 사용하고 $ _GET superglobal을 통해 액세스하는 것입니다.

http://yourdomain.com/path/to/script.php?argument1=arg1&argument2=arg2로 이동하십시오.

... 및 액세스 :

<?php
$argument1 = $_GET['argument1'];
$argument2 = $_GET['argument2'];
?>

스크립트를 호출하는 위치 (명령 줄 또는 브라우저)에 관계없이 스크립트를 실행하려면 다음과 같은 것이 필요합니다.

편집 : 의견에서 Cthulhu가 지적한 것처럼 실행중인 환경을 테스트하는 가장 직접적인 방법은 PHP_SAPI 상수 를 사용하는 것 입니다. 이에 따라 코드를 업데이트했습니다.

<?php
if (PHP_SAPI === 'cli') {
    $argument1 = $argv[1];
    $argument2 = $argv[2];
}
else {
    $argument1 = $_GET['argument1'];
    $argument2 = $_GET['argument2'];
}
?>

사용 empty($_GET)합니다. $_GET는 사전 정의 된 값이므로 항상 설정되어 있지만 GET 매개 변수가 설정되어 있지 않으면 비어 있습니다. 빈 문자열과 배열을 empty()반환 false합니다.
Tim S.

실제로 확인하지 않으면 실제로 $_GET스크립트가 명령 줄 컨텍스트에서 호출되면 설정되지 않은 것으로 생각 됩니다. empty()쿼리 문자열없이 웹에서 스크립트에 액세스하면 명령 줄 인수를 찾게되므로 더 많은 알림이 표시됩니다.
Jason

$ argv [0]은 첫 번째 예에서 실제로 arg1이 아니며 "/path/to/wwwpublic/path/to/script.php"입니다. ( php.net/manual/en/reserved.variables.argv.php )
CasualT 2016 년

3
파티에 늦었다는 것을 알고 있지만 올바른 확인 방법은 PHP_SAPI === 'cli'입니다.
크 툴후

1
@emanueledelgrande 나는 당신이 요구하는 것을 따르는 것이 확실하지 않지만 시도 할 것입니다. .htaccessApache 파일-Apache는 지시문을 사용하여 들어오는 요청을 처리 .htaccess한 다음 PHP를 호출하여 요청에 대한 응답을 빌드합니다. 따라서 명령 줄에 .htaccess있으면 완전히 무시됩니다. 웹을 통해 스크립트에 액세스 하고 요청을받은 후 새 쿼리 문자열 인수 를 추가 하려는 경우 일반적으로이 작업을 수행합니다 mod_rewrite. 그래도 질문에 대한 답변이 충분하지 않으면 새로운 질문을 게시하는 것이 좋습니다.
Jason

17
$argv[0]; // the script name
$argv[1]; // the first parameter
$argv[2]; // the second parameter

명령 줄 또는 브라우저에서 호출하는 위치에 관계없이 모든 스크립트를 실행하려면 다음과 같은 것이 필요합니다.

<?php
if ($_GET) {
    $argument1 = $_GET['argument1'];
    $argument2 = $_GET['argument2'];
} else {
    $argument1 = $argv[1];
    $argument2 = $argv[2];
}
?>

명령 줄에서 호출 chmod 755 /var/www/webroot/index.php하여

/usr/bin/php /var/www/webroot/index.php arg1 arg2

브라우저에서 전화하려면

http://www.mydomain.com/index.php?argument1=arg1&argument2=arg2
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.