0

私はローカルでコーディングとテストを行う Web サイトを持っています。準備ができたら、FTP 経由でファイルをリモート サーバーにアップロードしますが、これは時々少し遅くなる可能性があります。

現在アップロードされているページの require_once を含むページにユーザーがアクセスしようとすると、その特定の時点でファイルが存在しないか、部分的にしかアップロードされていないように見えるため、エラーが発生します。ユーザーが example.php などのページに直接アクセスしようとしても、同じ問題が発生する可能性があります。

ファイルの最後の行にマーカーがあるかどうかをチェックするカスタム インクルード関数を作成することで、require_once の問題を解決しましたが、これは非インクルード ページには役に立たず、本当に面倒です。

エラーでユーザーを怒らせずにサイトを更新するより良い方法はありますか?

4

4 に答える 4

2

FTP 以外の展開オプションを調べましたか? SSH 経由で動作するCapistranoなどの多くの展開ツールは、新しいファイルを新しいフォルダーにコピーcurrentし、アップロードと更新のプロセス全体が終了した場合にディレクトリを新しいフォルダーにシンボリック リンクします。これにより、アトミック (すべてかゼロか) の更新が保証されます。

于 2013-01-05T10:13:22.500 に答える
0

はい、あなたのメインの Idex ファイルに witch 最初に次のようなものをアップロードする必要があります:

<h1>Page under update</h1>
<h2>Please revisit after 10 minuts</h2>
<?php die();?>
// ... Your code is belowe

これで、他のファイルを更新できます。終了したら、上記の行をメインの index.php から削除します。

于 2013-01-05T10:07:27.677 に答える
0

1. 次の方法で、すべてのエラー報告をいつでもオフにすることができます。

error_reporting(0);

(まあ、正直に言うと、悪い解決策です)。

2. しかし、それはおそらくあなたが望むものではありません。エラーを黙らせるもう 1 つの方法は、行の前に @ を追加することです。したがって、次のように書くことで解決できます。

@require_once(FILE)

(繰り返しますが、悪い解決策です。エラーを黙らせたくないだけです)。

3. require_once の代わりに include_once を使用すると、ファイルが存在しない場合でもページの読み込みを続行できます。

(おそらくもっとうまくやれるでしょう?)

4. 最も推奨されるのは、最初に file_exists が存在するかどうかを確認してから、やりたいことを実行することです。コードの残りの部分でそのページが必要な場合は、独自のカスタム エラー メッセージを挿入して、ページの読み込みを停止することができます。

try {
    if (!file_exists('page.php')) {
        throw new Exception('Page has not been found, please try again later.');
    }
    if (!@include_once('page.php'))
    {
        throw new Exception('Page under construction, please try again later.');
    }
}
catch(Exception $e) {    
  echo $e->getMessage();
}

(それが本当のことだと思います)。

于 2013-01-05T10:12:03.103 に答える
0

シンボリック リンクを使用して Web アプリケーション ディレクトリをポイントし、Web サーバー構成でそのシンボリック リンクを参照します。ライブ Web アプリとは別のディレクトリにすべてをアップロードします。すべてが整ったら、シンボリックリンクを変更するだけです。

編集

あるいは....オペコードキャッシュにAPCを使用している場合は、すべてをアップロードし、オリジナルはまだオペコードキャッシュにあるはずです(実稼働サーバーではapc statテストを無効にする必要があります)。すべてがアップロードされたら、オペコード キャッシュをフラッシュします。

于 2013-01-05T10:13:27.283 に答える