2

私は現在file_put_contents、私のJSONファイルを更新するために使用しようとしています。これは私のPHPが現在どのように見えるかです:

$result = file_put_contents('Resources/logs/file.json', $newJsonString);
if($result === true) {
    echo "true";
} else {
    echo "false";
}

ただし、常に を返しますfalse。それにもかかわらず、両方のディレクトリのアクセス許可を 777 に設定しましResourceslogs。また、ファイルのアクセス許可を 777 に設定しましたfile.json

file_get_contents同じファイルからの同じパスで動作するため、パスも正しいです。

私の主張をさらに証明するために、ユーザーがディレクトリ (およびその中のすべて) に書き込むsudo chown -R www-data:www-data /var/www/html/core/Resources/許可を与えるために実行しました(これにより、PHP スクリプトをオンラインで実行することによって JSON ファイルに書き込むことができると想定しています)。 .Resourceswww-data

これが役立つかどうかはわかりませんがPOST、別のサーバー/Web サイトから JavaScript 経由でデータを送信して、この PHP スクリプトも実行しています。

なぜ世界でfile_put_contents まだfalseを返し、ファイルに書き込んでいないのですか? 実行後、JSON ファイルは常に空白になります。

補足コード:

file_put_contentsこれは、次のセクションを含むコード全体です。

$jsonString = file_get_contents('Resources/logs/file.json');
$data = json_decode($jsonString);
$data->coins = $data->coins + $coins;
$data->uses = $data->uses + 1;
print_r($data);
$newJsonString = json_encode($data);
$result = file_put_contents('Resources/logs/file.json', $newJsonString);
if($result === true) {
    echo "true";
} else {
    echo "false";
}

...これが JSON ファイルです。

{"coins":"0","uses":"0"}

どんな助けでも大歓迎です.私はすでに丸一日この問題を解決しようとしています.

編集1:

これについて言及するのを忘れていましたが、このコードは昨日、約 1 時間問題なく動作していました。その後、突然動作が停止し、JSON ファイルが空白になり始めました。

編集2:

Apache エラー ログをクリアしたところ、スクリプトが再び動作するようになりました (これは良いことです)。しかし、file_put_contentsまだ戻ってきてfalseいます。何が起こっている...

編集3:

Laurent Wartel のおかげで、if ステートメントを更新したところ、 file_put_contentsfalse が返されなくなったようです。

if($result === false) {
    echo "Error";
} else {
    echo "All good, $result bytes written";
}
4

3 に答える 3