PHPでWebアプリを作成していますが、更新システムを構築する時期が来ました。要件の1つは自動更新ですが、これをどのように行う必要がありますか?
cronなしで実行したいので、システムにリクエストが送信されたときに更新を確認する必要があります。これは、重要な特権を持つ管理者がログインしている場合にのみ実行する必要があります。最高であるが、少なくとも1人のクライアントは、数か月ごとにログインするだけで、セキュリティ更新プログラムを取得したいので、これを望まないと言っています。
おそらく、最新のバージョン番号とダウンロード用の URL を含む小さな XML ファイルを返すページをサイトに配置できます。
<xml>
<version>1.x.y</version>
<url>http://example.com/current.tgz </url>
</xml>
その後、管理者が実行してアップグレードすることを選択した場合、アプリケーションは XML ファイルへの URL と現在のバージョン番号以外は何も知る必要はありません。
もちろん、これは非常に限定された例であり、心ゆくまで拡張できます。
もちろんバージョン管理を使用してください!
私はこの「プラグイン」をほとんどのプロダクション サイトに含めています。もちろん、最初にこのための権限が制限されたロボット svn アカウントを作成し、svn をサーバーにインストールする必要があります。
<?php
echo(' updating from svn<br>' );
$username = Settings::Load()->Get('svn','username');
$password = Settings::Load()->Get('svn','password');
echo(" <pre>" );
$repos = Settings::Load()->Get('svn' , 'repository');
echo system ("svn export --username={$username} --password {$password} {$repos}includes/ ".dirname(__FILE__)."/../includes --force");
echo system("svn export --username={$username} --password {$password} {$repos}plugins/ ".dirname(__FILE__)."/../plugins --force");
die();
もちろん、これを .htpasswded サイトの背後に置くことを確認し、SVN から「運用設定」を更新しないことを確認してください。ほら、サイトへの 1 つの HTTP クエリで完全なコード ベースを更新します :) SVN はファイルを自動的に上書きします。隠しファイルや隠しフォルダーは残されておらず、特定のバージョンに簡単に更新または復帰できます。チームが行う必要があるのは、SVN リポジトリにコミットし、テスト環境でこのコードを実行し、すべてが機能することを確認してから、本番環境で実行することだけです:)
更新プログラムを作成するのは誰ですか? それがあなたなら、更新が行われたときにサーバーにプッシュされないのはなぜですか? 更新が書き込まれたら、それを rsync するだけで、サーバーはすぐに最新の状態になります。これは cron よりも優れており、ユーザーがページの読み込みを待っている間のチェックよりも確実に優れています。