ただし、転載元は明記してください: PHP の基礎: CLI モード開発にはいかなる種類の Web サーバーも必要ありません
PHP CLI モードの開発には、いかなる種類の Web サーバー (Apache や MS IIS などを含む) も必要ないため、CLI はさまざまな状況で実行できます。
PHP CLI スクリプトを実行するには 2 つの方法があります。
最初の方法は、php -f /path/to/yourfile.php を使用することです。 PHP CLI インタープリターを呼び出し、パラメーターをスクリプトに渡します。この方法では、まず php インタープリタのパスを設定する必要があります。Windows プラットフォームで CLI を実行する前に、path c:php のようなコマンドを設定する必要があります。これにより、CLI スクリプトの最初の行の意味が失われます。という方法はお勧めできません。
2 番目の方法は、まず 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] Copyright (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 から開始する必要があります。スクリプト自体のファイルはすでにインデックス 0 ($_SERVER["argv"][0]) を占めているためです。
3. I/Oチャネルの処理
PHP は元々、ユーザーからの直接のキーボード入力やテキスト出力で使用するように設計されたものではありません。コマンド ラインでアクションを実行する必要がある場合は、ユーザーとやり取りできる必要があるため、この設計を理解することが重要です。
入出力 (I/O) チャネルの概念は UNIX システムに由来しており、アプリケーションやユーザー端末との間でデータを送受信するための 3 つのファイル ハンドルが提供されます。
スクリプトの出力をファイルにリダイレクトできます:
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 スクリプトが実行されると、次のように表示されます。あなたの名前は何ですか (入力してください): たとえば、Raymond と入力すると、次のように表示されます: ようこそ Raymond
(2) STDOUT
STDOUT は、標準出力または標準出力を表します (PHP CLI モードで print または echo ステートメントを使用する場合は、他のプログラムに出力して取得することもできます)。 、これらのデータは STDOUT に送信されます。
形式: stdout ('php://stdout')
データ フロー出力に PHP 関数を使用することもできます。次の例のように:
#!/usr/local/bin/php –q<?php $STDOUT = fopen('php://stdout', 'w');fwrite($STDOUT,"Hello World"); fclose($STDOUT);?>
出力結果は次のとおりです: Hello World たとえば、echo および print コマンドは標準出力に出力します。
りー説明: PHPタグ外の改行が出力されましたが、echoコマンドやprintコマンドで改行が示されていません。実際、コマンド プロンプトは出力 #2.出力 #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('php://stderr', 'w'); 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)!