- 締切済み
htmlについて質問です。
htmlについて質問です。 ユーザーが簡単にファイルを更新できるシステムを構築したいのですが 行き詰ってしまったので、質問させていただきます。詳細は追記に記載します。 現在、ユーザーから更新するファイルをPDF形式で貰い、 そのファイルを命名規則に従い名前変更(ファイルごとのユニーク名)、指定フォルダへの格納を行い、 HTMLのソース書き換え(ファイル名の部分)を行っているのですが、 大変手間がかかり、システム管理者がいないときには更新が出来なくて困っています。 そこで、サーバAとサーバBで同期を取り、サーバAの指定フォルダに簡単な命名規則(ユニークではない名前) に従い、名前変更を行い格納すると、サーバB側で自動更新されるシステムを構築しました。 命名規則がユニーク名でないのはHTMLのソースを書き換える必要がなくなるのですが、 誰かがWeb上でそのファイルを開いていると排他がかかってしまい、サーバAからサーバBに ファイルデータが上書きできなくなる現象が発生しています。 この事象を解決する案はなにかないでしょうか? もしプログラムを組む必要があるならばその構文を教えていただけると助かります。 ※サーバAとBでわざわざ同期をとらせて遠まわしに更新するのはユーザーには触れられたくないファイルや情報が 格納されているからです。
- みんなの回答 (2)
- 専門家の回答
みんなの回答
- geshon
- ベストアンサー率61% (44/72)
一台のサーバで公開する情報とユーザに公開したくない情報の権限を 適切に設定して、共有フォルダなりFTPサーバなりを公開すればよいだけ ではないでしょうか? どのファイルが最新かが分かりにくいので、例えば編集日時や編集者を ファイル名の先頭に書くなどの運用を徹底させればよいでしょう。 そもそも、サーバを2台用意しなければユーザに触られたくないファイルや 情報と公開したい情報の権限の設定が適切に分けられないサーバの環境と いうのがわかりません。 Webでの公開に飽くまでもこだわるならば、ファイル添付が可能な掲示板 システムを運用すれば良いのではないでしょうか? もともとの質問に回答するならば、どこかで排他処理的なことを行えば 良いはずです。 例えば以下のような形にする。 1. 公開サーバにファイルを公開するファイル名とは別名で転送する。 ファイルの転送が完了するまで待ってから、2 へ移る。 2. もともとのファイルが削除出来るまで待ってから、削除する。 3. 転送された新しいファイルを公開するファイル名にする。 例えば finish というファイルの存在で、転送可能かと転送終了を判断する ようにします。foo.pdf というファイル名で公開し、foo.pdf.tmp という ファイル名で転送する場合、 転送するサーバは ・finish というファイルが無いことを確認してから、foo.pdf.tmpの転送を開始する。 ・転送が正常に終了したことを確認したら、finish というファイルを作成する。 転送されるサーバは ・finish というファイルが有ったらば、foo.pdf を削除 ・foo.pdf が削除されたと事を確認 ・foo.pdf.tmp のファイル名を foo.pdf に変更 ・finish のファイルを削除 バッチファイルで書くとこんな感じでしょうか :Loop if not exist finish goto Loop :DelFoo del foo.pdf if exist foo.pdf goto DelFoo :MoveTmp move foo.pdf.tmp foo.pdf if not exist foo.pdf goto MoveTmp :Delfinish del finish if exist finish goto Delfinish goto Loop ただ、このまま使用すると、CPUパワーばかり食ってしまいますし、 エラーが発生したときにはリトライを永遠繰り返すだけなので 実用的ではないかと思います。
robocopyコマンド等、自動でリトライする同期方法にしてはいかがでしょうか?
お礼
回答ありがとうございます。 リトライも確かにいいかもしれませんが、やはり新着情報がアップされるので ファイルを格納してから遅くとも1時間以内にはWeb上に反映させたいのです。 根本的な対策にならずということで今回の対策は見送らせていただきます。 折角回答を下さったのに申し訳ありません。