> 백엔드 개발 > PHP 문제 > PHP 명령줄 매개변수를 얻는 방법

PHP 명령줄 매개변수를 얻는 방법

醉折花枝作酒筹
풀어 주다: 2023-03-10 07:02:01
앞으로
2279명이 탐색했습니다.

이 글에서는 PHP 명령줄 매개변수를 얻는 방법을 소개합니다. 도움이 필요한 친구들이 모두 참고할 수 있기를 바랍니다.

PHP 명령줄 매개변수를 얻는 방법

PHP 명령줄 매개변수를 얻는 방법

PHP 개발을 사용하는 학생들은 CLI 명령줄을 접하게 될 것입니다. 명령줄을 사용하여 직접 처리하는 것이 더 편리한 일부 예약된 작업이나 일부 스크립트가 있는 경우가 있습니다. 때로는 웹 페이지에서 GET 및 POST와 같은 명령줄 스크립트에 대한 매개변수를 제공해야 합니다. 예를 들어, 특정 날짜에 대한 통계를 작성하는 스크립트에서 날짜를 전달해야 특정 날짜의 일부 데이터를 계산할 수 있습니다. 이러한 유형의 요구 사항은 매우 일반적입니다. 그렇다면 이러한 명령줄 매개 변수를 어떻게 받을 수 있습니까? 오늘은 이 부분을 소개하겠습니다.

$argv 공백으로 구분된 모든 매개변수 목록을 가져옵니다.

이 변수는 아마도 모든 사람이 더 자주 사용하는 매개변수 수신 변수일 것입니다. 스크립트에 전달된 매개변수 배열을 얻기 위해 PHP에서 준비한 고정 변수입니다.

print_r($argv);
// php 如何获取PHP命令行参数.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd 
// Array
// (
//     [0] => 如何获取PHP命令行参数.php
//     [1] => --a=1
//     [2] => -b=2
//     [3] => -c=3
//     [4] => -d=4
//     [5] => --e=5
//     [6] => ccc
//     [7] => ddd
// )
로그인 후 복사

이 배열은 매개변수 사이에 공백으로 구분되어 있습니다. 첫 번째 요소는 현재 실행 중인 스크립트 파일의 이름입니다. 즉, 매개변수 유무에 관계없이 이 변수에는 현재 스크립트 파일 이름을 나타내는 $argv[0]이 있어야 합니다.

일상적인 개발 요구 사항에서는 이 변수를 사용하는 것만으로도 충분합니다. 그러나 이것은 분명히 오늘의 주제가 아닙니다. 위 코드에는 -x=xxx 형식의 매개변수가 많이 있다는 것을 모두가 알고 있습니다. 이 형식의 매개변수는 Linux 명령 옵션과 매우 유사합니까? 오늘 집중할 내용은 명령줄 인수 목록에서 옵션 가져오기입니다.

getopt() 명령줄 매개변수 목록에서 옵션을 가져옵니다

사실 Linux 명령 옵션과 마찬가지로 지정된 명령 값을 가져올 수 있는 매우 간단한 기능입니다. 그리고 명령 옵션 함수는 $argv와 같은 공백으로 구분하는 대신 이러한 명령 옵션을 배열로 캡슐화하여 옵션 이름을 키로, 등호 뒤의 내용을 값으로 사용하여 배열을 형성합니다. 우리가 사용합니다.

// php 如何获取PHP命令行参数.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd 
print_r(getopt('a:b:c:d:e:f:'));
// Array
// (
//     [b] => 2
//     [c] => 3
//     [d] => 4
// )
로그인 후 복사

놀랍고 매우 직관적이지 않나요? b, c, d의 내용을 매우 명확한 형식으로 키-값 배열 형태로 직접 얻었습니다. 어떤 학생들은 a와 e가 어디에 있는지 묻고 싶어합니다. 뒤에 있는 ccc와 ddd는 어떻습니까?

가장 먼저 알아두셔야 할 점은 ccc와 ddd는 표준 옵션 매개변수가 아니라는 것입니다. 즉, 이 함수로 받은 내용은 -로 시작하는 옵션이므로 여기에는 ccc와 ddd가 출력되지 않으며, Option이 아닌 매개변수는 옵션 매개변수 획득을 방해한다는 점을 언급했습니다. ccc 이후에 -로 시작하는 옵션을 계속 추가하면 해당 옵션을 얻을 수 없게 됩니다. --로 시작하는 옵션 매개변수는 어떻습니까? 아래에서 긴 옵션 함수를 직접 살펴보겠습니다.

Long option

// php 如何获取PHP命令行参数.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd 
print_r(getopt('', ['a:','b:','c:','d:','e:','f:']));
// Array
// (
//     [a] => 1
//     [e] => 5
// )
로그인 후 복사

네, getopt() 함수의 두 번째 매개변수는 처음에 이런 long 옵션을 정의하는 것인데, 첫 번째 매개변수는 문자열 형식이고, 두 번째 long 옵션은 옵션 매개변수는 배열 유형입니다. 그런 다음 이들을 결합하면 물론 모든 매개변수 정보를 얻을 수 있습니다!

