
Alexey
11.10.2018
11:12:56
Symfony Getting Started and Best Practices (2018)
Авторы: SensioLabs
#php #book #english
Язык: английский.
Целевая аудитория: опытные программисты на php.
Symfony, по словам опытных программистов, выдающийся php фреймворк с высоким порогом входа и сложной архитектурой. Если вы уже достаточно опытный программист, хорошо разбираетесь в ООП, MVC, паттернах проектирования и многом другом, данные небольшие справочники познакомят вас с основами Symfony и лучшими практиками работы с ним.
В книгах рассматриваются следующие темы:
✔️ установка и настройка фреймворка;
✔️ создание первой страницы на Symfony;
✔️ роутинг;
✔️ контроллеры;
✔️ шаблоны;
✔️ конфигурация фреймворка;
✔️ тесты и многое другое.
Преимущества:
➕ актуальный материал по теме;
➕ небольшой объём;
➕ множество примеров.
Недостатки:
➖ не являются исчерпывающими руководствами.


Stanly
11.10.2018
11:52:40
Есть xml документ, в нем всего 6 блоков "groupRecord", а как взять тока то количество по внутренему параметру "CustomerTrxTypeIDDesc", который равен Sales?
<gws:groupRecord>
<gws:CustomerTrxTypeIDDesc><![CDATA[Sales]]></gws:CustomerTrxTypeIDDesc>
</gws:groupRecord>
<gws:groupRecord>
<gws:CustomerTrxTypeIDDesc><![CDATA[Sales]]></gws:CustomerTrxTypeIDDesc>
</gws:groupRecord>
<gws:groupRecord>
<gws:CustomerTrxTypeIDDesc><![CDATA[Sales]]></gws:CustomerTrxTypeIDDesc>
</gws:groupRecord>
<gws:groupRecord>
<gws:CustomerTrxTypeIDDesc><![CDATA[Sales]]></gws:CustomerTrxTypeIDDesc>
</gws:groupRecord>
<gws:groupRecord>
<gws:CustomerTrxTypeIDDesc><![CDATA[Adj]]></gws:CustomerTrxTypeIDDesc>
</gws:groupRecord>
<gws:groupRecord>
<gws:CustomerTrxTypeIDDesc><![CDATA[Adj]]></gws:CustomerTrxTypeIDDesc>
</gws:groupRecord>
Всего количество я получаю так: $xmlDoc->getElementsByTagName("groupRecord")->length; А вот как именно по внутреннему параметру получить?


Alexey
11.10.2018
11:58:58
getElementsByTagName - возвращает DOMNodeList
$els = $document->getElementsByTagName('input');

Google

Alexey
11.10.2018
11:59:13
дальше можно как в доке
for ($i = $els->length; --$i >= 0; ) {
$el = $els->item($i);
}
http://php.net/manual/ru/class.domnodelist.php

Stanly
11.10.2018
12:03:52

Alexey
11.10.2018
12:04:49
только сравнивать на сколько я помню (давно дело было) тоесть
$el = $els->ites($i) вернёт DOMNode
http://php.net/manual/ru/class.domnode.php

Stanly
11.10.2018
12:06:11

Alexey
11.10.2018
12:06:24
public readonly DOMNamedNodeMap $attributes ;
public bool hasAttributes ( void )
http://php.net/manual/ru/class.domelement.php
здесь более расширенные методы получения аттрибутов

Stanly
11.10.2018
12:10:42
а я понял, щас потестю. Спасибо

Google

Alexey
11.10.2018
12:23:46
а я понял, щас потестю. Спасибо
<?php
$xmlString = file_get_contents('xml.xml');
$dom = new DOMDocument();
$dom->loadXML($xmlString);
$groupRecords = $dom->getElementsByTagName('groupRecord');
$domElementsWithContentSales = [];
/** DOMElement $element */
foreach($groupRecords as $element) {
if( trim($element->textContent) === 'Sales') {
$domElementsWithContentSales[] = $element;
}
}
var_dump($domElementsWithContentSales);die();

Stanly
11.10.2018
12:28:05

Alexey
11.10.2018
12:29:26
var_dump($element->textContent)
посмотри что выводит
кстати есть еще xPath

Stanly
11.10.2018
12:32:53
выводит все данные из блока 'groupRecord'

Alexey
11.10.2018
12:32:53
//gws:CustomerTrxTypeIDDesc[text() = Sales] - чтото вроде этого

Alexandr
11.10.2018
12:33:02
много чего есть - http://php.net/manual/en/class.xmlreader.php

