2013-11-09 67 views
1

我正在建造一個帶有鎖定和解鎖門的迷宮式界面遊戲。我有一個JSON文件,用於跟蹤已鎖定的門,但是在新門被鎖定時我很難重寫它。我想用PHP編寫一個函數來做到這一點,這是我到目前爲止有:file_put_contents不覆蓋文件?

$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實際上並沒有改變文件的。遊戲不讀取新數據,當我手動去檢查文件時,它仍然和以前一樣。我使用我學校的服務器託管文件,所以我不確定它是如何設置的,但是我想知道如果有人對我做錯了什麼有什麼想法嗎?

+0

嘗試了你的代碼。對我來說工作得很好。 –

+1

[** SO **上的這個答案](http://stackoverflow.com/a/7895355/1415724)可能會有所幫助。同時檢查文件權限。 –

回答

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 
} 
+0

這對我來說也是失敗的 – Josephine

+0

把'// FAIL'改成可以給你一些反饋的東西,以便知道'file_put_contents'是否失敗,或者'is_writable'和'chmod'函數是否失敗。如果是晚於需要通過命令行(ssh)或FTP(更改權限)chmod文件的時間。 –

0

如果is_writable測試失敗,則缺少寫入json文件所需的權限。這可能是因爲你試圖寫入的是服務器進程(例如var/www)。請參閱底部帖子,(完全相同的問題)並嘗試chmod 僅用於測試目的。最好不要寫入文件I/O作爲服務器,請嘗試使用PDO或mysqli。

Update JSON file with PHP