Почему не работает вызов file_get_contents('folder/file.json')?

Здравствуйте,
есть лэндинг, в нем такая структура:

index.php
 |
 +-assets
 |    +-html - тут все части лэндинга - файлы php и html (header, footer, form ...)
 |    |  |
 |    |  +-data - тут json файлы для загрузки данных
 |    |  |  |
 |    |  |  +-persons.json - сотрудники
 |    |  |  |
 |    |  |  +-news.json - новости


Файл index.php просто содержит вызов нужных модулей из 'assets/html/'. Т.е. так
<?php 
	require_once '/assets/html/file.php';
?>


В каталоге 'data' (полный путь 'assets/html/data') находятся файлы json в которых вся информация, которую надо выводить.

В любом файле (например top_news.php) в каталоге html ('assets/html') пишу:
<?php
	$url = 'data/news.json'; //путь до json файла json
	$data = file_get_contents($url);
?>


Проблема в том, что file_get_contents($url) не видит нужного файла.

Я получаю ответ (на экране)

'Warning: file_get_contents(data/news.json): failed to open stream: No such file or directory in C:\OpenServer\domains\tnv4\html\top_news.php on line 3'

Я пробовал расположить каталог data (с вложенными json файлами) в папке assets (то есть так assets/data/news.json).

Но вызов файла news.json с помощью
$url = '../data/news.json';
$data = file_get_contents($url)
;

тоже не работает.

Локально я использую openserver, php_7.1

На сервере: centos 7.9, PHP 5.4.16

Пожалуйста, подскажите, как правильно получить файл json?
  • Вопрос задан
  • 1132 просмотра
Пригласить эксперта
Ответы на вопрос 3
nokimaro
@nokimaro
Меня невозможно остановить, если я смогу начать.
$url = __DIR__.'/data/news.json';
$data = file_get_contents($url);


__DIR__ будет содержать дерикторию относительно файла в котором происходит исполнение
Для файла C:\OpenServer\domains\tnv4\html\top_news.php соотв-но значение будет
C:\OpenServer\domains\tnv4\html

Старайтесь всегда использовать полные пути, а не относительные
Ответ написан
@ivanovskii49 Автор вопроса
Сам догадался использовать абсолютный путь (ниже).
Но все равно Большое спасибо за комментарии!

Правда теперь, появилась еще одна еще более странная ошибка:
$path_to_jsonFolder = '/var/www/.../data/www/site.ru/assets/data/';
$a = $path_to_jsonFolder . 'all-news.json';

$string = file_get_contents($a); //работает

$a = json_decode($string, TRUE);//не работает, возвращает Null. 
echo $a; //Null


совершенно не могу понять как так.
Ответ написан
Комментировать
@ev09
Кодировку файла нужно поменять
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы