@Paltinik

Цикличная запись из массива в файлы, как оптимизировать?

Сворганил скрипт для записи ТВ программы в базу, с mysql и php не дружу особо, решил базироваться на файловой системе. Скрипт планируется запускаться по cron раз в неделю, главное что бы хост не повис :)))
Может для оптимизации что то сделать ? Помогите плиз мне с моим лютым кодом))
целый день отмучился)

<?php
$xml = simplexml_load_string(file_get_contents('xmltv2.xml'), "SimpleXMLElement", LIBXML_NOCDATA);
$json = json_encode($xml);

$array = json_decode($json,TRUE);

$array = array_map('normalizeArray', $array);

function normalizeArray($value)
{
    if (is_array($value)) {
        if (!empty($value['@attributes'])) {
            $attributes = $value['@attributes'];
            unset($value['@attributes']);
            $value = array_merge($value, $attributes);
        }

        $value = array_map('normalizeArray', $value);
    }

    return $value;
}


function str2url($str) {
    $translit=array(
    "А"=>"a","Б"=>"b","В"=>"v","Г"=>"g","Д"=>"d","Е"=>"e","Ё"=>"e","Ж"=>"zh","З"=>"z","И"=>"i","Й"=>"y","К"=>"k","Л"=>"l","М"=>"m","Н"=>"n","О"=>"o","П"=>"p","Р"=>"r","С"=>"s","Т"=>"t","У"=>"u","Ф"=>"f","Х"=>"h","Ц"=>"ts","Ч"=>"ch","Ш"=>"sh","Щ"=>"shch","Ъ"=>"","Ы"=>"y","Ь"=>"","Э"=>"e","Ю"=>"yu","Я"=>"ya",
    "а"=>"a","б"=>"b","в"=>"v","г"=>"g","д"=>"d","е"=>"e","ё"=>"e","ж"=>"zh","з"=>"z","и"=>"i","й"=>"y","к"=>"k","л"=>"l","м"=>"m","н"=>"n","о"=>"o","п"=>"p","р"=>"r","с"=>"s","т"=>"t","у"=>"u","ф"=>"f","х"=>"h","ц"=>"ts","ч"=>"ch","ш"=>"sh","щ"=>"shch","ъ"=>"","ы"=>"y","ь"=>"","э"=>"e","ю"=>"yu","я"=>"ya",
    "A"=>"a","B"=>"b","C"=>"c","D"=>"d","E"=>"e","F"=>"f","G"=>"g","H"=>"h","I"=>"i","J"=>"j","K"=>"k","L"=>"l","M"=>"m","N"=>"n","O"=>"o","P"=>"p","Q"=>"q","R"=>"r","S"=>"s","T"=>"t","U"=>"u","V"=>"v","W"=>"w","X"=>"x","Y"=>"y","Z"=>"z"
  );
  $result=strtr($str,$translit);
  $result=preg_replace("/[^a-zA-Z0-9_]/i","-",$result);
  $result=preg_replace("/\-+/i","-",$result);
  $result=preg_replace("/^kanal-/i","",$result);
  $result=preg_replace("/(^\-)|(\-$)/i","",$result);
  return $result;
}





$chname = array();
foreach ($array[channel] as $value) {
$chname[id.$value["id"]] = $value["display-name"];
$qwe = str2url($chname[id.$value["id"]] = $value["display-name"]);
if(!is_dir('./tvprogi/'.$qwe)) mkdir('./tvprogi/'.$qwe);
}
 



foreach ($array[programme] as $prog) {
$data[start] = substr($prog[start], 0, -6);
$data[title] = $prog[title];
$data[category] = $prog[category];
$data[desc] = $prog[desc];

if ($day != substr($prog[start], 6, -12)) {
$names = str2url($chname[id.$prog[channel]]);
$fp = fopen('./tvprogi/'.$names.'/'.$day.'.json', "w");
/*$fp2 = fopen($dir.'all.json', "w");
fwrite($fp2, json_encode($data));
fclose ($fp2);*/
fwrite($fp, json_encode($tmps));
fclose ($fp);
$tmps = array();
}

$tmps[] = $data;
$day = substr($prog[start], 6, -12);
}

?>


