目次
1. 適用範囲はまだ限られています
2. デバッグはまだ不便です
3. メインストリーム バージョンにはセキュリティ上の脆弱性がたくさんあります
4. 大規模システムの安定性と言語のスタイル
5.PHPの解釈と動作の仕組み
6. 将来は不確実です。オープンソースのビジネス モデルはいつまで続くでしょうか?
ホームページ バックエンド開発 PHPチュートリアル PHPが大規模システムに対応できない6つの理由(現在議論中)

PHPが大規模システムに対応できない6つの理由(現在議論中)

Jun 13, 2016 pm 01:03 PM
http java mysql php zend

PHP が大規模システムでは機能しない 6 つの理由 (現在の議論)

この記事が公開された後、多くの論争を巻き起こしました。 PHPの支持者も多いようです。ただし、PHP を一方の側面から見ることは悪いことではありません。

php3からphp4へ 確かに、PHP5 から PHP6 にかけて、PHP はますます完成度が増し、機能もより強力になっています。 PHP は、プログラムを簡素化できる記述言語エンジンと大規模なリンク ライブラリを含むオープン ソース プロジェクトです。 たとえば、PHP の開発を専門とする企業があり、PHP スイート製品、プログラム作成ツール、テクニカル サポート サービスを販売しています。特に、クロスプラットフォーム機能により、Linux プラットフォームで威力を発揮します。できる Javaクラスライブラリを直接利用することで、Perl/Cなどの言語で書かれたプログラムを直接呼び出すことができ、スケーラビリティを高めます。ますます成熟する MVC 開発フレームワークにより、大規模なエンタープライズ レベルのアプリケーションの開発に適応できるようになります。プラス 本質的に強力なデータベース サポート機能。実際に多くのユーザーから賞賛を受けています!

しかし、ここでは、PHP が側面から無能である可能性がある理由をいくつか見ていきたいと思います。

1. 適用範囲はまだ限られています

と Java と比較すると、PHP はネットワーク サーバー上でのみ使用でき、ネットワーク サーバー、パーソナル コンピュータ、携帯電話、チップ カードなどのデバイス上で使用できます。古いのがあったのを覚えています 友人は PHP をやめた理由を次のように述べています。「第一に、$ 記号を各変数の前に書かなければなりません。第二に、それはコンパイルして実行する方法ではないからです。?? 第三に、オブジェクト指向の機能が強くない。たとえば、PHP の oop は一度実行した後に終了し、次回も再構築して継承を続けます。リクエストごとに、以前の結果を使用できないことに注意してください。 次回使用するときは、最初から初期化する必要があります。多くの問題の根源も Apache にあります。

もう 1 つ: 「おそらく現在 php?? IDE はあまり優れていないため、他の人が使い始めるのが困難です。 「新しいバージョンにはオブジェクト指向機能が追加されていますが、成熟した Java に比べて改善の余地はまだたくさんあります。したがって、次のように要約する人もいます。 (1) 広く使用されていないため、Microsoft は PHP の ASP.Net への移行について全員で話し合う必要があるほどです。 (2) IBM 開発センターのオープンソース プロジェクトのホームページに掲載されている 6 タイトルなど、大企業からのサポートの欠如 このうち、PHP 用は 3 つだけです。 (3) PHP を使用する Google や Yahoo (すべての製品ではありません) などの重量級アプリケーションの欠如は、ただ遊んでいるだけです。もちろん、Taobao.com も PHP でできていることは知っています。

2. デバッグはまだ不便です

Apache のプロセス作業モード。 Apache は、PHP リクエストごとに子プロセスを作成する必要があります。この場合、プロセス間のデータ共有は通常、ファイルやデータベースなどを介してのみ実行できます。オーバーヘッドは比較的大きくなります。もちろん速度は遅くありません。

また これはネチズンの発言です。「優れた開発ツールがなければ、デバッグは複雑すぎます。zend は優れていますが、VS には敵いません。強力なビジュアルがなければ、 開発ツール、つまり開発ツールがあるなら間違いなくPHPを選びます。 「これは Java の初期に似た状況のようです。おそらく、近い将来、優れたデバッグ ツールが登場するでしょう。問題は次のとおりです。 特に大規模なシステムでは、まだ満足のいくものではありません。

