3

ケース:
現在多くのユーザーによって実行されている PHP スクリプトがあります。
このスクリプトは完了するまでに時間がかかります (たとえば、ブラウザからデータを取得し、処理し、データベースを更新するなど)。

ここで、スクリプトを変更し、FTP クライアントを使用してサーバーにアップロードします。FTP クライアントは喜んでアップロードし、アップロード済みと表示します。


ここで実際に何が起こったのでしょうか?
変更したスクリプトをアップロードすると、現在の実行はどうなりますか?

私が思いついた可能性は次のとおりです。

1)現在のすべての実行はねじ込まれています。
新しいスクリプトがアップロードされると、実行が停止しました。これが事実である場合 (そうでないことを祈ります)、現在の実行に影響を与えずにスクリプトをサーバーにアップロードするにはどうすればよいでしょうか?

2)現在の実行は古いスクリプトで完了します。新しいリクエストが来ると、新しく変更されたスクリプトで処理されます。

3)他に何か?

4

2 に答える 2

5

かなりの時間をかけてindex.php集中的な計算を行ってから、process.php

訪問者があなたのウェブサイトに来て、ロードしindex.phpます。これは、Web サーバー ソフトウェア (Apache、nginx、IIS など) によってメモリに読み込まれ、訪問者に提供されます。訪問者が でこれらの計算を実行している間に、とindex.phpの両方の更新バージョンをアップロードすることにしました。この時点で、訪問者は の古いバージョンを実行し続け、ページを更新するまで新しいバージョンは表示されません。index.phpprocess.phpindex.php

process.phpただし、古いバージョンのindex.phpが呼び出しを行うと、新しいバージョンの が表示されます。これは、サーバーが呼び出されたファイルを読み取り、それをメモリにロードして、サーバーとユーザー間のセッションを作成するユーザーに提供するためです。ユーザーが部分的にアップロードされた状態で process.php または index.php を取得しようとすると、エラーが発生します。

于 2012-06-21T13:36:04.457 に答える
1

サーバーに APC がある場合、apache を再起動するまでスクリプトは古いコードで実行されます。

そうでない場合は、単にわかりませんが、私は解決策2に投票します。実行時にスクリプトを「メモリ内」に置き、実行終了時に破棄する必要があります。

于 2012-06-21T13:22:50.933 に答える