> 백엔드 개발 > PHP 튜토리얼 > PHP 기본 CLI 모드 개발에는 어떤 종류의 웹 서버에 대한 자세한 소개가 필요하지 않습니다.

PHP 기본 CLI 모드 개발에는 어떤 종류의 웹 서버에 대한 자세한 소개가 필요하지 않습니다.

黄舟
풀어 주다: 2023-03-06 11:52:01
원래의
1752명이 탐색했습니다.

재인쇄할 경우 출처를 표시해 주세요. PHP 기본: CLI 모드 개발에는 어떤 종류의 웹 서버도 필요하지 않습니다.

PHP CLI 모드 개발에는 어떤 종류의 웹 서버(Apache나 MS IIS 등)도 필요하지 않으므로 다양한 상황에서 CLI를 실행할 수 있습니다.
PHP CLI 스크립트를 실행하는 방법에는 두 가지가 있습니다.

첫 번째 방법은 php -f /path/to/yourfile.php를 사용하는 것입니다. PHP CLI 인터프리터를 호출하고 매개변수를 스크립트에 전달합니다. 이 방법을 사용하려면 먼저 php 인터프리터의 경로를 설정해야 합니다. Windows 플랫폼에서 CLI를 실행하기 전에 c:php 경로와 유사한 명령을 설정해야 합니다. 이 경우에도 CLI 스크립트의 첫 번째 줄의 의미가 손실됩니다. 방법은 권장되지 않습니다.