もう 1 つの問題は、共有メモリの使用です。PHP を直接使用して共有メモリを操作するのはなぜそれほど複雑で、実際にはディスク ファイルを直接操作するよりも速度が遅いのです。

3. メインストリーム バージョンにはセキュリティ上の脆弱性がたくさんあります

Php pdflib 拡張機能が open_basedir セキュリティ制限の脆弱性を回避することに関する最近のニュースをご覧ください。影響を受けるシステム: PHP PHP 5.3.0。 PHP 使用されている PDFLib 拡張機能には、正しい必須の基本 PHP 構成ディレクティブがないため、攻撃者が open_basedir 制限をバイパスし、許可されていない場所にファイルを書き込むことができます。複数のユーザーのみが作成できます この脆弱性は、任意の PHP スクリプト コードを実行する共有ホスティング構成でのみ発生します。この場合、open_basedir 制限によりユーザーを相互に分離する必要があります。

PHP V6 ではいくつかの新機能が追加されていますが、以前のバージョンのいくつかの関数や機能も削除されています。 register_globals など、削除されたもののほとんど そしてsafe_mode 、 現在の PHP ではセキュリティ上のリスクを招く可能性があるため、「脆弱性」があると広く考えられています。もちろん、PHP 構成は非常に柔軟であり、php.ini を通じて構成できます。 httpd.conf、.htaccess ファイル (AllowOverride をこのディレクトリに設定する必要があります) すべてまたはオプション)、スクリプト プログラムで ini_set() およびその他の特定の関数を使用することもできます。 phpinfo() 経由と get_cfg_var() 関数は、構成オプションの各値を取得できます。

4. 大規模システムの安定性と言語のスタイル

はい 人々はこう言います (これも PHP 読者からの質問です): 「大規模なシステムには .net または jsp を使用する方が良いです。それは PHP が信頼できないからではありません。PHP を開発する人々が混在していて、PHP の開発モデルが信頼できないからです」 。」 ご質問の状況からすると、計算式が定まっていないのですが、複数人で開発した場合は、確実に制御ができなくなると思います。 .net または jsp は制御が比較的容易であるため、プログラムの構造が明確になり、二次開発や置き換えが容易になります。 プログラマーにとってはそれほど問題はないでしょう。 ”

ベテランコンピュータライター、ブルース エッケル氏はまた、「PHP で書かれた多くのコードにはエラーがたくさんあることがよくありますが、これらのコードは多くの場合人々によってコピーされますが、誰も注意深く分析しません。これらのコードは通常、 相互にコードをコピーすることに慣れているプログラマーによって書かれたものですが、このコードの品質が低い理由は、これらのプログラマーが通常、理由を尋ねることに慣れておらず、原則を理解することを好まず、ただそれを使用するだけであるためです。 「誰もがそうできるようにするために、 彼の写真を見せましょう。

?

普通の読者としては、当然次のような疑問が生じます: PHP には将来性があるとおっしゃいましたが、その理由は何ですか?

5.PHPの解釈と動作の仕組み

も 多くの経験豊富な PHP プログラマにとって最も苦痛な部分は、PHP の解釈と実行メカニズムです。この操作メカニズムにより、各 PHP ページが解釈および実行された後に、関連するすべてのリソースをリサイクルできます。つまり とはいえ、PHP には言語レベルでオブジェクトをメモリに常駐させる方法がありません。 PHP では、グローバル変数であっても、クラスの静的メンバーであっても、すべての変数はページ レベルであり、ページの実行後にクリアされます。 ヌル。 JSPを例に挙げると、JSPではJava Bean スコープには、ページ、アプリケーション、セッション、リクエストの 4 つの有効な値があり、それぞれページ、プログラム、セッション、リクエストの 4 つのライフタイムに対応します。しかし PHP では、Page の存続期間は 1 つだけです。

は PHP では、ページ間でデータを共有する必要がある場合、変数を事前定義されたグローバル変数 $GLOBALS または $_SESSION に手動で保存する必要があります。 PHP はこれらの変数をファイルに保存します ファイルを保存し、次回ページが実行されたときに読み取れるようにします。ただし、この方法には効率が低いだけでなく、ファイル、ソケット、データベース接続などの外部リソースを参照する変数を保存できないという大きな制限があります。 待ってください。最もキャッシュする必要があるのはこれらのリソースです。

