• ベストアンサー
※ ChatGPTを利用し、要約された質問です(原文:Macについて質問です。)

Macでのファイル編集についての質問

このQ&Aのポイント
  • Macの「/Users/ユーザー名/Sites」内のファイルを別のユーザー名から編集する方法について質問です。Perlのopenを使用してファイルマネージャーのように編集できるのか不明です。
  • 所有権やアクセス権の制約によりopenでは編集できない場合、net2ftpを使用してSFTPサーバーへ接続しデータのやり取りを行うことは可能でしょうか?Hight Sierra以前ではFTP経由で編集できたため、SFTP接続なら可能かもしれません。
  • Net::SFTP::Foreignを使用してPerlからSFTP接続を行うことができますが、ソースコードがわかりません。解説サイトやソースコードの書き方についてご存知の方がいらっしゃれば教えてください。ググっても目的の情報が見つからなかったため、助けをお願いしたいです。

質問者が選んだベストアンサー

  • ベストアンサー
回答No.1

Macについてとタイトルにありますが、Macだから特有のことでなく、 ・ターミナルでperlを実行するだけなら自分のファイルを上書きすることは可能。 ・CGIとして実行するなら、実行オーナーとファイルのオーナーが異なるので上書不可。 という現象はどんなOSでも起きえます。 対策として考えられるのは ・セキュリティーを気にしないなら、対象ファイルやディレクトリのパーミッションを緩める ・suEXECを使ってCGI実行のオーナーを切り替える ・ファイルを上書きする部分を子プログラム化してsudo付きでシステムコールする ・CGIからID/Passwordを指定してftp.やsftpやftps接続する  (ftpでgetしたり、サーバー上に作った一時ファイルをftpでputする) といったところでしょうか。 ただし、このようなファイルマネージャ的なWebアプリを自作するうえでの注意は、 同時編集で修正箇所が消失しないようにする排他処理が必要な点です。 例えば、 A端末で、ファイルを開いて時間をかけて修正してから上書き B端末で、A端末が修正している間に同じファイルを上書き が行えてしまうと、B端末で行った修正箇所が、A端末からの上書きで取り消されてしまいます。 普通のファイルI/Oなら先に編集を開始したほうがファイルロックを行い、 それが終わるまでは他のアプリケーションからは編集できないようにしますが ブラウザからの操作だと、編集途中にロックしたままブラウザの画面を閉じてしまうと、 それをサーバー側は感知できませんから、ロックされたままになって そのファイルが、どこからも修正できない状態になってしまう問題が発生します。 これは、継続的にコネクションしていないステートレスなhttp通信の 特有の問題です。 なので、時限のファイルロック方式するけどAjaxでロックを延長したり 保存前でもAjaxでdraft保存しておいて後から編集する端末に編集を引き継がせたり 同時編集ありきで修正前と修正後の差分のみをマージしたりといった工夫が必要に なるでしょう。 他にも、ファイル一覧のディレクトリ移動をスムーズにするために ファイルリストはある程度の期間はキャッシュさせたいけれども 他端末やアプリケーションから更新されたファイルがあったときに キャッシュにどうやって同期させるかや 開いているままのファイル一覧に 他から更新されたファイルをどうやって反映させるか といった、運用場面のケースをいろいろ想定してちゃんと作ろうとすると、 結構、難易度の高いプログラミングになるでしょう。 (もちろん 同時編集されて修正箇所が消失しても知ったこっちゃないし  ファイル一覧は、ユーザーが手動でリロードするまでそのまま  という方法もありますが) ですので、必要な機能を有している既成のCGIを探されるのが よいかと思いますよ。

humu01jp
質問者

補足

一応、探したんですけど、見つからなくて。探し方が悪いんでしょうけど。 いずれにせよ、回答ありがとうございました。

関連するQ&A