CURL 및 PHP-CLI 적용 [CLI]
CLI的普通应用
什么是PHP-CLI
php-cli是php Command Line Interface
的简称,即PHP命令行接口,在windows和linux下都是支持PHP-CLI模式的;
为什么要使用PHP-CLI
- 多线程应用
- 定时执行php程序
- 开发桌面程序 (使用PHP-CLI和GTK包即可开发桌面,但没人会用PHP来编写桌面程序的)
- 编写PHP的shell脚本
判断PHP运行模式
PHP的运行模式远远不止apache和cli,还包括:olserver, apache, apache2filter, apache2handler, caudium, cgi (until PHP 5.3), cgi-fcgi, cli, continuity, embed, isapi, litespeed, milter, nsapi, phttpd, pi3web, roxen, thttpd, tux, and webjames.
<code>echo php_sapi_name(); //如果是CLI模式下访问就输出CLI,如果是Apache就是apache2handler... </code>
PHP-CLI 内置参数
<code>D:\wamp\bin\php\php5.3.8>php -help Usage: php [options] [-f] <file> [--] [args...] php [options] -r <code> [--] [args...] php [options] [-B <begin_code>] -R <code> [-E <end_code>] [--] [args...] php [options] [-B <begin_code>] -F <file> [-E <end_code>] [--] [args...] php [options] -- [args...] php [options] -a -a Run interactively -c <path>|<file> Look for php.ini file in this directory -n No php.ini file will be used -d foo[=bar] Define INI entry foo with value 'bar' -e Generate extended information for debugger/profiler -f <file> Parse and execute <file>. -h This help -i PHP information -l Syntax check only (lint) -m Show compiled in modules -r <code> Run PHP <code> without using script tags <?..?> -B <begin_code> Run PHP <begin_code> before processing input lines -R <code> Run PHP <code> for every input line -F <file> Parse and execute <file> for every input line -E <end_code> Run PHP <end_code> after processing all input lines -H Hide any passed arguments from external tools. -s Output HTML syntax highlighted source. -v Version number -w Output source with stripped comments and whitespace. -z <file> Load Zend extension <file>. args... Arguments passed to script. Use -- args when first argument starts with - or script is read from stdin --ini Show configuration file names --rf <name> Show information about function <name>. --rc <name> Show information about class <name>. --re <name> Show information about extension <name>. --ri <name> Show configuration for extension <name>.</code>
- 运行指定的php文件:
<code><?php echo 'this is php-cli' ?></code>
<code># php /var/www/html/test.php this is a php-cli [root@semple html]# php -f 'test.php' this is a php-cli</code>
- 在命令行直接运行 PHP 代码
<code>D:\wamp\bin\php\php5.3.8>php -r "echo 'hello world';" hello world</code>
注意: 在运行这些php代码时没有开始和结束的标记符!加上
-r
参数后,这些标记符是不需要的,加上它们会导致语法错误。
- 通过标准输入(stdin)提供需要运行的 PHP 代码
<code>// ask for input fwrite(STDOUT, "Enter your name: "); // get input $name = trim(fgets(STDIN)); // write input back fwrite(STDOUT, "Hello, $name!");</code>
<code>D:\wamp\www>php test.php Enter your name: D:\wamp\www>php test.php Enter your name: zhouzhou Hello, zhouzhou!</code>
获取自定义参数
<code>print_r($argv); //获取具体的参数; print_r($argc); //获取参数的数目;</code>
<code>D:\wamp\www>php test.php #本身执行的php文件就作为一个参数; Array ( [0] => test.php ) 1 D:\wamp\www>php test.php arg1 arg2 arg3 arg4 Array ( [0] => test.php [1] => arg1 [2] => arg2 [3] => arg3 [4] => arg4 ) 5</code>
argv
和argc
也分别可以在$_SERVER数组中得到
<code><?php $args = getopt('g:m:a:'); //只能是单个单词,如果不是单个单词就会出错; print_r($args); ?></code>
<code>D:\wamp\www>php test.php -g group -m module -a age Array ( [g] => group [m] => module [a] => age )</code>
PHP-CLI在框架中的应用
首先要清楚,大多数PHP-CLI都是在crontab中应用,俗称'跑脚本'。既然是'跑',那肯定是一个庞大的IO开销,这个时候放在框架环境中来跑这个脚本的话,至少我的使用过程中遇见过'内存泄漏',php这种语言基本上不会遇见的情况就是在这种情况下遇见的;
- 在CI框架中应用
<code># php /var/www/html/web2/index.php welcome test 这个是在ci里面执行的welcome控制器里面的test方法,后面的以此类推;</code>
还可以代入变量
<code><?php class Tools extends CI_Controller { public function message($to = 'World') { echo "Hello {$to}!".PHP_EOL; } } ?></code>
<code>$ cd /path/to/project; $ php index.php tools message # Hello John Smith!。</code>
- 在TP框架中的应用
在thinkphp中对CLI的支持并非很好,但我们可以通过$argv
在框架运行之初就自动组成相应的g,m,a等get变量;甚至另开其一个只能是cli模式访问文件
<code>//如果是CLI模式 if(php_sapi_name() === 'cli'){ //检测CLI访问时没有带自定义参数; $path = isset($argv[1]) ? $argv[1] : ''; $depr = '/'; if (!empty($path)) { $params = explode($depr , trim($path , $depr)); } !empty($params) ? $_GET['g'] = array_shift($params) : ""; !empty($params) ? $_GET['m'] = array_shift($params) : ""; !empty($params) ? $_GET['a'] = array_shift($params) : ""; if ($params and count($params) > 1) { // 解析剩余参数 并采用GET方式获取 preg_replace('@(\w+),([^,\/]+)@e' , '$_GET[\'\\1\']="\\2";' , implode(',' , $params)); } /* D:\wamp\www\sx>D:\wamp\bin\php\php5.3.8/php cli.php group/module/action/a1/v1/a2/v2 Array ( [g] => group [m] => module [a] => action [a1] => v1 [a2] => v2 ) */ // print_r($_GET); // die; }</code>
PHP-CLI来写shell脚本
PHP与Linux命令交互的几个函数
exec
<code>string exec ( string $command [, array &$output [, int &$return_var ]] ) echo exec('mkdir -p zhouzhou/1/2/3/') ."\n"; //创建目录树 echo exec('ls -l',$fileList) ; //本句只能输出最后一条,但如果有第二个参数的话,就可以把输出的结果作为数组元素扔进去; echo "<pre />"; print_r($fileList); //把所有ls -l的结果都给了$fileList; echo "<pre />"; die;</code>
shell_exec
<code>string shell_exec ( string $cmd ) $fileList = shell_exec('ls -l'); //$fileList是一个string格式,就等于linux命令在终端输出的格式,保留了\s\n等换行符</code>
system
<code>string system ( string $command [, int &$return_var ] ) $fileList = system('ls -l') ; //本句只能输出最后一条,但如果有第二个参数的话,就可以把输出的结果作为数组元素扔进去;</code>
passthru
<code>void passthru ( string $command [, int &$return_var ] ) passthru('ls -l'); //直接执行并输出</code>
popen
<code>resource popen ( string $command , string $mode ) /* 返回一个和 fopen() 所返回的相同的文件指针,只不过它是单向的(只能用于读或写)并且必须用 pclose() 来关闭。此指针可以用于 fgets(),fgets() 和 fwrite()。 当模式为 'r',返回的文件指针等于命里的 STDOUT,当模式为 'w',返回的文件指针等于命令的 STDIN。 如果出错返回 FALSE。 */ $fp = popen('ls -l',"r"); //popen打一个进程通道 while (!feof($fp)) { $out = fgets($fp, 4096); echo $out; //输出的结果和passthru是一样的;不过要循环的取出来; } pclose($fp); </code>
proc_open
<code>resource proc_open ( string $cmd , array $descriptorspec , array &$pipes [, string $cwd [, array $env [, array $other_options ]]] ) $test = "ls"; $array = array( array("pipe","r"), //标准输入 array("pipe","w"), //标准输出内容 array("pipe","w") //标准输出错误 ); $fp = proc_open($test,$array,$pipes); //打开一个进程通道 echo stream_get_contents($pipes[1]); //为什么是$pipes[1],因为1是输出内容 proc_close($fp); //类似 popen() 函数, 但是 proc_open() 提供了更加强大的控制程序执行的能力。</code>
以上就介绍了CURL与PHP-CLI的应用【CLI篇】,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

핫 AI 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

AI Hentai Generator
AI Hentai를 무료로 생성하십시오.

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











PHP 8.4는 상당한 양의 기능 중단 및 제거를 통해 몇 가지 새로운 기능, 보안 개선 및 성능 개선을 제공합니다. 이 가이드에서는 Ubuntu, Debian 또는 해당 파생 제품에서 PHP 8.4를 설치하거나 PHP 8.4로 업그레이드하는 방법을 설명합니다.

VS Code라고도 알려진 Visual Studio Code는 모든 주요 운영 체제에서 사용할 수 있는 무료 소스 코드 편집기 또는 통합 개발 환경(IDE)입니다. 다양한 프로그래밍 언어에 대한 대규모 확장 모음을 통해 VS Code는

숙련된 PHP 개발자라면 이미 그런 일을 해왔다는 느낌을 받을 것입니다. 귀하는 상당한 수의 애플리케이션을 개발하고, 수백만 줄의 코드를 디버깅하고, 여러 스크립트를 수정하여 작업을 수행했습니다.

이 튜토리얼은 PHP를 사용하여 XML 문서를 효율적으로 처리하는 방법을 보여줍니다. XML (Extensible Markup Language)은 인간의 가독성과 기계 구문 분석을 위해 설계된 다목적 텍스트 기반 마크 업 언어입니다. 일반적으로 데이터 저장 AN에 사용됩니다

JWT는 주로 신분증 인증 및 정보 교환을 위해 당사자간에 정보를 안전하게 전송하는 데 사용되는 JSON을 기반으로 한 개방형 표준입니다. 1. JWT는 헤더, 페이로드 및 서명의 세 부분으로 구성됩니다. 2. JWT의 작업 원칙에는 세 가지 단계가 포함됩니다. JWT 생성, JWT 확인 및 Parsing Payload. 3. PHP에서 인증에 JWT를 사용하면 JWT를 생성하고 확인할 수 있으며 사용자 역할 및 권한 정보가 고급 사용에 포함될 수 있습니다. 4. 일반적인 오류에는 서명 검증 실패, 토큰 만료 및 대형 페이로드가 포함됩니다. 디버깅 기술에는 디버깅 도구 및 로깅 사용이 포함됩니다. 5. 성능 최적화 및 모범 사례에는 적절한 시그니처 알고리즘 사용, 타당성 기간 설정 합리적,

문자열은 문자, 숫자 및 기호를 포함하여 일련의 문자입니다. 이 튜토리얼은 다른 방법을 사용하여 PHP의 주어진 문자열의 모음 수를 계산하는 방법을 배웁니다. 영어의 모음은 A, E, I, O, U이며 대문자 또는 소문자 일 수 있습니다. 모음이란 무엇입니까? 모음은 특정 발음을 나타내는 알파벳 문자입니다. 대문자와 소문자를 포함하여 영어에는 5 개의 모음이 있습니다. a, e, i, o, u 예 1 입력 : String = "Tutorialspoint" 출력 : 6 설명하다 문자열의 "Tutorialspoint"의 모음은 u, o, i, a, o, i입니다. 총 6 개의 위안이 있습니다

정적 바인딩 (정적 : :)는 PHP에서 늦은 정적 바인딩 (LSB)을 구현하여 클래스를 정의하는 대신 정적 컨텍스트에서 호출 클래스를 참조 할 수 있습니다. 1) 구문 분석 프로세스는 런타임에 수행됩니다. 2) 상속 관계에서 통화 클래스를 찾아보십시오. 3) 성능 오버 헤드를 가져올 수 있습니다.

PHP의 마법 방법은 무엇입니까? PHP의 마법 방법은 다음과 같습니다. 1. \ _ \ _ Construct, 객체를 초기화하는 데 사용됩니다. 2. \ _ \ _ 파괴, 자원을 정리하는 데 사용됩니다. 3. \ _ \ _ 호출, 존재하지 않는 메소드 호출을 처리하십시오. 4. \ _ \ _ get, 동적 속성 액세스를 구현하십시오. 5. \ _ \ _ Set, 동적 속성 설정을 구현하십시오. 이러한 방법은 특정 상황에서 자동으로 호출되어 코드 유연성과 효율성을 향상시킵니다.
