1

ドアのロックとロック解除を備えた迷路型のインターフェイスを備えたゲームを構築しています。ロックされているドアを追跡する JSON ファイルがありますが、新しいドアがロックされたときにそれを書き換えるのに問題があります。これを行うためにPHPで関数を作成しようとしていますが、これは私がこれまでに持っているものです:

$jsonString = file_get_contents('info.json');
$data = json_decode($jsonString,true);
$data["doors"][0]["right"] = true;
$newJsonString = json_encode($data);
var_dump($newJsonString);

file_put_contents('info.json', $newJsonString);

var_dump正しいデータを生成していfile_put_contentsますが、実際にはファイルをまったく変更していません。ゲームは新しいデータを読み取らず、手動でファイルを確認すると、以前と同じままです。学校のサーバーを使用してファイルをホストしているので、どのように設定されているかわかりませんが、私が間違っていることについて何か考えがあるかどうか疑問に思っていましたか?

4

2 に答える 2

2

内容を書き込もうとする前にis_writableを使用してください。info.json が書き込み可能でない場合は、ファイルのアクセス許可をchmodしてから、もう一度書き込みを試みてください。

$jsonString = file_get_contents('info.json');
$data = json_decode($jsonString,true);
$data["doors"][0]["right"] = true;
$newJsonString = json_encode($data);
var_dump($newJsonString);

$filename = 'info.json';

// Check if writable, if not chmod and set if successful
$writable = ( is_writable($filename) ) ? TRUE : chmod($filename, 0755);
if ( $writable ) {
    file_put_contents($filename, $newJsonString);
} else {
    // FAIL
}
于 2013-11-09T17:48:31.660 に答える
0

is_writable テストが失敗した場合、json ファイルへの書き込みに必要な権限がありません。これはおそらく、サーバー プロセス (var/www など) として書き込もうとしていることが原因です。一番下の投稿 (まったく同じ問題) を参照し、テスト目的でのみchmod を試してください。サーバーとしてファイル I/O に書き込むのではなく、PDO または mysqli を使用することをお勧めします。

JSON ファイルを PHP で更新する

于 2013-11-09T18:07:31.403 に答える