Я создал функцию в PHP для записи статистики в CSV, работает нормально в настоящее время, но после окончания дня не выходит на новую строку
Заголовок csv - это дата, eav, ess и т. Д. Загрузки, которые я отслеживаю. У меня есть функция, которая получает параметр: ex: 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 | Эсс | ЭМС | qr | ЭКС | ESCP
вторая и все остальные строки ниже (предполагается, что это данные с шагом 1)
18-07-2013 | 38 | 50 | 4 | 0 | 2 | 2
Если я запусту его сейчас с этой датой, добавлю еще одну строку, как и планировалось, вот так: 05-09-2013| 38 | 50 | 4 | 0 | 2 | 2 но если я позволю это до завтра... это произойдет
дата | EAV | Эсс | ЭМС | qr | ЭКС | 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 дня подряд с несколькими модификациями.
Последнее редактирование:
Хорошо, код является corect, я думаю, что это проблема с файлом CSV. Если вы измените на if($new_data == false){на if($new_data!= False) {новая дата будет состоять из двух дат с сегодняшней датой, а затем вернется назад, если ($ new_data! = False) {на если ($ new_data == false) {и csv как-то исправлено:), это работает, и если кто-то захочет использовать мой код, он может сделать это свободно. У меня есть файл, который отображает CSV-файл в PHP, если вы хотите, просто дайте мне сообщение.
1 ответ
Либо в этой строке (по-видимому, это не виновник, но вы никогда не знаете):
if($data == $content['data']){
условие либо срабатывает все время, что вызывает $new_data
быть всегда ложным
или этот код (вызвано $new_data == true
):
$prod = implode(",", $product); // implode to get product values
$csv_content_new = $data . "," . $prod;
file_put_contents($csv, $csv_content . $csv_content_new);
не работает, как вы ожидаете.
Чтобы проверить первую часть:
попробуйте использовать var_dump($data)
а также var_dump($content['data'])
чтобы увидеть, отличаются ли они когда-либо.
Чтобы проверить вторую часть:
Попробуйте перевернуть ваш if($new_data == false){
в if($new_data == true){
и посмотрите, действительно ли ваш код записывает новую строку.