Alexey
11.10.2018
12:33:15
я взял твой xml
<?xml version="1.0" encoding="utf-8"?>
<root>
<groupRecord>
<CustomerTrxTypeIDDesc><![CDATA[Sales]]></CustomerTrxTypeIDDesc>
</groupRecord>
<groupRecord>
<CustomerTrxTypeIDDesc><![CDATA[Sales]]></CustomerTrxTypeIDDesc>
</groupRecord>
<groupRecord>
<CustomerTrxTypeIDDesc><![CDATA[Sales]]></CustomerTrxTypeIDDesc>
</groupRecord>
<groupRecord>
<CustomerTrxTypeIDDesc><![CDATA[Sales]]></CustomerTrxTypeIDDesc>
</groupRecord>
<groupRecord>
<CustomerTrxTypeIDDesc><![CDATA[Adj]]></CustomerTrxTypeIDDesc>
</groupRecord>
<groupRecord>
<CustomerTrxTypeIDDesc><![CDATA[Adj]]></CustomerTrxTypeIDDesc>
</groupRecord>
</root>
только без нейм спейсов

Stanly
11.10.2018
12:34:06
у меня без этого <?xml version="1.0" encoding="utf-8"?>
у меня вот с этими <SOAP-ENV:Body>

Alexey
11.10.2018
12:34:38
по идее, в данном контексте это неважно

Stanly
11.10.2018
12:35:08

Dmitry
11.10.2018
12:35:12
экстеншены пишет кто?

Pavel
11.10.2018
12:57:33
Я написал hello world

Иван
11.10.2018
13:46:30

Dmitry
11.10.2018
13:47:05
нет, пхп

Alexey
11.10.2018
13:50:42
ток на хабрике статейку видел где на c++ писали расширение

Google

Сергей З.
11.10.2018
15:47:24

Alexandr
11.10.2018
17:07:22
можно на зефире попробовать если с С++ тяжко
https://habr.com/post/194838/

Dmitry
11.10.2018
17:23:06
зефир смотрел мельком, но не увидел, как там биндится с либами

Pavel
11.10.2018
18:25:51
На правах комьюнити-пиара: мы тут пару дней назад организовали группу фулстакеров - тех кто раньше делал бэкенд а теперь изучает фронтенд. Если кому интересно познавать фронтенд вместе с нами то присоединяйтесь: @fullstacks_ru

Dmitry
11.10.2018
18:30:14
верстать учитесь? ;)
блин, а есть группа написателей пхп расширений

Pavel
11.10.2018
18:32:22

Dmitry
11.10.2018
18:32:54
я бы посмотрел на ддд на реакте...

Pavel
11.10.2018
18:33:31
Ну не знаю как насчет реакта, а вот с ангуляром мы у себя с этим столкнулись и вполне актуальная задача.

Dmitry
11.10.2018
18:34:12
ангуляр то да, там классика


Время
11.10.2018
19:54:23
Народ, подскажите один технический момент, если кто в курсе.
У меня задача чекнуть 100к доменов на предмет определенных паттернов на их главных страницах (то есть запрашиваю курлом HTML с сайта, проверяю его на паттерны, записываю в лог, и следующий домен).
Взял сервак с гигабитным каналом, оперативки 10 гигов, процессор двухядерный, в общем ресурсов хватает.
Запустил свой чекер в 500 потоков на данном сервере (т.е. по 500 одновременных коннектов к сайтам).
Все стабильно работало несколько дней, после чего через 3 дня начали сыпаться ошибки, что DNS резолвер отвалился, т.е. к доменам нельзя было обратиться по доменному имени, и даже на сервере банальные проверки типа wget google[.]com или curl google[.]com отвечали, что не могут отрезолвить домен.
Я уточняю у хостера, в чем беда, хостер сообщает, что у них некие сетевые лимиты к портам DNS (53|993), то есть, типа в процессе работы скриптов накапливаются UDP подключения по DNS портам, которые получают resolve информацию, и типа перегружаются запросами, и перестают работать.
Кто нибудь может мне ламеру объяснить, что это за ограничения такие, и как их можно выявить перед покупкой сервера? К примеру, если буду выбирать сервак без этого гемороя, чтобы быть уверенным, что никаких подобных ограничений не будет.
Буду признателен, если кто подскажет, из за чего на сервере такая беда происходит, и можно ли её в рамках текущего сервера побороть, или надо покупать более мощный, или какой то по особенному сконфигурированный.


