PHPの動作原理がよくわかりません。解決策を教えてください。
Javaやnodejsと同様、サーバー上で継続的に実行されるプログラムである必要があり、このプログラムは常に実行され、CPUとメモリを占有し、ネットワークリクエストを受信すると処理します。
PHP はプログラムではなく、HTML に似ています。PHP サービスにアクセスしないときのみ実行され、少しのメモリも占有しません。 CPU それは本当ですか?
そうであれば、PHP でデータベース クラスをカプセル化するのは難しくないでしょうか?これは、各ユーザーが入ってきて自分に代わってプロセスを開く必要があり、そのプロセスが相互に接続されていないためです。ユーザー A が入ってきてその人のデータベース接続を開き、ユーザー B が入ってきてその人の代わりに別のデータベース接続を開きます。では、PHP はデータベースに接続したり切断したりを繰り返しているのではありませんか?ユーザーが増えると、オーバーヘッドが非常に高くなるはずです。
これがphpにjsのようなsetInterval
或者 setTimeout
関数がない理由でもあるのでしょうか?
返信内容:
Javaやnodejsと同様、サーバー上で継続的に実行されるプログラムである必要があり、このプログラムは常に実行され、CPUとメモリを占有し、ネットワークリクエストを受信すると処理します。
PHP はプログラムではなく、HTML に似ています。PHP サービスにアクセスしないときのみ実行され、少しのメモリも占有しません。 CPU それは本当ですか?
そうであれば、PHP でデータベース クラスをカプセル化するのは難しくないでしょうか?これは、各ユーザーが入ってきて自分に代わってプロセスを開く必要があり、そのプロセスが相互に接続されていないためです。ユーザー A が入ってきてその人のデータベース接続を開き、ユーザー B が入ってきてその人の代わりに別のデータベース接続を開きます。では、PHP はデータベースに接続したり切断したりを繰り返しているのではありませんか?ユーザーが増えると、オーバーヘッドが非常に高くなるはずです。
これがphpにjsのようなsetInterval
或者 setTimeout
関数がない理由でもあるのでしょうか?
PHP-FPM を例として (Apache MOD_PHP と同様)、PHP の動作メカニズムについて説明します
まず第一に、PHP-FPM は C で実装されたマルチプロセス FastCGI サービスです。
各 PHP-FPM ワーカー プロセスは、組み込みの PHP インタープリターは PHP-CGI に依存せず、構成などの常駐バックグラウンドをサポートします。
リーリー
実行タイムアウトと放棄、指定された数のリクエストを処理した後のワーカープロセスの自動再起動、スローロギング(時間のかかるファイルや関数の発見)など、すべてがサポートされています。
そして、永続的な接続を有効にした後、各 PHP-FPM 作業プロセスは、解放せずに MySQL への長い接続を維持することができ、データベースへの繰り返しの接続を回避できます。
さらに、Memcached および Redis の PECL 拡張機能も永続的な接続の機能を実装します。
PHP-FPM システムについては上で説明しましたが、ここで PHP-FPM システムにおける PHP スクリプトのライフ サイクルについて説明します。
リソースはリクエストごとに 1 回解放されます。この種のメモリ解放は、プログラムが有効になる前に終了します。ここでのリソースの解放とは、スクリプト内で制御されるリソースであり、PHP-FPM の常駐プロセスに干渉せず、PHP-FPM プロセスをシャットダウンさせず、PHP-FPM に永続的な接続を閉じさせません。 PHP-FPM は、PHP スクリプトを入力して PHP 操作を実行することのみを担当します。ZendOpcache サポートが追加されている場合、PHP スクリプトの解析によって生成されたすべてのオペコードは、次回の直接解釈と実行のためにメモリにキャッシュされます。 opcache.file_cache を使用してスクリプトのオペコードをエクスポートし、ソース コードの保護を実現します
PHP に関する常識:
データベース接続プール: PHP 永続接続は、プログラム介入を必要としない自然で透過的な接続プールであり、MySQL/Memcached/Redis などをサポートします。
ガベージ コレクション: リクエストごとに 1 回リソースを解放する PHP-FPM の動作モードは、参照カウントに基づく GC の役割を弱めます。
最後に、CLI で動作する Swoole/WorkerMan などの PHP デーモン サービスは Java/Node に似ています。
私はすでに仕事を終えていますが、あなたの言及を見ましたPHP
是类似html
我忍不了。PHP
功能是html
无法比拟的好不好,就拿你说的连接数据库的例子来说,html
能连接数据吗?能读取数据库内容吗?不能吧!还有你说多个用户来访问每个用户都要开一个数据库连接,你这样太小看PHP
了。封装一个数据库连接类很简单很简单,这些我就不贴code
了。PHP手册每种数据库扩展都有介绍也有事例,你可以自己做参考。你既然提到java
那肯定也知道单例模式吧!PHP
封装好一个数据库连接类设置单例模式就可以实现数据连接静态化。不管多少用户来访问直接调用一下就可以不是你说的多个用户来访问就开多个进程。还有你提到的setInterval
和setTimeout
不就是定时执行吗!PHP
也可以的啊!首先定义好PHP要实现的功能,然后通过在服务器上设置crontab
就可以了,参数自己设置就行,或者还有php-fpm
。機能などは記載しませんし、回答もまだ整形していないので、まずは見ていただければと思います。仕事を終えて出発しなければなりません。質問がある場合は、明日も引き続き話し合いましょう。
は非常に強力な機能を備えた非常に優れた言語です...そして今も開発と成長が続いています...学習と理解が簡単です!兄弟PHP
PHP はメモリに常駐できません。各 HTTP リクエストが開かれた後、リクエストが終了するとデータベース接続とさまざまな変数が解放されます。
全体的な理解は正しいですが、すべての言語が Java や Python、go、C のようにメモリ常駐するわけではありません。 PHP には接続プールの概念がありません。プロセスは実行後に解放され、他のプロセスが使用できるように残されることはありません。
これは、「PHP コアの詳細な理解」の第 2 章の最初のセクションへのリンクです:
http://www.php-internals.com/...
あなたの疑問は、あなたが表面しか見ていないからです。
swooleを使ったことがある方ならこんな質問はしないと思います。
ああ、php-fpm が到着しないと思ったでしょう。 。 。
そして、PHP はプログラムではないようで、HTML に似ています
PHP サービスにアクセスしないときのみ実行されます。PHP は少しのメモリや CPU も占有しません。PHP は HTML にのみ埋め込むことができますが、PHP にはさまざまな機能を提供する拡張機能があり、HTML とはまったく異なります。
1. Apache によって表される Mod_php、この時点で作業は Apache に引き渡されます。PHP には主に 2 つの実行モードがあります (CLI を除く):
2.php-fpm (fastcgi プロセス マネージャー) Nginx/Lighttpd によって使用され、これは常駐デーモン プロセスです。
それでは、どうすればCPUとメモリを占有しないで済むのでしょうか?
PDO には長時間接続オプションもあります。MySQL を例に挙げます。接続時に pconnect (永続的な接続) を選択すると、次回からは既存の接続が直接使用され、接続は閉じられません。
関数がない理由でもあるのでしょうか?など)があり、その精度はJSよりもはるかに高い(マイクロ秒レベル)。PHPには遅延関数(
setInterval
或者setTimeout
sleep()
実際、元の投稿者の質問に答えると、PHP の動作メカニズムはスクリプトを解釈して実行することだと思います。 PHP は、小規模および中規模の Web サイトにサーバー側のサポートを提供するスクリプト言語です。これが、開発速度と運用効率のバランスが取れていることが成功の理由です。
つまり、投稿者の他の意見にはほとんど価値がなく、もし PHP があなたが想像しているようなものを持っているなら、誰もこの言語を使用しないでしょうし、誰もが Java を使用するのと同じかもしれません。
著者は PHP の基本的な知識がありません。PHP を初めて使用する必要があります。簡単に言うと、PHP は 2 つのモードで実行できます。1 つはシェルで php xxx.php を実行するようなスクリプト モードで、もう 1 つはネットワーク リクエストがあった場合にのみ実行を開始するモードです (あまり適切ではありません)。一部は Apache 拡張モードにコンパイルされますが、高速 CGI モードもあります。 Apache の mod_php メソッドは、リクエストによって実行するプロセスを開始します。これは非常に効率的であり、それに応じてさまざまなパラメーターが最適化されます。 Fast-cgi は、特定の投稿者が対応するマニュアルを読んで実践することができるため、より効率的です。
上の階の人たちはとても忍耐強いです

ホット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)

