读取多个json文件只插入1个值

时间:2017-03-16 09:56:10

标签: php json

我有一个php脚本,它读取json数据并保存到mysql。

我想执行一个cron或类似的东西读取不同的.json数据文件,我每10秒获取一次,所有新数据都保存到mysql。

更新后的代码:下面的代码似乎读取了3个json数据,但只保存了一条记录

<?php
$dir='/var/www/html/';
$files = scandir($dir);

foreach ($files as $key=>$value)
{ 
$pos = strpos($value, '.json');   
if ($pos === false) {
    //nothing
}
else{
    echo $value; 
    $ext = pathinfo($value, PATHINFO_EXTENSION); 
    if($ext=='json')
    {
        $file = file_get_contents($dir.$value, FILE_USE_INCLUDE_PATH); 
        echo '<pre>'.$file; 
        $array=json_decode($file,true);
        $arraykey=array_keys($array); 
        echo $file;

        try 
        {
            //echo 'INSERT INTO gmr(version,visitorId,dwellTime,poiId,srId,zoneId,poiProximityConfidence,zoneProximityConfidence,poiPresenceConfidence,zonePresenceConfidence,normalizedTime) VALUES ("' . implode('", "', $array[$arraykey[0]]) . '")'; 
            $count = $dbh->exec('INSERT INTO gmr(version,visitorId,dwellTime,poiId,srId,zoneId,poiProximityConfidence,zoneProximityConfidence,poiPresenceConfidence,zonePresenceConfidence,normalizedTime) VALUES ("' . implode('", "', $array[$arraykey[0]]) . '")' ) or die(print_r($dbh->errorInfo(), true)); 
            echo $count;
            $dbh = null;
            echo 'Success<br />';
        }
        catch(PDOException $e)
        {
            echo $e->getMessage();
        }
    }
}
?>

这只是插入第一个文件中的值,为什么不插入其他文件

2 个答案:

答案 0 :(得分:2)

你可以这样做

第1步:扫描整个文件夹

$dir = "scan/";
$files = scandir($dir);

第2步:遍历所有文件

foreach ($files as $key => $value) {
//loop goes here
}

第3步:检查文件的扩展名

$ext = pathinfo($value, PATHINFO_EXTENSION);
if($ext=='json')

所以,你的编码将是

<?php
$dir = "scan/";
$files = scandir($dir);
foreach ($files as $key => $value) {
$pos = strpos($value, '.json');
$ext = pathinfo($value, PATHINFO_EXTENSION);
if($ext=='json')
    //Your code here
}
}

更新1:

由于OP希望循环遍历所有.json文件并读取其内容并将其保存在db

<?php
$dir = "scan/";
$a = scandir($dir);
foreach ($a as $key => $value) {
    $pos = strpos($value, '.json');
    if ($pos === false) {
        //nothing
    }
    else
    {
        //echo $value;
        $ext = pathinfo($value, PATHINFO_EXTENSION);
        if($ext=='json')
        {
            $file = file_get_contents($dir.$value, FILE_USE_INCLUDE_PATH);
            echo $file;
            //save this to db
        }
    }
    }

答案 1 :(得分:1)

扫描目录,获取文件并使用它们,将此脚本设置为cron

$dir    = '/tmp';
$files_arr = scandir($dir);
unset($files_arr[0]);  unset($files_arr[1]);//first two is directories
foreach ($files_arr as $file)
 { //do your staff here

   $fo=fopen($file,"r"); 
 }

它已被读取文件夹中的所有文件,如果您需要填写它的.json文件,请参阅下面的答案