dypa
11.10.2018
19:55:33
Народ, подскажите один технический момент, если кто в курсе.
У меня задача чекнуть 100к доменов на предмет определенных паттернов на их главных страницах (то есть запрашиваю курлом HTML с сайта, проверяю его на паттерны, записываю в лог, и следующий домен).
Взял сервак с гигабитным каналом, оперативки 10 гигов, процессор двухядерный, в общем ресурсов хватает.
Запустил свой чекер в 500 потоков на данном сервере (т.е. по 500 одновременных коннектов к сайтам).
Все стабильно работало несколько дней, после чего через 3 дня начали сыпаться ошибки, что DNS резолвер отвалился, т.е. к доменам нельзя было обратиться по доменному имени, и даже на сервере банальные проверки типа wget google[.]com или curl google[.]com отвечали, что не могут отрезолвить домен.
Я уточняю у хостера, в чем беда, хостер сообщает, что у них некие сетевые лимиты к портам DNS (53|993), то есть, типа в процессе работы скриптов накапливаются UDP подключения по DNS портам, которые получают resolve информацию, и типа перегружаются запросами, и перестают работать.
Кто нибудь может мне ламеру объяснить, что это за ограничения такие, и как их можно выявить перед покупкой сервера? К примеру, если буду выбирать сервак без этого гемороя, чтобы быть уверенным, что никаких подобных ограничений не будет.
Буду признателен, если кто подскажет, из за чего на сервере такая беда происходит, и можно ли её в рамках текущего сервера побороть, или надо покупать более мощный, или какой то по особенному сконфигурированный.
ifconfig покажи


Время
11.10.2018
19:57:08
ifconfig покажи
root@***:~# ifconfig
eth0 Link encap:Ethernet HWaddr 52:*:b6
inet addr:* Bcast:* Mask:255.255.255.192
inet6 addr: fe80::*:dfb6/64 Scope:Link
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:205924798 errors:0 dropped:0 overruns:0 frame:0
TX packets:190741586 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
RX bytes:325319257439 (325.3 GB) TX bytes:17572775748 (17.5 GB)
lo Link encap:Local Loopback
inet addr:127.0.0.1 Mask:255.0.0.0
inet6 addr: ::1/128 Scope:Host
UP LOOPBACK RUNNING MTU:16436 Metric:1
RX packets:25316 errors:0 dropped:0 overruns:0 frame:0
TX packets:25316 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:1274120 (1.2 MB) TX bytes:1274120 (1.2 MB)

Admin
ERROR: S client not available

dypa
11.10.2018
19:57:23
и cat /etc/resolv.conf

Время
11.10.2018
19:57:57
и cat /etc/resolv.conf
cat /etc/resolv.conf
# Dynamic resolv.conf(5) file for glibc resolver(3) generated by resolvconf(8)
# DO NOT EDIT THIS FILE BY HAND — YOUR CHANGES WILL BE OVERWRITTEN
nameserver 1.1.1.1
nameserver 8.8.8.8

dypa
11.10.2018
19:58:20
тогда хз откуда лимиты :)

Время
11.10.2018
19:59:07
мне так же непонятно, если DNS гугловские, и вроде как запросы идут напрямую к ним, как они могут отваливаться.
Когда днс падает, в это время коннекты по айпи адресам спокойно проходят.

Google

Alexandr
11.10.2018
19:59:20
а сервер у кого брал если не секрет?

Время
11.10.2018
19:59:41
вроде на хабре их хвалят, и имеют там репу, по идее должны бы разбираться...
Думаю переехать от них на более надежного хостера, но походу проблемы то могут остаться прежними.

Maxim
11.10.2018
20:35:47

Pavel
11.10.2018
20:52:18
Или что там щас модно для фаерволинга

Alexandr
11.10.2018
20:52:54
это врядли

Pavel
11.10.2018
20:53:05
Ну или ты же полюбому ходишь в интернет через их сеть, вот они могут где-то на границе своей сети поставить анализатор и контролировать.

Alexandr
11.10.2018
20:53:27
я не топик стартер)

Dmitry
11.10.2018
20:57:16
бери десяток дешёвых зарубежных и параллель
а у этих видимо что-то для защиты от ддос стоит

Alexandr
11.10.2018
21:29:05
Ога

Время
12.10.2018
00:52:53
Я правильно понял, в линукс дистрибутивах по дефолту таких ограничений нет?

Anton
12.10.2018
05:22:33

Ghost
12.10.2018
08:04:30
если php тяжелый тогда я про C+ молчу)

Serg
12.10.2018
09:53:21

Denis
12.10.2018
10:26:36
народ а как сделать чтобы одна вкладка активная была,ну типа если дубликат вкладки открываешь и переходишь то на на первой типа сессия заканчивалась или скрипт выполнялся?

Ghost
12.10.2018
14:57:47
народ а в php есть асинхронность как в js ? в real-time чтобы работал

Dmitry
12.10.2018
15:09:15
асинхронность есть, а вот “как в js и real-time” зависит от того, что ты вкладываешь в эти понятия

Google

Ghost
12.10.2018
15:09:28
к прримеру
вывел часы и они тикают меняются секунды