2017-02-06 3 views
-2

У меня есть этот внешний json-файл. С простым кешем. Локальный он отлично работает. Но в Интернете есть проблема, связанная с foreach. Но этой проблемы не было раньше. Я установил права файлов и папок на 0777. Так что на самом деле это не проблема. Но если файл кэша будет сгенерирован, то права будут снова на 0644.читать json файл с php // проблемы с правами // как решить

Ниже приведен код и здесь предупреждение. http://www.bonc.at/gng/events.php

Пожалуйста, дайте мне подсказку.

$srcUrl = 'http://ginger-gin.redox-labs.com/api/read_db.json'; 
$cacheFile = "cachefile.json"; 
$cacheupdatetime = 3600; // 3600 Sekunden = 1 Stunde; Datei nur ein Mal pro Stunde neu holen 

// --- Cache --- 
$updatecache = false; 
if (file_exists($cacheFile)) { 
    $timediff = time() - filemtime($cacheFile); 
    if ($timediff > $cacheupdatetime) { 
     $updatecache = true; 
    } 
} else { 
    $updatecache = true; 
} 
if ($updatecache) { 
    $str = file_get_contents($srcUrl); 
    file_put_contents($cacheFile, $str); 
} 
// --- /Cache --- 
// json aus cache holen und in array dekodieren 
$jsonStr = file_get_contents($cacheFile); 
$dataArray = json_decode($jsonStr, true); 

// eigene events Tabelle bauen und keys aus der events-table-definition setzen 
$events = array(); 
foreach ($dataArray['events'] as $value) { 
    $events[] = array_combine($dataArray['tables']['events'], $value); 
} 
// events Array ausgeben 
print_r($events); 
// oder so für Browser 
// print('<pre>' . print_r($events, true) . '</pre>'); 
// Beispiel HTML 
print('<div>'); 
foreach ($events as $event) { 
    print('Location: ' . $event['en_location'] . '<br/>'); 
    print('Description: ' . $event['en_shortdesc'] . '<br/>'); 
    print('Start: ' . $event['start'] . '<br/>'); 
    print('End: ' . $event['end'] . '<br/>'); 
    print('<hr/>'); 
} 
print('</div>'); 
+3

Пожалуйста, включите ошибку в ваш вопрос. И просмотрите эти ссылки - [mcve] & [ask] – Tom

ответ

0

$updatecache не обновляется до true вообще. Как $cacheFile всегда существует. но ваше сравнение для времени изменения файла всегда возвращается false и $updatecache остается false. и foreach проверяет под no data

Я обновил свой код больше в //cache блоке

<?php 

$srcUrl = 'http://ginger-gin.redox-labs.com/api/read_db.json'; 
$cacheFile = "cachefile.json"; 
$cacheupdatetime = 3600; // 3600 Sekunden = 1 Stunde; Datei nur ein Mal pro Stunde neu holen 
// --- Cache --- 
$updatecache = false; 
$filemtime = @filemtime($cacheFile); // returns FALSE if file does not exist 
if (!$filemtime or (time() - $filemtime >= $cacheFile)) { 
    $updatecache = true; 
} 
else { 
    $updatecache = true; 
} 

if ($updatecache) { 
    $str = file_get_contents($srcUrl); 
    file_put_contents($cacheFile, $str); 
// --- /Cache --- 
// json aus cache holen und in array dekodieren 
    $jsonStr = file_get_contents($cacheFile); 
    $dataArray = json_decode($jsonStr, true); 

// eigene events Tabelle bauen und keys aus der events-table-definition setzen 
    $events = array(); 
    foreach ($dataArray['events'] as $value) { 
     $events[] = array_combine($dataArray['tables']['events'], $value); 
    } 
// events Array ausgeben 
    //print_r($events); 
// oder so für Browser 
// print('<pre>' . print_r($events, true) . '</pre>'); 
// Beispiel HTML 
    print('<div>'); 
    foreach ($events as $event) { 
     print('Location: ' . $event['en_location'] . '<br/>'); 
     print('Description: ' . $event['en_shortdesc'] . '<br/>'); 
     print('Start: ' . $event['start'] . '<br/>'); 
     print('End: ' . $event['end'] . '<br/>'); 
     print('<hr/>'); 
    } 
} 
?> 

output-

enter image description here

Надеется, что это поможет вам

+0

Рад помочь, и добро пожаловать в Stack Overflow. Если этот ответ или любой другой решают вашу проблему, отметьте его как принятый. Это будет полезно для других пользователей –

+0

Во-первых, спасибо Рохан. Локальный он отлично работает. Но всегда есть эта проблема с foreach, и я не мог этого понять. Я установил права на 0777. Какие настройки важны на сервере? Где трюк. Пожалуйста, помогите мне снова. Спасибо –

+0

изменить разрешение для cachefile.json по 'chmod +777 cachefile.json' –

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