ホットトピック









PHP 8.4 では、いくつかの新機能、セキュリティの改善、パフォーマンスの改善が行われ、かなりの量の機能の非推奨と削除が行われています。 このガイドでは、Ubuntu、Debian、またはその派生版に PHP 8.4 をインストールする方法、または PHP 8.4 にアップグレードする方法について説明します。

あなたが経験豊富な PHP 開発者であれば、すでにそこにいて、すでにそれを行っていると感じているかもしれません。あなたは、運用を達成するために、かなりの数のアプリケーションを開発し、数百万行のコードをデバッグし、大量のスクリプトを微調整してきました。

Visual Studio Code (VS Code とも呼ばれる) は、すべての主要なオペレーティング システムで利用できる無料のソース コード エディター (統合開発環境 (IDE)) です。 多くのプログラミング言語の拡張機能の大規模なコレクションを備えた VS Code は、

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

このチュートリアルでは、PHPを使用してXMLドキュメントを効率的に処理する方法を示しています。 XML(拡張可能なマークアップ言語)は、人間の読みやすさとマシン解析の両方に合わせて設計された多用途のテキストベースのマークアップ言語です。一般的にデータストレージに使用されます

文字列は、文字、数字、シンボルを含む一連の文字です。このチュートリアルでは、さまざまな方法を使用して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。\ _ \ _コンストラクト、オブジェクトの初期化に使用されます。 2。\ _ \ _リソースのクリーンアップに使用される破壊。 3。\ _ \ _呼び出し、存在しないメソッド呼び出しを処理します。 4。\ _ \ _ get、dynamic属性アクセスを実装します。 5。\ _ \ _セット、動的属性設定を実装します。これらの方法は、特定の状況で自動的に呼び出され、コードの柔軟性と効率を向上させます。
