この記事では、PHP デーモン プロセスの 2 つの一般的な実装方法を主に紹介し、PHP デーモン プロセスの原理、関連する実装方法、および運用上の注意事項を具体的な例の形式で分析します。 PHP の説明 デーモン プロセスには 2 つの一般的な実装があります。参考のために皆さんと共有してください。詳細は次のとおりです:
最初の方法は、nohup と & を一緒に使用することです。 コマンドの後にアンパサンドを追加すると、コンソールを占有することなく、開始されたプロセスをバックグラウンドで実行できます。 ここでは、while 無限ループを使用して説明します。
<?php while(true){ echo time().PHP_EOL; sleep(3); }
& メソッドを使用してプロセスを開始します
[root@localhost php]# php deadloop.php & [1] 3454 [root@localhost php]# ps aux | grep 3454 root 3454 0.0 0.8 284544 8452 pts/0 T 18:06 0:00 php deadloop.php root 3456 0.0 0.0 103316 896 pts/0 S+ 18:08 0:00 grep 3454 [1]+ Stopped php deadloop.php [root@localhost php]#
プロセスがコンソールを占有していないことがわかります。このとき、コンソールは他のコマンドを実行することもできます。コンソールを占有する通常モードに移行します。
[root@localhost php]# fg php deadloop.php 1470996682 1470996685 1470996688 1470996691
上記は & コマンドの簡単な紹介です
別のコマンドを見てみましょう nohup
コマンドの前に nohup を追加すると、開始されたプロセスは Linux ハング信号 (SIGHUP) を無視します。どのような状況でトリガーされるかLinux での SIGHUP シグナル? 以下の内容は Baidu Encyclopedia から引用したものです:
SIGHUP は、次の 3 つの状況で対応するプロセスに送信されます:1. ターミナルが閉じられると、シグナルがセッションに送信されます。最初のプロセスとジョブとして送信されたプロセス (つまり、& 記号で送信されたプロセス)
2. セッションの最初のプロセスが終了すると、セッション内のフォアグラウンド プロセス グループ内の各プロセスにシグナルが送信されます3親プロセスが存在すると、プロセス構成が孤立したプロセスグループとなり、プロセスグループ内のプロセスが停止した場合(SIGSTOPまたはSIGTSTPシグナルを受信した場合)、このシグナルがプロセスグループ内のすべてのプロセスに送信されます。
1 と 2 を組み合わせると、プロセスが & (ジョブ モード) で開始されたかどうかに関係なく、端末を閉じるときに SIGHUP シグナルが受信されることがわかります。それでは、プロセスは SIGHUP シグナルを受信したときに何をしますか? Baidu Encyclopedia から引用した同じ文を参照してください
SIGHUP シグナルのシステムのデフォルトの処理は、シグナルを受信するプロセスを終了することです。したがって、プログラムでシグナルがキャプチャされていない場合、シグナルを受信した時点でプロセスは終了します。
つまり、ターミナルプロセスを閉じると SIGHUP シグナルが受信され、このシグナルのデフォルトの処理方法は、プロセスを終了することです。もちろん、シグナルを自分で処理することも、無視することもできます。上記のループの例に少し改良を加えてみましょう
<?php declare(ticks = 1); pcntl_signal(SIGHUP, function(){ // 这地方处理信号的方式我们只是简单的写入一句日志到文件中 file_put_contents('logs.txt', 'pid : ' . posix_getpid() . ' receive SIGHUP 信号' . PHP_EOL); }); while(true){ echo time().PHP_EOL; sleep(3); }
Linux が提供する nohup コマンドを使用するだけで済みます。ターミナルに接続すると、プロセスは SIGHUP シグナルを無視し、終了しません。まず、今のシグナル処理コードを削除します。次に nohup を実行します。
[root@localhost php]# nohup php deadloop.php
nohup: 入力を無視し、出力を「nohup.out」に追加します
そして、書き込み権限がない場合、nohup はデフォルトでプログラムの出力を現在のディレクトリの nohup.out ファイルにリダイレクトします。 write $homepath/nohup.out
[root@localhost php]# ls cmd.sh deadloop.php getPhoto.php nohup.out pics [root@localhost php]# tail -f nohup.out 1470999772 1470999775 1470999778 1470999781 1470999784 1470999787 1470999790 1470999793 1470999796 1470999799 1470999802
を入力します。この時点ではプロセスは終了しませんが、プロセスを作成した親プロセスが終了したため、孤立プロセス (ppid=1) になります。
[root@localhost ~]# ps -ef | grep 3554 root 3554 3497 0 19:09 pts/0 00:00:00 php deadloop.php root 3575 3557 0 19:10 pts/1 00:00:00 grep 3554 [root@localhost ~]# ps -ef | grep 3554 root 3554 1 0 19:09 ? 00:00:00 php deadloop.php root 3577 3557 0 19:10 pts/1 00:00:00 grep 3554 [root@localhost ~]#
結論:
したがって、nohup メソッドと & メソッドを組み合わせると、開始されたプロセスはコンソールを占有せず、コンソールが閉じられた後、プロセス No. によって採用されます。 1 となり、孤立したプロセスになります。これはデーモン プロセスのメカニズムと非常によく似ています。
[root@localhost php]# nohup php deadloop.php >logs.txt 2>error.txt & [1] 3612 [root@localhost php]# ps -ef |grep 3612 root 3612 3557 0 19:18 pts/1 00:00:00 php deadloop.php root 3617 3557 0 19:19 pts/1 00:00:00 grep 3612 [root@localhost php]#
>logs.txt は標準出力をリダイレクトしますが、2>error.txt は標準エラー出力をリダイレクトします。
上記は最初の実装方法の紹介です。
2つ目の実装方法は、デーモンプロセスのルールや特性に合わせてコードで実装する方法です デーモンプロセスの最大の特徴は、ユーザー端末とセッションから分離されていることです。実装されたコード。主要な箇所にコメントが含まれています。
りー以上がPHPにおけるデーモンプロセスの一般的な実装方法を詳しく解説の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

PHPは動的なWebサイトを構築するために使用され、そのコア関数には次のものが含まれます。1。データベースに接続することにより、動的コンテンツを生成し、リアルタイムでWebページを生成します。 2。ユーザーのインタラクションを処理し、提出をフォームし、入力を確認し、操作に応答します。 3.セッションとユーザー認証を管理して、パーソナライズされたエクスペリエンスを提供します。 4.パフォーマンスを最適化し、ベストプラクティスに従って、ウェブサイトの効率とセキュリティを改善します。

PHPはMySQLIおよびPDO拡張機能を使用して、データベース操作とサーバー側のロジック処理で対話し、セッション管理などの関数を介してサーバー側のロジックを処理します。 1)MySQLIまたはPDOを使用してデータベースに接続し、SQLクエリを実行します。 2)セッション管理およびその他の機能を通じて、HTTPリクエストとユーザーステータスを処理します。 3)トランザクションを使用して、データベース操作の原子性を確保します。 4)SQLインジェクションを防ぎ、例外処理とデバッグの閉鎖接続を使用します。 5)インデックスとキャッシュを通じてパフォーマンスを最適化し、読みやすいコードを書き、エラー処理を実行します。