これ その結果、多くの高度なモードやテクノロジーが使用できなくなります。たとえば、最も単純なシングルトン パターンであっても、PHP では適用できません。 PHP を使用してシングルトンを記述することもできますが、 しかし、PHP には真にグローバルな静的変数がないため、ページが実行されるたびに新しいオブジェクトが再確立され、シングルトンの意味が完全に失われます。これ また、オブジェクト キャッシュ メカニズムがなく、OR マッピングのオーバーヘッドによりこのテクノロジが無意味になっているため、複雑な OR マッピング テクノロジを適用することが困難になります。

6. 将来は不確実です。オープンソースのビジネス モデルはいつまで続くでしょうか?

はい PHP 開発に携わっている人にとって、Mysql の重要性は明らかです。やはりブルース、ベテランのコンピュータライターです Eckel 氏の見解の 1 つは、PHP は主にデータベースと組み合わせて使用​​され、一貫性の問題はすべてデータベースが処理するため、ほとんどの人は根本的な問題を考慮することなく、データベースからのデータにアクセスすることだけを気にします。 質問。ただし、この言語はデータベースとの対話に関する上位レベルの問題だけでなく、ファイル システムとの対話に関する下位レベルの問題も処理できます。私の感覚では、PHP コミュニティのほとんどの人は、 良い結果ですが、実際の実装原理を気にする人が少ないため、この間違った傾向が現れます。

別のニュースを見る (2008-1-21) ): 本日、海外メディアは、Sun が 10 億ドルを投じてオープンソース ソフトウェア会社 MySQL を買収した理由は、主に Web2.0 ソフトウェア市場に参入するためだったとする分析記事を掲載しました。サンが水曜日に発表した。 同社はMySQLと、オープンソースソフトウェアメーカーを10億ドルで買収することで最終合意に達した。取引額という点では、これはオープンソース分野におけるこれまでの最大の取引であり、その規模はさらに上回ります。 Red Hat による 3 億 2,600 万ドルの JBoss 買収、Citrix による 5 億ドルの XenSource 買収、Yahoo の 3 億 5,000 万ドルの買収など、これまでのほぼすべてのオープンソース取引を組み合わせたものです。 ジンブラ。

記事「Sun 社長のブログ: MySQL を買収した理由」の中で、Sun 社長は次のように提案しました。 MySQL、Sun は MySQL 市場向けにグローバルなサポート ソリューションを提案します。コミュニティと市場の両方に同時に資金を注入します - 独自技術の段階からオープンネットワークプラットフォームの段階への業界の変革プロセスを加速する。スタートアップやドットコム企業の CTO はこう考えてください。 有料の非オープンソース製品の使用に同意しないでください。彼らは、最適化と迅速な問題解決のためにソース コードにアクセスする必要があり、アクセスしたいと考えています (ただし、価値があると考えるサポート サービスには喜んで支払います)。一方で、より伝統的な CIO は、商業的関係に裏付けられていない製品の使用に消極的でした。なぜなら、サン ベンダーと協力してグローバルな運用と重要なインフラストラクチャを管理する方が安心だからです。

注意深く分析してみましょう。 古いことわざにあるように、PHP は無料であり、マニュアルに記載されているすべての PHP モジュールも無料であると思われるかもしれません。ただし、実行可能な製品と同様に、無料のものにも多くの概念的な矛盾がある可能性があります。

?

< type="text/javascript" src="http://pagead2.googlesyndication.com/pagead/show_ads.js">

?

一晩で数え切れないほどのコメントがありました。反対は受け入れられないわけではありません。これが旧友の反論です。

