4

今すぐやる必要はありませんが、将来のことを考えて...

カスタム コードの cms を使用して、Web サイトを少しの間「オフライン」にする方法は何ですか? つまり、管理者が管理パネルにログインし、ボックスにメッセージを入力し、フォームを送信する機能を提供します。そのメッセージは、ユーザーが管理者でない限り、他のページではなくユーザーに表示されます。

私は以前にこれを行い、xmlファイルが存在する場合に使用し、xmlファイルからコンテンツをロードし、管理者のみがログインできるログインボックスを使用して、メッセージの背後に構築背景を配置します。管理者がボックスにメッセージを入力するときテキストをxmlに保存しました。彼らがサイトを「復活」させたとき、それは単にxmlファイルを削除するだけでした.

唯一の問題は、サイトが大きくなると、アクセス数が増え、ページの読み込みごとにファイルの存在を確認するのが遅くなることでした。誰かが私にとってより良い解決策を持っていますか?

ありがとう。

4

4 に答える 4

6

これがApache上にあると仮定します。

可能であれば、すべてのリクエストを「サイトがダウンしています」というメッセージに.htaccess再ルーティングするファイルを使用してこれを行うことをお勧めします。

何かのようなもの:

RewriteRule (.*) /downmessage.php [L]

(画像リソースもリダイレクトされることに注意してください)

PHP 側のフラグ チェックやオフライン メッセージと比較すると、これは高速であり、アップロードされた画像やスタイル シートなどのリソースにも到達できないという大きな利点があります。ヒット...

これらのリソースがブロックされない PHP ベースの「オフライン」メカニズムでは、誰かが URL を知っている場合でも一部のリソースにアクセスできるという事実をユーザーに説明するのは非常に困難です (「しかし、サイトを停止しましたよね? ") そして、公開された画像に関する法的な問題が原因でサイトが削除された場合 (誰にでも起こり得ることです!)、サイトの所有者が知らないうちに画像にアクセスできる可能性があります。

これの欠点はmod_rewrite、サーバー上にモジュールが必要なことと、PHP が.htaccessファイルへの書き込みアクセス権を持っている必要があることです。どちらも常にそうであるとは限りません。

ただし、この方法には利点がありますが、変更を実装する前に、質問の基本的な前提を確認する価値があります。あなたは、テイクダウン XML ファイルのチェックに時間がかかりすぎると言っています。そうではないと思います。file_exists()チェックは内部的にキャッシュされ、非常に多くのリクエストに対しても顕著な速度低下を引き起こすことはありません。平均的な Drupal または WordPress ページでは、リクエストごとに数十のインクルード ファイルが読み込まれます。比較すると、単一の file_existsは見劣りします。

于 2010-09-03T13:39:32.517 に答える
1

最も簡単な方法は、(ローカル) ファイルの存在を確認することです (オプションで、/etc/nologin のようにその内容を出力します)。運用担当者がサイトを停止したい場合は、各 Web サーバーで個別にサイトを作成できます。

データベースにアクセスする前に、すべてのページで実行される一般的なコードでこれを行います。

これを行う理由は、Ops がメンテナンス期間中にデータベースをオフラインにする可能性があるためです。これをデータベースに保存することはできません。

ローカル ファイルの存在を確認することは、オーバーヘッドが非常に少ない操作であり、通常の場合のパフォーマンスに大きな影響を与えることはありません。

于 2010-09-03T18:20:08.600 に答える
1

ただのアイデア:

データベース ハンドラ (例: maintenance = TRUE) にフラグを設定すると、どのデータベース クエリを許可するか許可しないかを制御できます。ほとんどの場合、サイトのメンテナンス中はデータベースの読み取りのみを許可する必要があります。

注: これは、すべてのデータベース リクエストが制御されている場合にのみ機能します。

于 2010-09-03T13:37:11.687 に答える
0

おそらく、APC 値を設定する可能性があります。これらはメモリに保存されるため、非常に高速です。ただし、サーバーの再起動後は APC 値が保持されないことを忘れないでください。したがって、非常に長期間にわたって「メンテナンス モード」が必要な場合は、代わりにデータベースに値を保存する必要があります。

于 2010-09-03T13:39:58.530 に答える