두 번째 방법은 먼저 chmod+x 을 실행하고(UNIX/Linux 환경) PHP 파일을 실행 권한으로 설정한 다음 CLI 스크립트의 첫 번째 줄에 명령문을 추가하는 것입니다. 헤더(#!/usr/bin/php 또는 PHP CLI 인터프리터 위치와 유사)를 입력하고 명령줄에서 직접 실행합니다. 이는 CLI에서 선호하는 방법이며 권장됩니다.

PHP CLI 스크립트를 작성하는 방법을 살펴보겠습니다.

1. 첫 번째 CLI 스크립트 작성
먼저 PHP CLI를 실행하기 위해 myfile.php라는 PHP 스크립트를 만듭니다. 스크립트는 간단하며 "Hello PHP CLI!"만 표시합니다. 스크립트 코드는 다음과 같습니다.

#!/usr/local/bin/php –q 파일에 실행 권한을 설정합니다: $ chmod 755 myfile.php 그런 다음 다음 명령을 직접 입력하고 Enter를 눌러 실행합니다: $ ./myfile.php Windows 시스템에서 스크립트를 실행하려면 설정할 필요가 없습니다. 파일 속성에서 스크립트를 직접 실행할 수 있습니다. Microsoft Windows [버전 6.0.6000] 저작권 (C) 2006 Microsoft Corporation. 모든 권리 보유. C: >myfile.php PHP CLI 안녕하세요!

다시 한번 말씀드리지만, Windows 플랫폼을 사용 중이라면 CLI 스크립트의 첫 번째 줄에 다음과 같이 php.exe의 올바른 위치를 작성해야 합니다. 또한 CLI 스크립트에 주석문을 추가하려면 다음과 같이 작성해야 합니다. PHP 태그의 주석(CLI 해석은 첫 번째 줄만 인식하고 PHP 태그에 없으면 구문 오류로 간주되기 때문):

#!C:phpphp.exe -q

이런 방식으로 명령줄에 정보가 인쇄되어 CLI 스크립트가 성공적으로 실행되었음을 확인할 수 있습니다.

2. 명령줄에서 매개변수 읽기

명령줄에서 매개변수를 가져오려는 경우 CLI는 $_SERVER['argc'] 및 $_SERVER['argv'']에서 매개변수 수와 값을 가져올 수 있습니다. testargs.php라는 이름의 다른 파일을 만들어 보겠습니다. 스크립트 코드는 다음과 같습니다.

#!C:phpphp.exe –q 명령줄에 다음 코드를 입력하세요: C:UsersJohn>testargs .php Always To Be Best 테스트 획득 매개변수: 4AlwaysToBeBest

"Always To Be Best"라는 단어 문자열을 입력했기 때문에 스크립트 매개변수는 공백으로 구분됩니다. 따라서 PHP는 이를 4개의 매개변수로 계산합니다. 이에 대해서는 아래에서 설명합니다.

$_SERVER["argc"] 배열은 명령줄에서 Enter를 누른 후 입력된 매개변수의 총 개수를 나타내는 정수를 반환합니다.

위 예제의 결과에서 알 수 있듯이 전달된 매개변수 값에 접근하려면 인덱스 1부터 시작해야 합니다. 스크립트 파일 자체가 이미 $_SERVER["argv"][0]인 인덱스 0을 차지하고 있기 때문입니다.

3. I/O 채널 처리

PHP는 원래 키보드로 직접 입력하거나 사용자가 텍스트를 출력하도록 설계되지 않았습니다. 명령줄에서 작업을 수행해야 하는 경우 사용자와 주고받을 수 있어야 하므로 이 디자인을 이해하는 것이 중요합니다.

입출력(I/O) 채널의 개념은 애플리케이션과 사용자 터미널에서 데이터를 주고받기 위해 세 개의 파일 핸들을 제공하는 UNIX 시스템에서 비롯되었습니다.

스크립트의 출력을 파일로 리디렉션할 수 있습니다:

php world.php > outputfile
로그인 후 복사

UNIX 시스템을 사용하는 경우 채널을 사용하여 다른 명령이나 응용 프로그램에 연결할 수도 있습니다. 예:

php world.php | sort.

PHP 5 CLI에는 STDIN, STDOUT 및 STDERR이라는 3가지 시스템 상수를 사용할 수 있는 파일 스트림 핸들이 있습니다. 아래에서는 별도로 소개합니다.

(1) STDIN

STDIN은 표준 입력 또는 표준 입력을 의미합니다. 표준 입력은 터미널에서 모든 데이터를 얻을 수 있습니다.

형식: stdin('php://stdin')

다음 예에서는 사용자 입력을 표시합니다.

#!/usr/local/bin/php -q<?php $file = file_get_contents("php://stdin", "r");echo $file;?>
로그인 후 복사

이 코드는 제공된 모든 입력을 회전시키는 cat 명령과 매우 유사하게 작동합니다. 그러나 현재로서는 매개변수를 수신할 수 없습니다.

STDIN은 PHP의 표준 입력 장치입니다. 이를 사용하면 CLI PHP 스크립트가 더 많은 작업을 수행할 수 있습니다. 예:

#!/usr/local/bin/php -q 스크립트가 실행되면 다음이 표시됩니다: Hello! You 귀하의 이름은 무엇입니까(입력해 주세요): 예를 들어 Raymond를 입력하면 다음과 같이 표시됩니다. Welcome Raymond

(2) STDOUT

STDOUT은 표준 출력 또는 표준 출력이라고 합니다. 표준 출력은 화면에 직접 출력할 수 있습니다(다른 프로그램으로 출력할 수도 있고 STDIN을 사용하여 얻을 수도 있음). PHP CLI 모드에서는 데이터가 STDOUT으로 전송됩니다.

형식: stdout('php://stdout')

데이터 흐름 출력을 위해 PHP 함수를 사용할 수도 있습니다. 다음 예와 같습니다.

#!/usr/local/bin/php –q<?php $STDOUT = fopen(&#39;php://stdout&#39;, &#39;w&#39;);fwrite($STDOUT,"Hello World"); fclose($STDOUT);?>
로그인 후 복사

출력 결과는 다음과 같습니다. Hello World 예를 들어 echo 및 print 명령은 표준 출력으로 인쇄합니다.

아아아아

설명: PHP 태그 외부에 새 줄이 출력되었지만 echo 명령이나 print 명령에 줄 바꿈이 표시되지 않습니다. 실제로 명령 프롬프트는 Output #2.Output #3과 같은 줄에 다시 나타납니다. PHP에 있는 다른 인쇄 기능은 파일에 다시 쓰는 모든 기능과 마찬가지로 이 기능처럼 잘 작동합니다.

아아아아

위 코드는 명시적으로 php://stdout을 출력 채널로 열며, php://output은 일반적으로 php://stdout과 동일한 방식으로 작동합니다.

(3)STDERR

STDERR全称为standard error,在默认情况下会直接发送至用户终端,当使用STDIN文件句柄从其他应用程序没有读取到数据时会生成一个“stdin.stderr”。

格式:stderr (’php://stderr’)

下面的脚本表示如何把一行文本输出到错误流中。

#!/usr/local/bin/php –q<?php $STDERR = fopen(&#39;php://stderr&#39;, &#39;w&#39;);
fwrite($STDERR,"There was an Error"); fclose($STDERR);?>
로그인 후 복사

PHP 5.2可以直接使用STDOUT作为常量,而不是定义上面使用的变量$STDOUT,为了兼容之前版本,我们仍使用了自定义变量,如果您使用的是PHP 5.2,则可以参考STDIN的第二个例子。

4.后台运行CLI

如果正在运行一个进程,而且在退出账户时该进程还不会结束,即在系统后台或背景下运行,那么就可以使用nohup命令。该命令可以在退出账户之后继续运行相应的进程。

nohup在英文中就是不挂起的意思(no hang up)。该命令的一般形式为:

nohup –f scriptname.php &

使用nohup命令提交作业,在默认情况下该作业的所有输出都被重定向到一个名为nohup.out的文件中,除非另外指定了输出文件。

nohup scriptname.php > log.txt &

这样,PHP CLI脚本执行后的结果将输出到log.txt中,我们可以使用tail命令查看该内容:

tail -n50 -f log.txt

现在再来实现两个例子,第一个是每隔10分钟自动生成一个静态HTML文件,并一直执行下去。脚本代码如下:

#! /usr/local/bin/php <?phpset_time_limit(0);
while(true){@fopen("/usr/local/www/data-dist/content/ article_".time().".html","w");
sleep(600);}?>
로그인 후 복사

保存并且退出vi编辑器,然后赋予genHTML.php文件可执行权限:

#>chmod 755 genHTML.php 然后让脚本在后台执行,执行如下命令:$nohup genHTML.php –f &执行上述命令后出现如下提示:[1] 16623

按回车键后将出现shell提示符。上面的提示就是说,所有命令执行的输出信息都会放到nohup.out文件中。

执行上面命令后,每隔10分钟就会在指定的目录生成指定的HTML文件,如article_111990120.html等文件。

如何终止CLI程序的后台运行呢?

可以使用kill命令来终止这个进程,终止进程之前要知道进程的PID号,即进程ID,我们使用ps命令:

www# ps PID TT STAT TIME COMMAND 561 v0 Is+ 0:00.00 
/usr/libexec/getty Pc ttyv0 562 v1 Is+ 0:00.00 /usr/libexec/getty Pc ttyv1 563 v2 Is+ 0:00.00 
/usr/libexec/getty Pc ttyv2 564 v3 Is+ 0:00.00 /usr/libexec/getty Pc ttyv3 565 v4 Is+ 0:00.00 
/usr/libexec/getty Pc ttyv4 566 v5 Is+ 0:00.00 /usr/libexec/getty Pc ttyv5 567 v6 Is+ 0:00.00 
/usr/libexec/getty Pc ttyv6 568 v7 Is+ 0:00.00 /usr/libexec/getty Pc ttyv7 16180 p0 I 0:00.01 
su 16181 p0 S 0:00.06 _su (csh) 16695 p0 R+ 0:00.00 ps 16623 p0 S 0:00.06 
/usr/local/bin/php /usr/local/www/data/genHTML.php 
已经看到PHP的进程ID是:16623,
于是再执行kill命令:$ kill -9 16623 [1]+ Killed nohup /usr/local/www/data/genHTML.php
로그인 후 복사

这时该命令的进程就已经被终止了,再使用ps命令:$ ps PID TT STAT TIME COMMAND 82374 p3 Ss 0:00.17 -bash (bash) 82535 p3 R+ 0:00.00 ps

刚才的PHP CLI脚本已经没有了,如果直接运行ps命令无法看到进程,那么就结合使用ps & apos两个命令来查看。

注意:上面例子必须运行在UNIX或者Linux系统中,如FreeBSD、Redhat Linux等,在Windows环境不支持nohup命令。

   

以上就是PHP基础  CLI模式开发不需要任何一种Web服务器的详细介绍的内容,更多相关内容请关注PHP中文网(www.php.cn)!


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