Linux 명령 프롬프트에서 $_GET을 전달하는 PHP
예를 들어, 통상, 다음의 방법으로 액세스 합니다.
http://localhost/index.php?a=1&b=2&c=3
Linux 명령어프롬프트에서 동일한 작업을 수행하려면 어떻게 해야 합니까?
php -e index.php
하지만 $_GET 변수를 전달하면 어떨까요?뭐랄까...php -e index.php --a 1 --b 2 --c 3그게 먹힐 것 같진 않은데
를 사용합니다.php-cgi단순한 것이 아니라 바이너리php명령줄에서 다음과 같이 인수를 전달합니다.
php-cgi -f index.php left=1058 right=1067 class=A language=English
그럼 이게...$_GET:
Array
(
[left] => 1058
[right] => 1067
[class] => A
[language] => English
)
다음과 같이 웹 서버에 의해 설정되는 환경변수를 설정할 수도 있습니다.
REQUEST_URI='/index.php' SCRIPT_NAME='/index.php' php-cgi -f index.php left=1058 right=1067 class=A language=English
일반적으로 명령줄 스크립트에 인수를 전달하려면 다음 중 하나를 사용합니다.argv글로벌 변수 또는 getopt:
// Bash command:
// php -e myscript.php hello
echo $argv[1]; // Prints "hello"
// Bash command:
// php -e myscript.php -f=world
$opts = getopt('f:');
echo $opts['f']; // Prints "world"
$_GET는 HTTP GET 메서드파라미터를 참조하고 있습니다.이러한 파라미터에는 웹 서버가 필요하기 때문에 명령줄에서는 사용할 수 없습니다.
정말로 채우려면$_GET어쨌든, 다음과 같이 할 수 있습니다.
// Bash command:
// export QUERY_STRING="var=value&arg=value" ; php -e myscript.php
parse_str($_SERVER['QUERY_STRING'], $_GET);
print_r($_GET);
/* Outputs:
Array(
[var] => value
[arg] => value
)
*/
또한 특정 스크립트를 실행하여$_GET명령줄을 사용하여 해당 스크립트를 변경할 필요가 없습니다.
export QUERY_STRING="var=value&arg=value" ; \
php -e -r 'parse_str($_SERVER["QUERY_STRING"], $_GET); include "index.php";'
에 대해서도 같은 작업을 할 수 있습니다.$_POST그리고.$_COOKIE뿐만 아니라.
설정할 PHP 파일을 편집할 수 있는 옵션이 없는 경우가 있습니다.$_GETphp-cgi를 설치할 수 없거나 설치하지 않을 수 있습니다.
저는 이것이 그 경우에 가장 적합한 해결책이라는 것을 알았습니다.
php -r '$_GET["key"]="value"; require_once("script.php");'
이를 통해 PHP 파일을 변경하지 않고 플레인(Plain)을 사용할 수 있습니다.php명령어를 입력합니다.php-cgi가 설치되어 있다면 반드시 그것을 사용하지만 이것이 차선책입니다.이 옵션은 언급할 가치가 있다고 생각했습니다.
그-r다음 문자열에서 PHP 코드를 실행하는 것을 의미합니다.$_GET 값을 수동으로 설정한 다음 실행할 파일을 참조합니다.
적절한 폴더(항상 PHP 파일이 있는 폴더는 아니지만)에서 실행할 필요가 있습니다.'Requires' 문장은 파일의 위치가 아닌 상대 URL을 해결하기 위해 명령의 위치를 사용합니다.
Ubuntu에는 php-cgi 바이너리가 없기 때문에 이렇게 했습니다.
% alias php-cgi="sys -r ''syslog_str(syslogode&), array_syslogv, 2)), $_GET; include "syslogv[1]";"% php-cgi test1.120 foo=123<blocks>foo를 123으로 설정합니다. </filters> %cat test1.php<html> foo를 <?php print $_GET['foo']로 설정합니다.>.</filters>
용도:
php file_name.php var1 var2 varN
그럼 다음 설정을 해 주세요.$_GETPHP의 첫 번째 줄에 있는 변수들, 비록 이것은 바람직한 설정 방법은 아니지만$_GET변수에서 나중에 해당 변수를 어떻게 처리하느냐에 따라 문제가 발생할 수 있습니다.
if (isset($argv[1])) {
$_GET['variable_name'] = $argv[1];
}
는, 「」로부터 액세스 할 수 .$argv어레이를 설정합니다. 번째 " " 를 할 수 .array_shift($argv)여러 변수를 처리하려면 첫 번째 엔트리를 삭제합니다.또는 로컬 변수에 로드합니다.
도 한번 써보세요.WGET:
WGET 'http://localhost/index.php?a=1&b=2&c=3'
옵션 1: php-cgi
스크립트를 실행하려면 'php' 대신 'php-cgi'를 사용합니다.이것은 PHP 코드를 사용하기 위해 특별히 수정할 필요가 없기 때문에 가장 간단한 방법입니다.
php-cgi -f /my/script/file.php a=1 b=2 c=3
옵션 2: 웹 서버가 있는 경우
PHP 파일이 웹 서버에 있는 경우 명령줄에서 'wget'을 사용할 수 있습니다.
wget 'http://localhost/my/script/file.php?a=1&b=2&c=3'
또는 다음 중 하나를 선택합니다.
wget -q -O - "http://localhost/my/script/file.php?a=1&b=2&c=3"
PHP 변수 액세스
옵션 1과 옵션2에서는 다음 파라미터에 다음과 같이 접근합니다.
$a = $_GET["a"];
$b = $_GET["b"];
$c = $_GET["c"];
스크립트를 할 수 있는 는, PHP 를 할 수 .$_GET하고 구문을합니다.php -f script.php name1=value1 name2=value2
// When invoking the script via CLI like
// "php -f script.php name1=value1 name2=value2",
// this code will populate $_GET variables called
// "name1" and "name2", so a script designed to
// be called by a web server will work even
// when called by CLI
if (php_sapi_name() == "cli") {
for ($c = 1; $c < $argc; $c++) {
$param = explode("=", $argv[$c], 2);
$_GET[$param[0]] = $param[1]; // $_GET['name1'] = 'value1'
}
}
이 $_GET,$_REQUEST,$_POSTPHP를 사용합니다.
php -a
그런 다음 다음과 같이 입력합니다.
<?php
$_GET['a'] = 1;
$_POST['b'] = 2;
include("/somefolder/some_file_path.php");
이렇게 하면 원하는 변수를 수동으로 설정하고 해당 변수를 설정한 상태에서 PHP 파일을 실행할 수 있습니다.
명령줄에서 다음을 붙여넣습니다.
export QUERY_STRING="param1=abc¶m2=xyz" ;
POST_STRING="name=John&lastname=Doe" ; php -e -r
'parse_str($_SERVER["QUERY_STRING"], $_GET); parse_str($_SERVER["POST_STRING"],
$_POST); include "index.php";'
그냥 이렇게 지나쳐요.
php5 script.php param1=blabla param2=yadayada
그것은 잘 작동한다.$_GET 어레이는 다음과 같습니다.
array(3) {
["script_php"]=>
string(0) ""
["param1"]=>
string(6) "blabla"
["param2"]=>
string(8) "yadayada"
}
용도:
php -r 'parse_str($argv[2],$_GET);include $argv[1];' index.php 'a=1&b=2'
첫 번째 부분은 에일리어스로 만들 수 있습니다.
alias php-get='php -r '\''parse_str($argv[2],$_GET);include $argv[1];'\'
다음으로 간단하게 사용:
php-get some_script.php 'a=1&b=2&c=3'
또는 (Lynx가 있는 경우):
lynx 'http://localhost/index.php?a=1&b=2&c=3'
언급URL : https://stackoverflow.com/questions/4186392/php-passing-get-in-the-linux-command-prompt
'source' 카테고리의 다른 글
| Linux 또는 Windows에서 OS X를 컴파일하는 방법 (0) | 2022.09.05 |
|---|---|
| 문자열의 첫 번째 문자 제거 (0) | 2022.09.05 |
| sqlalchemy ORM 쿼리에서 NOT IN 절을 사용하는 방법 (0) | 2022.09.05 |
| C 콘솔에 바이너리 트리를 그리는 방법 (0) | 2022.09.05 |
| ThreadPoolExecutor의 코어 풀 크기 대 최대 풀 크기 (0) | 2022.09.05 |