php to json: чтение файла возвращает php-код

123
17

Я пытаюсь настроить php-скрипт, который возвращает некоторые записи db в json файл. Сценарий работает, когда я читаю его с другого веб-сайта, однако, когда я пытаюсь прочитать вывод из той же папки (для целей тестирования), он не работает. php-код для генерации json:

header('Cache-Control: no-cache, must-revalidate');
header('Expires: Mon, 01 Jan 1996 00:00:00 GMT');
header('Content-type: application/json');
//snipped sql magic
echo json_encode($rows);

Когда я нахожу страницу на своем сайте, она вернет то, что ожидается:

[{"id":96,"name":"name1"},{"id":39,"name":"name2"}]

Все идет нормально. Однако, когда я пытаюсь прочитать вывод этого файла в другом php файле в той же папке, например

$json = file_get_contents(urlencode('json.php')); //same result without the urlencode
echo var_dump($jsonData);

Он вернет php-код, а не содержимое json файла. Я не понимаю, почему это так. Есть предположения?

спросил(а) 2013-10-02T11:09:00+04:00 7 лет назад
1
Решение
82

Это абсолютно нормально. Метод "file_get_contents" читает содержимое файла и не выполняет скрипты php, которые он содержит.

Вы можете использовать "include" или "curl" для этого.

"include" будет читать файл и вставить скрипт php, который он содержит, в текущий скрипт. "curl" будет вызывать URL-адрес, поэтому он фактически попросит ваш сервер для php файла.

Поскольку вы используете "заголовок" внутри вашего скрипта, он сказал бы, что "завиток" - это то, что вам нужно, но, возможно, "include" достаточно.

Вот пример CURL:

$ch = curl_init("http://localhost/your/script.php");

curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HEADER, 0);

$json = json_decode(curl_exec($ch));
curl_close($ch);

Больше информации:

file_get_contents : http://php.net/manual/fr/function.file-get-contents.php
include : http://php.net/manual/fr/function.include.php
curl : http://php.net/manual/fr/book.curl.php

ответил(а) 2013-10-02T11:12:00+04:00 7 лет назад
40

Вы просто возвращаете данные json_encode ed в тестовый файл.

// json_data.php 
return json_encode(array(
'id' => 5,
'name' => 'John'
));

И получить эти данные с помощью include

header('Content-Type: application/json');
$json = include 'json_data.php';
echo urlencode($json);

Или вы даже можете вернуть уже urlencode ed данные в скрипт json_data.php.

return urlencode(json_encode(array(
'id' => 5,
'name' => 'John'
)));

Надеюсь, что это поможет вам.

ответил(а) 2013-10-02T11:25:00+04:00 7 лет назад
Ваш ответ
Введите минимум 50 символов
Чтобы , пожалуйста,
Выберите тему жалобы:

Другая проблема