PHP でのバックエンド実行プログラムの作成の概要
1. スケジュールされた実行
crontab、Linuxコマンドの使い方は自分でググってください。 crontab を使用するときは、アクセス許可に注意する必要があることをお伝えしたいのですが、操作とメンテナンスでは root を使用して起動することが多く、その結果、Web ユーザーがアクセス許可を持たないファイルがいくつか発生します。
2. バックグラウンドガード
これは 2 つのステップに分かれています: 1. php は Python とは異なりますが、通常は {....} を実行します。 2. プロセスを開始するときに、最後に「&」を追加する必要があります。出力情報を記録する必要がある場合は、これを記述する必要があります。 php xxxx.php > /tmp/phplog & 。これにより、プログラム情報がファイルに記録され、後で問題のトラブルシューティングが容易になります。
3. 動作の監視
バックグラウンド デーモン プロセスが開始されますが、これらのメッセージが表示されると、PHP は現在のプロセスを終了します。直接辞めます。したがって、通常の処理を行うプログラムに加えて、そのプログラムの実行状況を確認するプログラムも必要です。通常、このプログラムの例は次のとおりです
#!/usr/local/。 php5/bin/php
php
//起動コマンド
$action = '/usr/local/php5/bin/php xxxxxx.php';
$logPath = '/tmp/logs/';
do {
$result = array ();
exec("ps aux | grep 'xxxxxx.php'", $result);
$isOk = 0;
foreach ($result as $v) {
$is = strpos($v, $action );
if (false !== $is) {
$isOk++;
}
}
$exec = $action . " > " . $logPath &";
for ($i=1; $i exec($exec);
}
sleep(5);
} while (true);
このプログラムを開始する5 秒ごとに ps コマンドを使用して、動作するプログラムが存在するかどうかを確認し、プログラムが存在しない場合、または存在するプログラムが 5 つ未満の場合は、最大 5 つまで起動します。もちろん、この作業はシェルを使った運用保守に任せることもできますが、運用保守能力が不足している場合は自分で行う必要があります。
4. マルチプロセス
効率を高めるために、通常、PHP は複数のプロセスを同時に開始するか、複数のマシン上で実行されます。このとき、複数のプロセスが同じデータを同時に処理するという問題を考慮する必要があります。このとき、私は通常、タスクのキューを作成します (通常、パフォーマンスが非常に優れている Redis を使用します。その方法は、Google で検索できます)。その後、作業プログラムが毎回作業対象のレコードをポップアウトします。たとえば、大規模なファイルを処理する必要がある場合、通常はファイルを処理して 1 つずつ Redis リストに追加し、複数のプログラムで同時に作業プログラムをポップできるようにします。重複することなく並行して実行されます。本当に Redis がない場合は、mysql を使用して innodb テーブルを構築できます。プログラムがデータを処理する前に、必ず処理対象のデータに読み取りロックを追加し、処理後にマークを追加するか、直接マークを追加します。データを削除することも可能です。複数のプロセスでの非重複の問題も実現できます。
5. ログ
バックグラウンドプログラムは通常実行され続け、何か問題が発生しない限り基本的に誰も気にしないため、ログは非常に重要です。フロントエンド プログラムとは異なり、原因を調べてエラーの場所を確認します。ログが多すぎることや、ハードドライブのスペースを無駄にすることを恐れる必要はありません。ただし、バグは収入に直接影響する可能性があります。普段こんな感じでログを取っています
[マシンIP] [プロセスpid] [時刻] [現在のプログラムファイル名] [ファイル行数] [必要なパラメータと情報] [その他]
これらが考えられるものです通常のプログラムの問題。通常、try catch はプログラムの最外層に追加されるため、ほとんどの例外をキャッチして記録できます (警告キャッチは利用できず、非常に憂鬱です)
6. パフォーマンス最適化
このような背景 通常、プログラムの運用と保守はマシンに対して個別に行われます。このとき、マシンが実行できるプロセスの数を確認するためにストレス テストを実行する必要があります。プロセッサがタスクの処理でビジー状態になっている場合、マシンの CPU、メモリ、ネットワーク、およびハードディスクの使用量を確認し、マシンが無駄にならないように、同時に最大値に達することが最善です。使用率が非常に高く、その他の使用率が非常に低い場合、プログラムを最適化する必要があります。この場合、通常は読み取りの場合です。書き込まれたデータは一定期間メモリに一時的に保存され、その後、メモリに書き込まれます。 CPU が非常に高い場合は、アルゴリズムが複雑すぎるため、メモリとネットワークがボトルネックになることはなく、PHP は少なくともメモリをあまり使用しません。ギガビット ネットワーク カード これら 2 つの項目は通常、ボトルネックではありません。したがって、私は通常、これらのマシンで memcache を開きます (笑)、無駄はありません。
7.
サーバーclose_waitについての質問です。一般に、PHP プログラマーは接続を開いた後に積極的に閉じる人はほとんどいません。たとえば、データベースや memcache に接続する場合、多くのプログラマーはリンクを作成し、それを操作してからプログラムの実行を完了します。 PHP が積極的に接続を閉じない場合、相手のマシンは常に終了操作を待機します。相手のサーバー上では close_wait 状態が表示され、特にバックグラウンド プログラムの後では、マシンは 60,000 を超えるリンクしか開くことができません。が起動すると、相手のマシンはすぐにいっぱいになってしまい接続できなくなりました。このとき、両方の側でいくつかの変更を加える必要があります。一方で、PHP は積極的に切断する必要があり、他方では、相手のマシンは close_wait のデフォルトのタイムアウトをより短い時間に変更する必要があります (変更方法)。ご自身でググってください)。私は通常、memcache を 5 秒しか使用しません。データベースはそれよりも長く、2 分です。この処理の後、サーバーの継続性が大幅に向上し、同時実行能力も向上します。