// php 如何获取PHP命令行参数.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd 
print_r(getopt('a:b:c:d:e:f:', ['a:','b:','c:','d:','e:','f:']));
// Array
// (
//     [a] => 1
//     [b] => 2
//     [c] => 3
//     [d] => 4
//     [e] => 5
// )
로그인 후 복사

네, 매개변수 옵션을 가져오는 데 문제가 없습니다. 신중한 학생들은 getopt() 함수의 매개변수에 정의된 옵션 이름 뒤에 콜론이 있는 이유는 무엇입니까? 여기에는 콜론 규칙이 포함됩니다. 아래에서 직접 읽어보세요.

콜론 규칙

getopt()의 처음 두 매개변수는 모두 옵션 획득을 위한 일련의 규칙을 지원합니다:

  • 문자만(값은 허용되지 않음)

  • 뒤에 콜론이 오는 문자(이 옵션에는 값 )

  • 뒤에 두 개의 콜론 문자가 옵니다. (이 옵션의 값은 선택 사항입니다.)

코드를 통해 직접 살펴보겠습니다.

// 一
// php 如何获取PHP命令行参数.php --a=1 -b=2 -c=3 -d=4 --e=5 ccc ddd 
print_r(getopt('abcdef'));
// Array
// (
//     [b] => 
//     [c] => 
//     [d] => 
// )

// 二
// php 如何获取PHP命令行参数.php -f
print_r(getopt('f::'));
// Array
// (
//     [f] => 
// )
print_r(getopt('f:'));
// Array
// (
// )

// 三
// php 如何获取PHP命令行参数.php -f 22
print_r(getopt('f::'));
// Array
// (
//     [f] => 
// )
print_r(getopt('f:'));
// Array
// (
//     [f] => 22
// )

// 四
// php 如何获取PHP命令行参数.php -f=22
print_r(getopt('f::'));
// Array
// (
//     [f] => 22
// )
print_r(getopt('f:'));
// Array
// (
//     [f] => 22
// )
로그인 후 복사

이 섹션은 꽤 길기 때문에 하나씩 살펴보겠습니다. 첫 번째는 콜론이 없는 abcdef입니다. 반환된 배열에는 키가 포함되어 있지만 값은 없습니다. 위 규칙에 따라 이러한 매개변수 옵션의 값은 허용되지 않습니다.

두 번째 단락은 매개변수를 정의하지만 값을 제공하지 않습니다. 이때 이중 콜론::에는 키 이름이 있고 단일 콜론:에는 아무 것도 없습니다.

세 번째 단락은 공백 형태의 옵션 값입니다. 이중 콜론:: 키 이름은 있지만 값이 없습니다. 단일 콜론: 키 값은 정상입니다.

네 번째 단락은 등호 = 형식의 옵션 값입니다. 단일 콜론과 이중 콜론 모두 정상적으로 키 값을 받습니다.

옵션 매개변수 중단

위에서 매개변수 중단 문제를 언급했습니다. 즉, 옵션 매개변수가 아닌 매개변수가 옵션 매개변수 뒤에 나타나면 getopt()는 더 이상 옵션 매개변수가 아닌 매개변수 뒤의 모든 내용을 얻을 수 없습니다. .

// php 如何获取PHP命令行参数.php -f=22 aa -b=33
// 选项的解析会终止于找到的第一个非选项,之后的任何东西都会被丢弃。
// Array
// (
//     [f] => 22
// )
로그인 후 복사

이 테스트를 통해 후자의 옵션 b를 얻을 수 없음을 분명히 알 수 있습니다. 이때 옵션 매개변수가 어디에 있는지, 어떤 매개변수가 중단되었는지 알고 싶다면 getopt() 함수의 세 번째 매개변수를 이용하면 된다.

// php 如何获取PHP命令行参数.php -f=22 aa -b=33
$optind = null;
getopt('f:b:', [], $optind);
echo $optind, PHP_EOL; // 返回中断位置的索引值,2
echo $argv[$optind], PHP_EOL; // 等同于 $argv 的索引顺序,aa
로그인 후 복사

注释已经写得很清晰了,第三个参数会回调一个参数选项中断位置的索引,并且这个索引是和 $argv 的索引顺序位置一致的。

总结

说实话,在没看文档前真的只知道有一个 $argv 变量可以用来获取命令行脚本的参数,通过这次学习才发现原来还有一个这么强大的选项参数函数。学习的过程非常简单,如何运用到真实的项目中才是关键所在,加油学习,努力实践吧!

测试代码:

https://github.com/zhangyue0503/dev-blog/blob/master/php/202006/source/%E5%A6%82%E4%BD%95%E8%8E%B7%E5%8F%96PHP%E5%91%BD%E4%BB%A4%E8%A1%8C%E5%8F%82%E6%95%B0.php
로그인 후 복사

推荐学习:php视频教程

위 내용은 PHP 명령줄 매개변수를 얻는 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
php
원천:segmentfault.com
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