1

私は文書管理システムを書いています。要求された機能の 1 つは、ユーザーと php の両方がアクセスできる場所に特定のファイルをシステムにコピーさせることができるようにすることです。ここから、ユーザーはファイルを直接編集できます。必要なことは、編集したファイルをドキュメント管理システムに新しいバージョンとして自動的に保存することです。私の質問は、この最後の点に関するものです。

ユーザーが特定のファイルのすべてのバージョンを表示できるページがあります。このページが誰かによってアクセスされたときに、編集されて現在閉じられている関連ファイルがあるかどうかをphpがチェックし、それを適切な場所に移動してバージョン情報を提供することがクールだと考えていました. これは可能でしょうか?たとえば、ユーザーが MS Word を使用してファイルを編集している場合、php はそのファイルが使用されているかどうかを知ることができますか? はいの場合、どのように?

もう 1 つの方法は、定期的に (魔女の時間などに) 編集されたすべてのファイルを取得し、ユーザーがクリックして編集が完了したことを知らせる便利な「同期」ボタンを用意することです。

ここに私が試したいくつかのものがあります: 群れ: 使用中のファイルに対して false を返すと思いました。間違った fstat: 私が言うことができる限り、有用なものは何も返されません リンク解除は開いているもので機能することがわかりました

何か案は?

また、WindowsとLinuxで動作する必要があります...

アンドリューが単語ファイルに対応する「編集」ボタンをクリックすると、単語ファイルが特定の場所にコピーされます。その後、Andrew は MS Word を使用してそれを編集し、変更を保存して (複数回可能)、閉じます。私がアンドリューにやりたいことはそれだけです。ファイルが閉じられていることをコードで確認してから、それを処理したい

4

2 に答える 2

3

開いているファイルごとに、ファイル「filename.lock」(または「filename.lck」) を作成できます。そして、ロックが解除されたら、ファイル「filename.lock」(または「filename.lck」) を削除します。

また、ファイル「filename.lock」(または「filename.lck」)が存在する場合、ファイルがロックされているかどうかを確認できます。

于 2012-05-04T10:03:21.397 に答える
2

unix OS で実行している場合は、次のような戦略を実装できます。

  1. このようなbashスクリプトを書きますlsof | grep /absolute/path/to/file.txt

    それをパラメータ化することもできます

  2. そのスクリプトをphpから思い出してください

<?php $result=shell_exec("myScriptPath"); echo($result); ?>

誰もファイルを開いていない場合、bash スクリプトはステータス 0 を返し、それ以外の場合は 256 (1) を返すことに注意してください。

于 2012-05-04T09:56:55.823 に答える