PHPで前処理ステートメントとPDOを使用すると、SQL注入攻撃を効果的に防ぐことができます。 1)PDOを使用してデータベースに接続し、エラーモードを設定します。 2)準備方法を使用して前処理ステートメントを作成し、プレースホルダーを使用してデータを渡し、メソッドを実行します。 3)結果のクエリを処理し、コードのセキュリティとパフォーマンスを確保します。

PHPとPythonには独自の利点と短所があり、選択はプロジェクトのニーズと個人的な好みに依存します。 1.PHPは、大規模なWebアプリケーションの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンスと機械学習の分野を支配しています。

PHPは、電子商取引、コンテンツ管理システム、API開発で広く使用されています。 1)eコマース:ショッピングカート機能と支払い処理に使用。 2)コンテンツ管理システム:動的コンテンツの生成とユーザー管理に使用されます。 3)API開発:RESTFUL API開発とAPIセキュリティに使用されます。パフォーマンスの最適化とベストプラクティスを通じて、PHPアプリケーションの効率と保守性が向上します。

PHPにより、インタラクティブなWebコンテンツを簡単に作成できます。 1)HTMLを埋め込んでコンテンツを動的に生成し、ユーザー入力またはデータベースデータに基づいてリアルタイムで表示します。 2)プロセスフォームの提出と動的出力を生成して、XSSを防ぐためにHTMLSPECIALCHARSを使用していることを確認します。 3)MySQLを使用してユーザー登録システムを作成し、Password_HashおよびPreprocessingステートメントを使用してセキュリティを強化します。これらの手法を習得すると、Web開発の効率が向上します。

PHPとPythonにはそれぞれ独自の利点があり、プロジェクトの要件に従って選択します。 1.PHPは、特にWebサイトの迅速な開発とメンテナンスに適しています。 2。Pythonは、データサイエンス、機械学習、人工知能に適しており、簡潔な構文を備えており、初心者に適しています。

PHPは依然として動的であり、現代のプログラミングの分野で重要な位置を占めています。 1)PHPのシンプルさと強力なコミュニティサポートにより、Web開発で広く使用されています。 2)その柔軟性と安定性により、Webフォーム、データベース操作、ファイル処理の処理において顕著になります。 3)PHPは、初心者や経験豊富な開発者に適した、常に進化し、最適化しています。


ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

AtomエディタMac版ダウンロード
最も人気のあるオープンソースエディター

メモ帳++7.3.1
使いやすく無料のコードエディター

ZendStudio 13.5.1 Mac
強力な PHP 統合開発環境

VSCode Windows 64 ビットのダウンロード
Microsoft によって発売された無料で強力な IDE エディター

WebStorm Mac版
便利なJavaScript開発ツール
