csv 的标题是日期、eav、ess 等……我跟踪的下载。我有一个获取参数的函数:例如:eav。我激活函数 dl_stats("eav"); 在处理 eav 的页面中。它应该获得今天的下载次数,例如:10 并在 11 中加一。等等...如果 csv 中的日期不是今天,则从 1 开始创建一个新行。问题是它在今天可以正常工作,但是午夜过后是休息时间。不换行,继续同一行。
我花了 3 天时间试图修复它,但我找不到解决方案。
这是代码。
function dl_stats($produs){
$dir = "stats/"; // file directory - edit directory if you run function from diferent folder
$file = $dir."dl.csv"; // file -
$file = file($file);
//$file = array_reverse($file); // reverse so last dl is first
$data_array = array();
foreach($file as $f){ // file is csv and is exploded by ,
$data_array[] = explode(",",$f);
}
// variables
$csv_content = '';
$data = strftime("%d-%m-%Y", time()); // define today
$data = strval($data);
$new_data = false;
$header = array("data","eav","ess","ems","qr", "ecs","ecsp"); // associative array header
$products = array("eav","ess","ems","qr", "ecs","ecsp");
$product = array();
// loop array
foreach($data_array as $content){
$content = array_combine($header, $content); // combine to make associative array
// look to see if the date in csv is the same as today, if not a new row must be created with the new date
if($data == $content['data']){
$new_data = false; // if false the date is not changed and will be added +1 to the product
}else{
$new_data = true; // if true, new date + zero all dl that day
}
//$produs = 'eaven32';
// set product to add 1
foreach($products as $key){
if($produs == $key){
$product[$key] = '1';
}else{
$product[$key] = '0';
}
}
if($content['data'] == 'data'){
// do not display the header row
$csv_content.= $content["data"] . "," . $content["eav"] . "," . $content["ess"] . "," . $content["ems"] . "," . $content["qr"] . "," . $content["ecs"] . "," . $content["ecsp"];
}else{
if($data == $content['data']){
$csv_content.= $content["data"] . "," .
($content["eav"] + $product['eav']) . "," .
($content["ess"] + $product['ess']) . "," .
($content["ems"] + $product['ems']) . "," .
($content["qr"] + $product['qr']) . "," .
($content["ecs"] + $product['ecs']) . "," .
($content["ecsp"] + $product['ecsp']) . "\n";
}else{
$csv_content.= $content["data"] . "," . $content["eav"] . "," . $content["ess"] . "," . $content["ems"] . "," . $content["qr"] . "," . $content["ecs"] . "," . $content["ecsp"];
}
}
} // eof foreach($data_array as $content)
$csv = $dir."dl.csv"; // file
if($new_data == false){
file_put_contents($csv, $csv_content);
}else{
$prod = implode(",", $product); // implode to get product values
$csv_content_new = $data . "," . $prod;
file_put_contents($csv, $csv_content . $csv_content_new);
}
}
也许如果其他人第一次看代码,可以找到解决方案。
提前致谢。
编辑:
csv 格式如下所示。
第一行(应该是标题):其中的每个数据都是单独的列
日期 | eav | 埃斯 | EMS | 二维码 | 电子商务 | escp
下面的第二行和每隔一行(应该是递增 1 的数据)
18-07-2013| 38 | 50 | 4 | 0 | 2 | 2
如果我现在使用这个日期运行它,将按预期添加另一行,如下所示:05-09-2013| 38 | 50 | 4 | 0 | 2 | 2但如果我让它直到明天......这会发生
日期 | eav | 埃斯 | EMS | 二维码 | 电子商务 | escp
18-07-2013| 38 | 50 | 4 | 0 | 2 | 2
05-09-2013| 38 | 50 | 4 | 0 | 2 | 206-09-2013| 38 | 50 | 4 | 0 | 2 | 2
日期将在前一天的最后一行和最后一列之后,而不是在新行上。我认为只有在您自己的服务器上运行它才能弄清楚。它可能会欺骗你它工作正常,但第二天 csv 被搞砸了:) 连续 3 天发生在我身上,并进行了多次修改。
最后编辑:
好的,代码是正确的,我认为这是 csv 文件的问题。如果您将 if($new_data == false){ 更改为 if($new_data != false){ 一个新日期,它将与今天的日期生成 2 个日期,然后切换回 if($new_data != false){ 到if($new_data == false){ 并且 csv 以某种方式修复:),它可以工作,如果有人想使用我的代码,可以自由地做。我有一个在 php 中显示 csv 文件的文件,如果你想要它,只需给我一条消息。