Пример XML файла
<?xml version="1.0" encoding="utf-8" ?><!DOCTYPE tv SYSTEM "http://www.test.info/download/xmltv.dtd">
<tv generator-info-name="x" generator-info-url="http://test.info/">
<channel id=1">
<display-name lang="ru">Первый канал</display-name>
<icon src="http://test.info/channel/1.gif" />
</channel>
<channel id="105">
<display-name lang="ru">Россия 1</display-name>
<icon src="http://test.info/channel/2.gif" />
</channel>
<channel id="333">
<display-name lang="ru">СрHР 100% NEWs</display-name>
<icon src="http://test.info/channel/3.gif" />
</channel>


<programme start="20171016050000 +0300" stop="20171016090000 +0300" channel="1">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="20171016050000 +0300" stop="20171016090000 +0300" channel="1">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="20171016050000 +0300" stop="20171016090000 +0300" channel="1">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="20171017050000 +0300" stop="20171016090000 +0300" channel="1">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="20171017050000 +0300" stop="20171016090000 +0300" channel="1">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="20171017050000 +0300" stop="20171016090000 +0300" channel="1">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="20171018050000 +0300" stop="20171016090000 +0300" channel="1">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="20171018050000 +0300" stop="20171016090000 +0300" channel="1">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="201710186050000 +0300" stop="20171016090000 +0300" channel="1">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>


<programme start="20171016050000 +0300" stop="20171016090000 +0300" channel="105">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="20171016050000 +0300" stop="20171016090000 +0300" channel="105">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="20171016050000 +0300" stop="20171016090000 +0300" channel="105">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="20171017050000 +0300" stop="20171016090000 +0300" channel="105">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="20171017050000 +0300" stop="20171016090000 +0300" channel="105">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="20171017050000 +0300" stop="20171016090000 +0300" channel="105">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="20171018050000 +0300" stop="20171016090000 +0300" channel="105">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="20171018050000 +0300" stop="20171016090000 +0300" channel="105">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="201710186050000 +0300" stop="20171016090000 +0300" channel="105">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>



<programme start="20171016050000 +0300" stop="20171016090000 +0300" channel="333">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="20171016050000 +0300" stop="20171016090000 +0300" channel="333">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="20171016050000 +0300" stop="20171016090000 +0300" channel="333">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="20171017050000 +0300" stop="20171016090000 +0300" channel="333">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="20171017050000 +0300" stop="20171016090000 +0300" channel="333">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="20171017050000 +0300" stop="20171016090000 +0300" channel="333">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="20171018050000 +0300" stop="20171016090000 +0300" channel="333">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="20171018050000 +0300" stop="20171016090000 +0300" channel="333">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>
<programme start="201710186050000 +0300" stop="20171016090000 +0300" channel="333">
<title lang="ru">Название ТВ передачи</title>
<category lang="ru">Категория</category>
</programme>



</tv>
  • Вопрос задан
  • 185 просмотров
Пригласить эксперта
Ответы на вопрос 3
gds1
@gds1
Пыха - это наше всё)))
как то надо на будущее немного думать: если сейчас сайтом пользуется 5 человек, то в файловых операциях ничего страшного, хоть и не удобно жутко. а если сайтом пользуется 2000 человек одновременно, то это будет 2000 одновременных чтений файла. так же на "ФАЙЛОВОЙ СИСТЕМЕ" очень не удобно искать, править, добавлять и т.д. поэтому потратьте чуток времени и сделайте все в БД, будет намного проще.
Ответ написан
Хост не повиснет потому что для этого скрипта будет выделен отдельный процесс и максимум что произойдет скрипт умрет не сделав своих дел и как еще один исход поломается, то что работает на основе данных от этого скрипта.
Если xmltv2.xml небольшой и алгоритмических ошибок нет скрипт выполнится без проблем, на фс это вы повесили зря
Ответ написан
Комментировать
@Paltinik Автор вопроса
размер xml файла примерно 4-5 мб.. скрипт 1 раз в неделю запускается, а далее уже всё в статике хранится... я думаю статические файлы не создают нагрузки на хост? если сравнить html сайт и сайт который к примеру на mysql работает? так же во многих cms кеш в статику генерируется что бы запросы в бд не делать ?? почему тогда на файлах плохо ?? меня интересует сам процесс конструктора, как бы его оптимизировать что бы во время генерации файлов не так нагружало сайт ??
Ответ написан
Ваш ответ на вопрос

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

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