? 1.?? オブジェクト指向が不十分ですか?? ? PHP 5 を使用したことがある人なら、こんなことは言わないでしょう。アクセス権 (パブリック/プライベート)、継承、抽象クラス、インターフェイス、クローン作成、シリアル化、自動ガベージ コレクション、静的メンバー、強力な例外処理など。 .??
基本的に、一般的なオブジェクト指向のものはすべて利用可能であると言えます。実際、多くの人や多くのプロジェクトが PHP 5 を使用しているので、ぜひ試してみてください。 ??
? 推奨リファレンス: ??
? http://www-128.ibm.com/developerworks/cn/opensource/os-phpobj/?? ? http://www-128.ibm.com/developerworks/cn/opensource/os-advphpobj/?? ?? 変数名の前に ??
を追加します。 ? これは、PHP が Java や C++ ではなく、オープンソースの世界から生まれたスクリプト言語であることを皆さんに伝えるための小さな問題です。とてもフレンドリーで素晴らしいと思います。 ??
? 3.?? コンパイルも実行もされていません?? もちろん、C を使用して CGI を作成する場合は CGI ほどではありませんが、PHP の実行速度は JSP よりも悪くはなく、ASP よりも遅くはないと思います。さらに、Zend にはコンパイルと同様の作業を行うための関連する商用ツールがあります。 ??
? 4.??
? プログラマーのスキルが反映されるように、自由に制御できる言語を好むのは当然だと思います。コードを書くのは難しいかもしれません。非常に悪いです。しかし、これは私たちの考えるオープンソースで効率的な PHP ですか?? ? 5.?? MVC フレームワークはありません?? ? はは、phpCake と Zend フレームを使用したことがあるなら、フレームワークが存在しないとは言わないと思います。実際には、Cake と Zend フレームは両方とも非常に優れたものです。 Prado や phpMVC などの他のフレームワークも言及する価値があります?? ? 参考: http://framework.zend.com/、http://cakephp.org/?? ? 6.?? 良いIDEではありません?? ? PHP の特徴はシンプルで開発が容易であることです。Notepad、vi、Editplus、UE、Nu、Zend などのツールを使用できます。 VS は統合開発プラットフォームであり、PHP は単なるスクリプト言語であるため、VS2003 と比較する必要があります。少なくとも私はそう考えています。 ??
? 7.?? 拡張子を書くのは簡単ではありません?? ? あはは、ASP com はそれほど簡単ではないと思います。また、JSP の JavaBeans もそれほど単純ではありません。単純か複雑かは、トランザクションの理解に依存します。 認識レベル。 C をしっかり学べば、拡張機能を書くのは難しくないと思います。もちろん、相対的に言えば、C で PHP 拡張機能を作成するのは少し複雑ですが、その複雑さのおかげで、拡張機能を作成すると高い給料を得ることができます (笑) おお。 ??
? 推奨参考文献: 「PHP プログラミング」の第 14 章 [拡張 PHP]?? ? 8.?? デバッグが不便ですか?? 何がデバッグに便利なのかわかりません。Ruby や Perl を使って CGI を書いたことがある人なら、何がデバッグに不便なのかがわかるでしょう。 C を書いたり、GDB などのコマンド ライン ツールを使用したりするのが好きなら、それがどれほど不便であるかがわかるでしょう。もちろん、相対的に言えば、優れた IDE を使用すれば、デバッグの作業負荷は大幅に軽減されます。 ?



このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

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

AI Clothes Remover

AI Clothes Remover

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

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

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

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

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

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

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

rootとしてmysqlにログインできません rootとしてmysqlにログインできません Apr 08, 2025 pm 04:54 PM

ルートとしてMySQLにログインできない主な理由は、許可の問題、構成ファイルエラー、一貫性のないパスワード、ソケットファイルの問題、またはファイアウォール傍受です。解決策には、構成ファイルのBind-Addressパラメーターが正しく構成されているかどうかを確認します。ルートユーザー許可が変更されているか削除されてリセットされているかを確認します。ケースや特殊文字を含むパスワードが正確であることを確認します。ソケットファイルの許可設定とパスを確認します。ファイアウォールがMySQLサーバーへの接続をブロックすることを確認します。

MySQLテーブルロックテーブルを変更するかどうか MySQLテーブルロックテーブルを変更するかどうか Apr 08, 2025 pm 05:06 PM

MySQLがテーブル構造を変更すると、メタデータロックが通常使用され、テーブルがロックされる可能性があります。ロックの影響を減らすために、次の測定値をとることができます。1。オンラインDDLでテーブルを使用できます。 2。バッチで複雑な変更を実行します。 3.小規模またはオフピーク期間中に操作します。 4. PT-OSCツールを使用して、より細かい制御を実現します。

RDS MySQL Redshift Zero ETLとの統合 RDS MySQL Redshift Zero ETLとの統合 Apr 08, 2025 pm 07:06 PM

