2015-07-09 3 views
0

Я пытаюсь сохранить строку json из файла javascript в локальный файл на сервере с помощью PHP, однако мой json-файл вообще не изменяется. Вот мой Javascript:Сохраните файл на стороне сервера с PHP через Javascript

function saveToFile(data){ 
    jsonString = JSON.stringify(data); 
    $.ajax({ 
    url: 'php/save.php', 
    data : jsonString, 
    type: 'POST' 
    }); 
} 

Обратите внимание, что jsonString является действительной переменной, и я могу войти правильно в консоль.

Вот мой PHP:

<?php 
    $data = $_POST['jsonString']; 
    $f = fopen("../website-contents.json", "w") or die("fopen failed"); 
    fwrite($f, $data) or die("fwrite failed"); 
    fclose($f); 
?> 

Обратите внимание, что даже тесты пытаются сохранить "Hello World", чтобы "test.txt" не работают, или через ошибки.

Наконец, вот моя структура папок: enter image description here

+2

Попробуйте var_dumping вашу переменную $ _POST, может дать вам более глубокое понимание. Ключевой «jsonString», скорее всего, неверен на стороне php. – crowebird

+1

'file_put_contents ($ uploadLocation."/Filename.json ", $ fileJsonString);' Убедитесь, что у вас есть правильные права на запись, где вы собираетесь сохранить это. – ODelibalta

+0

Добавьте сообщение об ошибках в начало вашего файла (ов) сразу после открытия '

ответ

7

Вот ваше решение.

Js код

function saveToFile(data){ 
    jsonString = JSON.stringify(data); 
    $.ajax({ 
    url: 'php/save.php', 
    data : {'jsonString':jsonString}, 
    type: 'POST' 
    }); 
} 

PHP код.

$data = $_POST['jsonString']; 
//set mode of file to writable. 
chmod("../website-contents.json",0777); 
$f = fopen("../website-contents.json", "w+") or die("fopen failed"); 
fwrite($f, $data); 
fclose($f); 
+0

Данные обрабатываются правильно , Спасибо! Тем не менее, я получаю сообщение «fopen failed», даже после установки chmod. Является ли путь внутри fopen относительно PHP/JS или абсолютным? –

+0

вы можете использовать '$ f = fopen (" ../ website-contents.json "," w + ");' вместо '$ f = fopen (" ../ website-contents.json "," w + ") или умереть ("fopen failed"); 'и проверить ошибку? Поэтому я могу лучше понять, что здесь происходит. –

+1

Это была просто ошибка с разрешениями в конце, установка «sudo chmod 777 website-contents.json» решила его! –

1

Я согласен с замечаниями, указывая на то, вы должны иметь проблему разрешения. Однако это не сработает после того, как вы исправили эту проблему. У вас есть

$data = $_POST['jsonString']; 

но где вы установили ключ с именем jsonString? Использовать

function saveToFile(data){ 
    var jsonString = JSON.stringify(data); 
    $.post("php/save.php", { 
    jsonString: jsonString 
    }) 
} 

вместо этого.

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