Запись данных JSON в простой текстовый файл - PullRequest
5 голосов
/ 04 октября 2010

Как всегда, я искал форумы и гуглил себя немного безумно, не имея возможности понять, что я делаю неправильно.Поэтому я обращаюсь к великим умам, часто посещающим этот сайт, в надежде найти ответ.Я создаю приложение, которое будет взаимодействовать с базой данных, и при этом я пытаюсь научиться использовать JSON для извлечения и публикации данных в базу данных через iPhone, используя различные примеры, найденные в Интернете.Мне удалось получить данные из Интернета с помощью JSON и показать их в виде таблицы, однако, когда я пытаюсь POST-данные, кажется, ничего не работает.По сути, у меня есть простой php-скрипт, который должен записать полученные данные в текстовый файл (см. Ниже).

<?php
//header('Content-type: application/x-json');

$myFile = "testFile.txt";
$fh = fopen($myFile, 'w') or die("can't open file");

$stringData = var_dump($_POST);
fwrite($fh, $stringData);

$stringData = "=== JSON Decoded ===";  
fwrite($fh, $stringData);

$stringData = $_POST["tmp"];
fwrite($fh, json_decode($stringData));

$stringData = "=== JSON Decoded ===";
fwrite($fh, $stringData);

fclose($fh);
?>

Проблема в том, что скрипт, похоже, ничего не получает.При публикации на него создается файл, который выглядит следующим образом.Таким образом, он создает файл и все, но в нем просто ничего нет.

=== JSON Decoded ====== JSON Decoded ===

Код ниже - это мой метод POST в XCode.

-(IBAction)poststuff:sender{

    NSString *stuffToPost = [[NSString alloc] initWithFormat:@"Work, damn you!"];

    NSURL *jsonURL = [NSURL URLWithString:@"http://localhost:8888/iWish/json_post.php"];

    NSData *postData = [stuffToPost dataUsingEncoding:NSASCIIStringEncoding allowLossyConversion:YES];

    NSString *postLength = [NSString stringWithFormat:@"%d", [postData length]];

    NSLog(@"Stuff I want to POST:%@", stuffToPost);
    NSLog(@"Data I want to POST:%@", postData);

    NSMutableURLRequest *request = [[[NSMutableURLRequest alloc] init] autorelease];
    [request setURL:jsonURL];
    [request setHTTPMethod:@"POST"];
    [request setValue:postLength forHTTPHeaderField:@"Content-Length"];
    [request setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];
    [request setHTTPBody:postData];

    NSError *error;
    NSURLResponse *response;

    NSData *serverReply = [NSURLConnection sendSynchronousRequest:request returningResponse:&response error:&error];
    NSString *data = [[NSString alloc] initWithData:serverReply encoding:NSUTF8StringEncoding];
    NSLog(@"Raw Data:", data);
}

Консоль выглядит так, когдазапуск метода и запись пустого текстового файла:

2010-10-04 14:10:16.666 iWish[38743:207] Stuff I want to POST:Work, damn you!
2010-10-04 14:10:16.668 iWish[38743:207] Data I want to POST:<576f726b 2c206461 6d6e2079 6f7521>
2010-10-04 14:10:16.673 iWish[38743:207] serverReply:

Мне кажется, что данные есть, и отформатированы, и так далее, но по какой-то причине не отправляются или не принимаются.Мы надеемся, что где-то в коде есть какая-то глупая ошибка, так как я смотрю на это уже два дня.

Буду признателен за любую помощь.Спасибо!

1 Ответ

3 голосов
/ 04 октября 2010

С fwrite вы можете писать только строки, а var_dump не возвращает строку.И ..., json_decode не работает, потому что ваш почтовый запрос не является допустимым JSON.

Итак, я думаю, что это будет работать для вас:

$myFile = "testFile.txt";
$fh = fopen($myFile, 'w') or die("can't open file");
$stringData = json_encode($_POST);
fwrite($fh, $stringData);
fclose($fh);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...