2013-11-09 3 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); 

The 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'. Если это позже, чем вам понадобится chmod файл через командную строку (ssh) или через FTP (сменить разрешения). –

0

Если ошибка is_writable не удалась, вам не хватает разрешений, необходимых для записи в файл json. Вероятно, это связано с тем, что вы пытаетесь написать в качестве процесса сервера (например, var/www). Пожалуйста, обратитесь к нижнему сообщению, (точно такая же проблема) и попробуйте chmod только для целей тестирования. Лучше всего не писать в файл ввода-вывода в качестве сервера, попробуйте использовать PDO или mysqli.

Update JSON file with PHP

Смежные вопросы