二次開発とは、簡単に言うと、既存のソフトウェアにカスタマイズした変更や機能拡張を加えて、希望する機能や効果を実現することです。一般的に、元のシステムの根幹は変更されません。
情報技術の継続的な発展に伴い、IT 業界では一連の優れたオープンソース作品が出現しており、その作者は個人、プロジェクト チーム、またはソフトウェア会社です。これらの優れたオープンソースソフトウェアを選定・適用し、その上でビジネスニーズに応じた二次開発を行うことで、企業の情報コスト(時間コストや開発コスト)を節約するだけでなく、技術保証も実現します。これは私たちがよく聞く言葉です。「巨人の肩の上に立つと、より遠くまで見えるようになる」というものです。したがって、多くの国内企業は二次開発人材を必要としています。
|
4. はじめに
|
二次開発は単なる開発ではなく、本質を吸収し、経験を総括し、アイデアを正し、回り道を避け、自分自身を向上させることがより重要です。
巨人の肩の上に立つと、さらに先が見えてきます! ! !
より多くの人に二次開発について理解し、DedeCMSの二次開発をより便利に理解してもらうために、以下にDedeCMSの二次開発の基礎と概要を簡単に紹介します
|
|
ディレクトリ構造の概要:
|
· DedeCMS ファイル構造の分析 各ファイルの基本的な機能を理解し、各ファイルのおおよその機能を理解した後、ファイルを簡単に変更できます。
ファイル構造の概要:
|
· DedeCMS プロセス制御と一部のコア ファイルの分析 ログイン、登録、ドキュメント管理、権限制御、分類管理、モデル設定などのいくつかの一般的なプロセス制御に精通しています。いくつかのコア ファイルを分析して、そのプログラミング手法とセキュリティ メカニズムを理解します
・DedeCMS プラグインの開発 (**** プラグインおよび組み込みプラグイン) 2 つのプラグインの作成、プラグインのインポートとエクスポート、およびプラグイン マッチング モデルの使用に精通している
近年、インターネットの発展に伴い電子商取引も成長し、B2B、C2C、B2Cの電子商取引モデルも成熟を続けています。この時点で、電子商取引関連の PHP オープンソース製品が数多く誕生しました。 B2Cに関しては、Ecshop、Zencart、Magentoなど国内外で有名な製品があります。 Ecshop二次開発を学ぶプロセスと注意点を簡単に紹介します:
|
|
|
· Ecshop テンプレートの置換 Smarty の合理化されたバージョンの使用、独自のインターフェイスの埋め込み、Ecshop テンプレートの置換スキルに精通しています
・Ecshop二次開発例:中国語・英語切り替え機能、フラッシュセール機能、JD.comテンプレート制作など
学習目的:
|
一般的なPHPキャッシュ技術の分析【概念編】
ほとんどの場合、当社のウェブサイトはサイトデータストレージのコンテナとしてデータベースを使用します。 SQL クエリを実行するときの一般的なプロセスは次のとおりです。データベースに接続します - > SQL クエリを準備します - > データベースにクエリを送信します - > データベースから返された結果を取得します - > データベース接続を閉じますただし、データベース内の一部のデータは完全に静的であるか、頻繁に変更されません。キャッシュ システムは SQL クエリの結果をより高速なストレージ システムにキャッシュするため、頻繁なデータベース操作を回避し、プログラムの実行時間を大幅に短縮できます。後で処理してください。
ここで言うデータ キャッシュとは、ページにアクセスするたびに、まず対応するキャッシュ データが存在するかどうかを検出し、存在しない場合はデータベースに接続してデータを取得し、クエリをシリアル化します。結果をファイルに保存すると、今後は同じクエリ結果がキャッシュ ファイルから直接取得されます。
ページにアクセスするたびに、まず対応するキャッシュされたページファイルが存在するかどうかを検出し、存在しない場合はデータベースに接続してデータを取得し、ページを表示すると同時にキャッシュされたページファイルを生成します。次回アクセスしたときにページ ファイルが有効になることを確認します。 (インターネット上のテンプレート エンジンと一部の一般的なキャッシュ クラスには、通常、この機能があります)
ここでは紹介しません。この記事で議論する内容ではありません。簡単に言及するだけです:
Memcached は、データベースの負荷を軽減し、動的アプリケーションのアクセス速度を向上させるために使用される高性能の分散メモリ オブジェクト キャッシング システムです。
Dbcached は、Memcached と NMDB に基づいた分散キー値データベース メモリ キャッシュ システムです。
上記のキャッシュ テクノロジは頻繁なデータベース クエリの問題を十分に解決できますが、データがタイムリーではないという欠点があります。ここでは、私がプロジェクトでよく使用する方法を示します。
ファイルが存在し、タイムスタンプが設定された有効期限よりも小さいかどうかを確認し、ファイル変更タイムスタンプが現在のタイムスタンプから有効期限タイムスタンプを引いた値より大きい場合はキャッシュを使用し、それ以外の場合はキャッシュを更新します。
設定時間内にデータを更新する必要があるかどうかを判断せず、設定時間後にキャッシュを更新します。上記は、適時性の要件が高くない場合の使用にのみ適しています。それ以外の場合は、以下を参照してください。
データが挿入または更新されると、キャッシュが強制的に更新されます。
ここで、大量のデータを頻繁に更新する必要がある場合、最終的にはディスクの読み取りおよび書き込み操作が関与することがわかります。これを解決するにはどうすればよいですか? 私は通常、すべてのコンテンツをキャッシュするのではなく、頻繁に変更されない一部のコンテンツをキャッシュして問題を解決します。ただし、負荷が高い場合は、共有メモリをキャッシュ システムとして使用するのが最善です。
ここでは PHP キャッシュが解決策になる可能性がありますが、その欠点は、依然として各リクエストを PHP によって解析する必要があるため、負荷が高い場合には効率の問題がさらに深刻になることです。この場合、静的キャッシュが使用される可能性があります。
ここで言う静的キャッシュとはHTMLキャッシュのことを指しますが、HTMLキャッシュは通常HTMLを使用する場合は内容が頻繁に変更されないページであるため、一般にデータを更新する必要があるかどうかを判断する必要がありません。データが更新された場合は、HTML を強制的に更新するだけです。
実際、キャッシュ システムには多くの問題が伴います。ここでは、私の通常のキャッシュに関するアイデアのみを紹介します。キャッシュを実装したり、特定のコードを記述したりするソフトウェアの使用については紹介しません。
何か良い解決策がありましたら、以下に提出して一緒に議論しましょう。
exec、system、およびその他の関数を使用して、php でシステムコマンドを呼び出します
多くの場合、PHP の exec、system、およびその他の関数を使用してシステム コマンドを呼び出すと、作業をより適切かつ迅速に完了するのに役立ちます。たとえば、2 日前に .rar ファイルをバッチ処理していたとき、exec は非常に役に立ちました。
今日は、よく使われる通話システムの機能を整理し、私の経験を皆さんと共有します。
注: これら 2 つの関数を使用したい場合は、php.ini のセーフ モードをオフにする必要があります。オフにしないと、セキュリティ上の理由から、PHP ではシステム コマンドの呼び出しが許可されません。
まず、PHP マニュアルでこれら 2 つの関数の説明を見てみましょう:
Exec ---外部プログラムを実行します
構文: string exec ( string command [, array &output [, int & return_var]] )
説明:
exec( ) は指定されたコマンドを実行しますが、何も出力しません。コマンドを実行してコマンドからすべての情報を取得する必要がある場合は、 を使用できます。 passthru() 関数。
パラメータ配列が指定されている場合、指定された配列にはコマンドによって出力された各行が埋め込まれます。 注: 配列にすでに要素が含まれている場合、exec() はそれを配列の末尾に追加します。この関数で要素を追加したくない場合は、配列を exec() に渡す前に unset() を呼び出すことができます。
パラメータ array と return_var が与えられた場合、実行に戻されたステータスコマンドがこの変数に書き込まれます。
注: ユーザー入力からのデータがこの関数に渡されることを許可する場合は、ユーザーがシステムをだまして任意のコマンドを実行できないようにするために、escapeshellcmd() を使用する必要があります。
注: この関数を使用してプログラムを開始し、バックグラウンドで実行している間はそのままにしておく必要があります。そうしないと、プログラムの出力がファイルまたは出力データ ストリームにリダイレクトされるようにする必要があります。そうしないと、PHP がハングアップします。プログラムの実行が終了します。
システム --- 外部プログラムを実行し、出力を表示します
構文: string system (string command [, int &return_var])
説明:
System( )は指定されたコマンドcommandを実行し、結果を出力します。パラメータ return_var が指定されている場合、実行されたコマンドのステータス コードがこの変数に書き込まれます。
注: ユーザー入力からのデータがこの関数に渡されることを許可する場合は、ユーザーがシステムをだまして任意のコマンドを実行できないようにするために、escapeshellcmd() を使用する必要があります。
注: この関数を使用してプログラムを開始し、バックグラウンドで実行している間はそのままにしておく必要があります。そうしないと、プログラムの出力がファイルまたは出力データ ストリームにリダイレクトされるようにする必要があります。そうしないと、PHP がハングアップします。プログラムの実行が終了します。
PHPがサーバーモジュールとして実行されている場合、system()は各行を出力した後にWebサーバーの出力バッファを自動的にクリアしようとします。
成功した場合はコマンドの最後の行を返し、失敗した場合は false を返します。
コマンドを実行して、コマンドからすべてのデータを取得する必要がある場合は、 passthru() 関数を使用できます。
これら 2 つはシステム シェル コマンドを呼び出すために使用されます。
Execはすべての実行結果を$output関数(配列)に返すことができ、$statusは実行ステータス、0は成功、1は失敗を意味します
systerm は $output 関数を提供する必要はなく、同様に、$return_var は実行のステータス コードです。0 は成功を意味し、1 は失敗を意味します。
オープンソースの最大の成功はウェブからもたらされる
実際、全体として、オープンソース運動の最大の成功は Web ではないでしょうか?
おそらく最も有名な例は、Linux、Apache、MySQL、PHP などの隠しドメインの多くの Web サイトの背後にある LAMP です。しかし、考えてみると、さらに多くのことがわかります。
以下は、Web を機能させるいくつかのオープンソース プロジェクトのリストです。
Web ブラウザ市場では、Microsoft のクローズド ソース ソフトウェア IE ブラウザが依然として大きなシェアを占めていますが、同様の機能を備えた他のオープンソース プロジェクトも人気を集めており、成長しています。 Mozilla の Firefox ブラウザと同様です (Flock や PaleMoon と同様にオープンソースです)。 Safari などの Webkit ベースのブラウザも急速に成長していますが、最も有名なのは Chrome です。
モバイル ネットワークを含めると、iPhone、Android、Blackberry 携帯電話のブラウザーは Webkit が優勢です。
これまでのところ、Apache が最も広く使用されている Web サーバー ソフトウェアであり、オープンソースですが、近年では Nginx と呼ばれる軽量サーバー ソフトウェアが人気を集めています。実際、Web サーバー ソフトウェアの上位 3 つのうち 2 つはオープンソースです (例外として Microsoft の IIS は 2 位ですが、1 位には程遠いです)。 さらに、サーバー側の基盤となるソフトウェアの多くもオープンソースです。たとえば、トラフィックの多い Web サイトの多くは、Web サイト訪問者間のキャッシュ レイヤーとして Varnish を使用し、Web サイト データベース間のキャッシュ レイヤーとして Memcached を使用します。これらは多くの例のうちの 2 つにすぎません。
PHP、Perl、Python、Ruby など、インターネットで使用されているほとんどのプログラミング言語とスクリプト言語はオープンソースです。 ただし、完全にゼロから構築されるウェブサイトはほとんどありません。 WordPress、Drupal、Ruby on Rails、Django、Joomla、DedeCMS、Ecshop など、開発者を支援するオープンソースのコンテンツ管理システム (CMS) や Web フレームワークが何百もあると言っても過言ではありません。
オープン ソース ソフトウェアの MySQL は、Web サイト データベースとして断然最も人気がありますが、最近登場した多くの「非リレーショナル (NoSQL)」データベースは言うまでもなく、PostgreSQL など、同様の機能を備えた他のオープン ソース ソフトウェアも存在します。
基盤となるソフトウェアについて話しているので、私たちがインターネットやインターネット上の何かを使用するたびに依存する基盤となるシステムについても言及する必要があります。
Web (さらに言えばインターネット全体) は、ドメイン名解決システムなしでは意味がありません。ご存知のとおり、ドメイン名解決システムを使用すると、ユーザーは IP アドレスの代わりに example.com などのドメイン名を使用できます。 BIND は、DNS サーバー (別名ネーム サーバー) ソフトウェアの事実上の標準であり、もうお気づきかと思いますが、オープン ソースです。
すべての Web サイトはサーバー上で実行する必要があり、そこにオープンソースが君臨します。デスクトップ領域では Windows が主流ですが、Web サイトを実行するほとんどのサーバーでは、オープン ソースの Linux オペレーティング システムが使用されています。他に、freeBSD や OpenBSD も人気があります。
多くの場合、オープンソース ソフトウェアは商用のクローズド ソース ソフトウェアと同じパフォーマンスを提供でき、しかも無料であるため、オープンソース ソフトウェアが非常に人気があるのも不思議ではありません。無料は挑戦しにくい価格です。
もしウェブがこのすべてのフリーソフトウェアで動作しなかったら、おそらく広く受け入れられるのは難しいでしょう。
Web 上にクローズド ソース ソフトウェアが存在しないとは言っていないことに注意してください。明らかに存在します。しかし、統計的に言えば、Web オープンソースの優位性に対する本当の例外は、Microsoft の Windows ベースの一連のシステムです。
さらに、ルーターや同様のデバイス上のオペレーティング システムなど、よりプライベートなクローズド ソース テクノロジーを発見するには、通常はさらに深く掘り下げる必要があります。しかし、それはインターネットであって、Web ではありません。
1980 年代のインターネット、簡単なコミュニケーション、コラボレーションと共有の台頭のおかげで、オープンソース運動が隆盛を極めました。 1990 年代、インターネット インフラストラクチャ上に Web が誕生したとき、オープンソース運動がすぐに役に立ちました。
オープンソースがウェブの大部分を支配していることを否定する人はいないでしょう。オープンソースと Web には協力的かつ共生的な関係があり、相互に利益をもたらし、Win-Win の協力が得られます。だからこそ私たちは、Web がおそらくこれまでのオープンソースの最大の成功であると信じています。 (私たちはティム・バーナーズ・リーを否定するつもりはありません。 注: ティム・バーナーズ・リー、World Wide Web の父であり初代ウェブマスター
。