ホットAIツール

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

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

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

Video Face Swap
完全無料の AI 顔交換ツールを使用して、あらゆるビデオの顔を簡単に交換できます。

人気の記事

ホットツール

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

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









JWTは、JSONに基づくオープン標準であり、主にアイデンティティ認証と情報交換のために、当事者間で情報を安全に送信するために使用されます。 1。JWTは、ヘッダー、ペイロード、署名の3つの部分で構成されています。 2。JWTの実用的な原則には、JWTの生成、JWTの検証、ペイロードの解析という3つのステップが含まれます。 3. PHPでの認証にJWTを使用する場合、JWTを生成および検証でき、ユーザーの役割と許可情報を高度な使用に含めることができます。 4.一般的なエラーには、署名検証障害、トークンの有効期限、およびペイロードが大きくなります。デバッグスキルには、デバッグツールの使用とロギングが含まれます。 5.パフォーマンスの最適化とベストプラクティスには、適切な署名アルゴリズムの使用、有効期間を合理的に設定することが含まれます。

セッションハイジャックは、次の手順で達成できます。1。セッションIDを取得します。2。セッションIDを使用します。3。セッションをアクティブに保ちます。 PHPでのセッションハイジャックを防ぐための方法には次のものが含まれます。1。セッション_regenerate_id()関数を使用して、セッションIDを再生します。2。データベースを介してストアセッションデータを3。

PHP開発における固体原理の適用には、次のものが含まれます。1。単一責任原則(SRP):各クラスは1つの機能のみを担当します。 2。オープンおよびクローズ原理(OCP):変更は、変更ではなく拡張によって達成されます。 3。Lischの代替原則(LSP):サブクラスは、プログラムの精度に影響を与えることなく、基本クラスを置き換えることができます。 4。インターフェイス分離原理(ISP):依存関係や未使用の方法を避けるために、細粒インターフェイスを使用します。 5。依存関係の反転原理(DIP):高レベルのモジュールと低レベルのモジュールは抽象化に依存し、依存関係噴射を通じて実装されます。

システムが再起動した後、UnixSocketの権限を自動的に設定する方法。システムが再起動するたびに、UnixSocketの許可を変更するために次のコマンドを実行する必要があります:sudo ...

phpstormでCLIモードをデバッグする方法は? PHPStormで開発するときは、PHPをコマンドラインインターフェイス(CLI)モードでデバッグする必要がある場合があります。

静的結合(静的::) PHPで後期静的結合(LSB)を実装し、クラスを定義するのではなく、静的コンテキストで呼び出しクラスを参照できるようにします。 1)解析プロセスは実行時に実行されます。2)継承関係のコールクラスを検索します。3)パフォーマンスオーバーヘッドをもたらす可能性があります。

PHP開発でPHPのCurlライブラリを使用してJSONデータを送信すると、外部APIと対話する必要があることがよくあります。一般的な方法の1つは、Curlライブラリを使用して投稿を送信することです。
