Хоть и задача решена. Но, не тут
lxml.etree.XMLSyntaxError: xmlns: 'Опт1' is not a valid URI, line 8, column 49
проблема?
Ну так себе решение
Маленький тест
<?phpset_error_handler(function($code, $string, $file, $line){ throw new ErrorException($string, null, $code, $file, $line); });register_shutdown_function(function(){ $error = error_get_last(); if(null !== $error) { echo 'Last error: '; print_r($error); } });class tm { private $tm = 0, $start = 0; public function __construct( ) { $this->start = microtime(1); $this->tm = $this->start; } public function _($msg){ echo "\n----\nTrace: ", $msg, ":\n"; $t = microtime(1); echo " Mem,mb (usage/peak_usage): ", sprintf('%01.2f / %01.2f', (memory_get_usage()/1048576), (memory_get_peak_usage()/1048576)), "\n Time,ms (before start/before previous): ", sprintf('%01.8f / %01.8f', ($t - $this->start)*1000, ($t - $this->tm)*1000 ), "\n--\n"; $this->tm = $t; }}header('Content-Type:text/plain');$tm = new tm();$tm->_('start by phpversion ' . phpversion());$p = '/home/www_data/old_centos_www/www/1c/public/xl.xml';echo 'filesize, mb:', filesize($p)/1048576;echo "\nXMLReader_\n=======\n"; $reader = new XMLReader; $reader->open($p); $i = 0; $j=0; while($reader->read()) { if ($reader->nodeType == XMLReader::ELEMENT) { if($reader->name == 'Товар') $i++; if($reader->name == 'Группа') $j++; } } $reader->close(); $tm->_( sprintf('afterXMLReader Groups/Items: %s / %s', $j, $i) ); echo "\nfile_get_contents\n=======\n";$x = file_get_contents($p);echo 'loadedxmlfile: ', $p, 'by size: ', strlen($x)/1048576, "MB\n";$tm->_('afterloadxml');try { echo "\nSimpleXMLElement\n=======\n"; $d = new SimpleXMLElement($x); $tm->_( sprintf( 'afterparsexml %s / %s', count($d->{"Классификатор"}->{"Группы"}->{"Группа"}), count($d->{"Каталог"}->{"Товары"}->{"Товар"}) )); echo "\npreg_match_all Товар\n=======\n"; preg_match_all('@(<Товар>.+</Товар>)@iusU', $x, $ids); echo "\n!!!!!!MATCHED: ", count($ids[1]); $tm->_( sprintf('afterpregmatch: %s matched', count($ids[1])) ); } catch (Exception $e) { echo 'Exception: ', $e->getMessage(), "\n";}exit();
результат на файле 41м (10000 товаров в 92 категориях)
на этом этапе preg_match_all аут.
Тяжелый случай - 100000 товаров в 92 категориях:
414 метров в память прочитать не удалось, а XMLReader за 3 секунды все обошел.
Легкий случай
Все справились, но до preg_match_all 8 метров памяти скрипт использовал, а после 40. По времени разница 15мс, SimpleXMLElement дал лучший результат, но, не существенно.
Чей то меня понесло не в ту степь😣🍺
но рынок балансируется
!!!! Это не реклама викса, просто тренды и пример навскидку. Тут лучше загуглить
Уверен, круче викса что то найдется
Это да. Но, и утверждение: "Рынок Супер-любая-КМС-девелоперов и рынок разработки сайтов как небо и земля", тоже справедливо.
Рынок не измеряется количеством девелоперов, КМС или количеством сайтов. Тока бапки
Там конкурентное преимущество - все в одном окне, тем более что:
намекает, что не сотрется.
----
И да, поживем - увидим.
Без разницы. Сегодня 0, завтра 2%, послезавтра - х%. А если async/await будет, что, слышал обещают - их акции сильно вырастут.
Но, то так. Конкуренция.
Вон, Aisamiery, где то тут асинхронный php предложил, так пушка я вам скажу. Правда до асинхронности там я не дошел😀
Предполагаю, конструкторы с вменяемыми возможностями (с), вытеснят со временем ~98% всех кмс. ::попкорн:: Но, рынок в деньгах будет только расти.
Это сколько ж сайтов там сделали, чтобы так. Где то, кто то говорил, про всплеск нокоде. Но, и со стороны традиционного рынка заметили:
Параллельно, говорят от стоимости разработчиков. Слай вон штуку баксов готов выпускнику платить. Арбнет конструктор на xml пилит который год
Чую неспроста. Врут, что тут денег нет😀
Исключают простое и быстрое решение. Для любой кмс, нужен напильник => исчезают причины её использовать.
У шин свои параметры, у тапочек другие, а виски с самосвалом тоже не похожи.
Или другой поставщик:
<tire id="**1**6**0053" season="S" brand="Michelin" model="Latitude Tour HP ZP" width="255" profile="55" diam="R18" price="11971" retail_price="13410" sticker_price="13410" stock="7" local_stock="20" delivery1="0" delivery2="0" delivery3="20" load="109" speed="H" sale="0" runflat="Y" sku="987510" photo="https://www.sh**ser**ce.ru/c****g/m****/l****.jpg"></tire>
А поставщики, и их форматы отгрузки данных - тут 2 напильника как минимум😀
nocode круто, но нет
Зы -----
Возможно, для каких то типов товаров уже все есть. Но, тогда и вопрос надо ставить по другому.
Это если гет, а пост
curl_setopt($ch, CURLOPT_POSTFIELDS, $p);
Если склероз не изменяет, то для мультипарт не надо хттп_бьюилд_квери.
$p = http_build_query($p); curl_setopt($ch, CURLOPT_URL, 'https://app.neilpatel.com/api/domain_top_countries?' . $p);
Ну и $info = curl_getinfo($ch); Method Not Allowed
[http_code] => 405
[url] => https://app.neilpatel.com/api/domain_top_countries[content_type] => application/json[http_code] => 502[header_size] => 566....string(208) "{"message":"'app#unlogged__ca314491fc3076cde84249aadee7390867315a5a' not a valid key=value pair (missing equal-sign) in Authorization header: 'Bearer app#unlogged__ca314491fc3076cde84249aadee7390867315a5a'."}"