PHP が大規模システムでは機能しない 6 つの理由 (現在の議論)
この記事が公開された後、多くの論争を巻き起こしました。 PHPの支持者も多いようです。ただし、PHP を一方の側面から見ることは悪いことではありません。
php3からphp4へ 確かに、PHP5 から PHP6 にかけて、PHP はますます完成度が増し、機能もより強力になっています。 PHP は、プログラムを簡素化できる記述言語エンジンと大規模なリンク ライブラリを含むオープン ソース プロジェクトです。 たとえば、PHP の開発を専門とする企業があり、PHP スイート製品、プログラム作成ツール、テクニカル サポート サービスを販売しています。特に、クロスプラットフォーム機能により、Linux プラットフォームで威力を発揮します。できる Javaクラスライブラリを直接利用することで、Perl/Cなどの言語で書かれたプログラムを直接呼び出すことができ、スケーラビリティを高めます。ますます成熟する MVC 開発フレームワークにより、大規模なエンタープライズ レベルのアプリケーションの開発に適応できるようになります。プラス 本質的に強力なデータベース サポート機能。実際に多くのユーザーから賞賛を受けています!
しかし、ここでは、PHP が側面から無能である可能性がある理由をいくつか見ていきたいと思います。
と 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 でできていることは知っています。
Apache のプロセス作業モード。 Apache は、PHP リクエストごとに子プロセスを作成する必要があります。この場合、プロセス間のデータ共有は通常、ファイルやデータベースなどを介してのみ実行できます。オーバーヘッドは比較的大きくなります。もちろん速度は遅くありません。
また これはネチズンの発言です。「優れた開発ツールがなければ、デバッグは複雑すぎます。zend は優れていますが、VS には敵いません。強力なビジュアルがなければ、 開発ツール、つまり開発ツールがあるなら間違いなくPHPを選びます。 「これは Java の初期に似た状況のようです。おそらく、近い将来、優れたデバッグ ツールが登場するでしょう。問題は次のとおりです。 特に大規模なシステムでは、まだ満足のいくものではありません。
もう 1 つの問題は、共有メモリの使用です。PHP を直接使用して共有メモリを操作するのはなぜそれほど複雑で、実際にはディスク ファイルを直接操作するよりも速度が遅いのです。
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() 関数は、構成オプションの各値を取得できます。
ベテランコンピュータライター、ブルース エッケル氏はまた、「PHP で書かれた多くのコードにはエラーがたくさんあることがよくありますが、これらのコードは多くの場合人々によってコピーされますが、誰も注意深く分析しません。これらのコードは通常、 相互にコードをコピーすることに慣れているプログラマーによって書かれたものですが、このコードの品質が低い理由は、これらのプログラマーが通常、理由を尋ねることに慣れておらず、原則を理解することを好まず、ただそれを使用するだけであるためです。 「誰もがそうできるようにするために、 彼の写真を見せましょう。
?
も 多くの経験豊富な PHP プログラマにとって最も苦痛な部分は、PHP の解釈と実行メカニズムです。この操作メカニズムにより、各 PHP ページが解釈および実行された後に、関連するすべてのリソースをリサイクルできます。つまり とはいえ、PHP には言語レベルでオブジェクトをメモリに常駐させる方法がありません。 PHP では、グローバル変数であっても、クラスの静的メンバーであっても、すべての変数はページ レベルであり、ページの実行後にクリアされます。 ヌル。 JSPを例に挙げると、JSPではJava Bean スコープには、ページ、アプリケーション、セッション、リクエストの 4 つの有効な値があり、それぞれページ、プログラム、セッション、リクエストの 4 つのライフタイムに対応します。しかし PHP では、Page の存続期間は 1 つだけです。
は PHP では、ページ間でデータを共有する必要がある場合、変数を事前定義されたグローバル変数 $GLOBALS または $_SESSION に手動で保存する必要があります。 PHP はこれらの変数をファイルに保存します ファイルを保存し、次回ページが実行されたときに読み取れるようにします。ただし、この方法には効率が低いだけでなく、ファイル、ソケット、データベース接続などの外部リソースを参照する変数を保存できないという大きな制限があります。 待ってください。最もキャッシュする必要があるのはこれらのリソースです。
これ その結果、多くの高度なモードやテクノロジーが使用できなくなります。たとえば、最も単純なシングルトン パターンであっても、PHP では適用できません。 PHP を使用してシングルトンを記述することもできますが、 しかし、PHP には真にグローバルな静的変数がないため、ページが実行されるたびに新しいオブジェクトが再確立され、シングルトンの意味が完全に失われます。これ また、オブジェクト キャッシュ メカニズムがなく、OR マッピングのオーバーヘッドによりこのテクノロジが無意味になっているため、複雑な OR マッピング テクノロジを適用することが困難になります。
はい 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 モジュールも無料であると思われるかもしれません。ただし、実行可能な製品と同様に、無料のものにも多くの概念的な矛盾がある可能性があります。
? 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 を使用すれば、デバッグの作業負荷は大幅に軽減されます。 ?