こんにちは。
PHPで、既に存在しているファイル「aaa.cgi」に対し、
「排他ロック+何かしら処理+ファイル更新」という処理をしようと思っています。
<aaa.cgi の中身>
あああああ
いいいいい
ううううう
<やろうとしている処理>
排他ロックを使用して、aaa.cgi の先頭や真ん中に文字を追加したり書き換えたりする。
イメージとしては次のような感じです。読み込みには配列(file関数)を利用したいと思います。
PHP
1$filename="aaa.cgi"; 2$fp=fopen("$filename", "r+"); 3if(flock($fp, LOCK_EX)) 4{ 5 $hairetsu=file("$file"); 6 7 # 何かしら処理 8// array_unshift($hairetsu, "なにこれ\n"); // 例えば先頭に追加 9// array_splice($hairetsu, 2, 0, "なにこれ\n"); // 例えば3行目に挿入 10 11// ?????? // 【※書き換えの処理※】 12 flock($fp, LOCK_UN); 13} 14fclose($fp);
現在、この【※書き換えの処理※】で何かしらうまいコードを差し込んで、
実現できないかを検討しているのですが、いかがでしょうか…
fwrite() ではstring型限定、file_put_contentsでは読み込みからの排他ロック実装が
問題としてあって解決法を探っています。
<別の解決策>
PHP
1$filename="aaa.cgi"; 2file_put_contents("$filename", "なにこれ", FILE_APPEND | LOCK_EX);
追記モードを使ってこのようにすると、aaa.cgi に排他ロックで追記できるのですが、
この場合末尾に追記されるので、上記のようにファイル先頭に追記したり、
ファイル中央付近に追記するような操作があれば…
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2018/09/30 09:10 編集
2018/09/30 10:34