データ統合の簡素化:AmazonrdsmysqlとRedshiftのゼロETL統合効率的なデータ統合は、データ駆動型組織の中心にあります。従来のETL(抽出、変換、負荷)プロセスは、特にデータベース(AmazonrdsmysQlなど)をデータウェアハウス(Redshiftなど)と統合する場合、複雑で時間がかかります。ただし、AWSは、この状況を完全に変えたゼロETL統合ソリューションを提供し、RDSMYSQLからRedshiftへのデータ移行のための簡略化されたほぼリアルタイムソリューションを提供します。この記事では、RDSMysQl Zero ETLのRedshiftとの統合に飛び込み、それがどのように機能するか、それがデータエンジニアと開発者にもたらす利点を説明します。

MySQLは複数の接続を処理できますか MySQLは複数の接続を処理できますか Apr 08, 2025 pm 03:51 PM

MySQLは、複数の同時接続を処理し、マルチスレッド/マルチプロセスを使用して、各クライアントのリクエストに独立した実行環境を割り当てて、邪魔されないことを確認できます。ただし、同時接続の数は、システムリソース、MySQL構成、クエリパフォーマンス、ストレージエンジン、ネットワーク環境の影響を受けます。最適化では、コードレベル(効率的なSQLの書き込み)、構成レベル(MAX_Connectionの調整)、ハードウェアレベル(サーバー構成の改善)などの多くの要因を考慮する必要があります。

MySQLのクエリ最適化は、特に大規模なデータセットを扱う場合、データベースのパフォーマンスを改善するために不可欠です MySQLのクエリ最適化は、特に大規模なデータセットを扱う場合、データベースのパフォーマンスを改善するために不可欠です Apr 08, 2025 pm 07:12 PM

1.正しいインデックスを使用して、データの量を削減してデータ検索をスピードアップしました。テーブルの列を複数回検索する場合は、その列のインデックスを作成します。あなたまたはあなたのアプリが基準に従って複数の列からのデータが必要な場合、複合インデックス2を作成します2。選択した列のみを避けます。必要な列のすべてを選択すると、より多くのサーバーメモリを使用する場合にのみサーバーが遅くなり、たとえばテーブルにはcreated_atやupdated_atやupdated_atなどの列が含まれます。

MySQLユーザーとデータベースの関係 MySQLユーザーとデータベースの関係 Apr 08, 2025 pm 07:15 PM

MySQLデータベースでは、ユーザーとデータベースの関係は、アクセス許可と表によって定義されます。ユーザーには、データベースにアクセスするためのユーザー名とパスワードがあります。許可は助成金コマンドを通じて付与され、テーブルはCreate Tableコマンドによって作成されます。ユーザーとデータベースの関係を確立するには、データベースを作成し、ユーザーを作成してから許可を付与する必要があります。

MySQLはAndroidで実行できますか MySQLはAndroidで実行できますか Apr 08, 2025 pm 05:03 PM

MySQLはAndroidで直接実行できませんが、次の方法を使用して間接的に実装できます。Androidシステムに構築されたLightWeight Database SQLiteを使用して、別のサーバーを必要とせず、モバイルデバイスアプリケーションに非常に適したリソース使用量が少ない。 MySQLサーバーにリモートで接続し、データの読み取りと書き込みのためにネットワークを介してリモートサーバー上のMySQLデータベースに接続しますが、強力なネットワーク依存関係、セキュリティの問題、サーバーコストなどの短所があります。

mysqlは支払う必要がありますか mysqlは支払う必要がありますか Apr 08, 2025 pm 05:36 PM

MySQLには、無料のコミュニティバージョンと有料エンタープライズバージョンがあります。コミュニティバージョンは無料で使用および変更できますが、サポートは制限されており、安定性要件が低く、技術的な能力が強いアプリケーションに適しています。 Enterprise Editionは、安定した信頼性の高い高性能データベースを必要とするアプリケーションに対する包括的な商業サポートを提供し、サポートの支払いを喜んでいます。バージョンを選択する際に考慮される要因には、アプリケーションの重要性、予算編成、技術スキルが含まれます。完璧なオプションはなく、最も適切なオプションのみであり、特定の状況に応じて慎重に選択する必要があります。

See all articles