質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Q&A

3回答

634閲覧

PHPでr+で読み取った内容に加工を施して上書きしたい

hgfgjjhg

総合スコア8

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

0グッド

2クリップ

投稿2019/05/05 22:55

PHP7でwebアプリを開発しようとしています。
やりたいことは、fopenでユーザーのデータの入ったjsonファイルを開き、flockでファイルに排他ロックをかけます。
その後、jsonファイルの中身を読み取って、必要なデータを更新、追加後もとのファイルに上書きしたいです。
fopenのオプションをr+に設定して作ろうとしたのですが、調べてみるとr+だともとのデータよりも短い内容で上書きしてしまった際にもとのデータが末尾に残るようでした。(https://teratail.com/questions/90548)
どのようにすれば想像通りの機能を実装できるかご教授お願いいたします。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

想像通りの機能

が不明ですが、

調べてみるとr+だともとのデータよりも短い内容で上書きしてしまった際にもとのデータが末尾に残るようでした。

と書いてあるので、今上書きした以降ファイル末尾までのデータを削除したいと言うことなら、ftruncateを使います。

PHP

1ftruncate($f, ftell($f));

投稿2019/05/06 02:55

otn

総合スコア84557

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

otn

2019/05/06 09:52

> が不明ですが、 というのは、ファイル全体の書き換えなのか、ファイルの途中の一部の書き換えなのか不明と言うことです。 この回答は、ファイル全体の書き換えの場合の話です。
guest

0

PHPには限りませんが、、
同じファイル上で書き込まれたデータを書き換えるというのはできないと思っておきましょう
データのファイル上の位置というのは固定ですんで、上書きされるデータが、消すべきデータと全く同一サイズでないと(おっしゃるように)破綻します
これをどうにかするには、
・元ファイルを全部読み出し、データを加工後、ファイルを最初から書き込み直す
・加工後のデータを別ファイルに書き込み、完了後元ファイルを削除、別ファイルをリネーム
という処理が必要になります

投稿2019/05/05 23:24

y_waiwai

総合スコア87774

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

前のファイルが破壊されないように、テンポラリにファイルをつくっておいて
上書きコピーするほうがよいのでは?

投稿2019/05/06 03:54

yambejp

総合スコア114843

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問