«phpClub» — архив тем ("тредов"), посвящённых изучению PHP и веб-технологий.
QR коды + БД + Сайт Аноним 2018/06/06 20:47:47  №1204353 1
Аноны, задача из реальной жизни:
Есть фирма которая делает мебель + дополнительно торгует всякой мелочью +-300 наименований товаров. Сайты-поставщики разные. Товары висят на стендах, цены на товары часто меняются поэтому ценников нет, цену надо спрашивать у продавана, типа идешь к компу, называешь код он тебе говорит цену. Всех эта схема подзаебала.
Я предложил возле каждого товара повесить QR код.

Мои варианты решения проблемы:

Срочная:
1) Спарсить с сайтов ссылки на товары, нагенерировать url qr кодов, развесить. Продаван сканирует код, заходит на страничку товара и сам считает цену ( цена = цена * 0.2)
Посоветуйте парсер, и может есть прога куда можно закинуть файл с сылками и она сразу сгенерирует кучу кодов на A4.
Подольше:
2) Создать сайтик с таблицей куда данные подгружаются с БД. qr код - ссылка на ячейку таблицы с товаром и ценой. В таблице цена автоматически обновляется раз в день.

Посоветуйте инструменты и вообще кто бы как сделал.
Ответы: >>1204364 >>1218673
Аноним 2018/06/06 21:31:58  №1204364 2
>>1204353
>цена = цена * 1.2
фикс
Аноним 2018/06/28 04:38:09  №1218673 3
>>1204353

Готового решения для твоего случая, наверно, нету. Надо писать с нуля.

>>1208106

Это проблема используемой тобой IDE.

> Теперь думаю как более правильно в понимании сурьёзного программирования это следует оформить.

Простой вариант:

$parsers = [
['host' => 'xyz.com', 'parser' => function () { ... }],
['host' => 'xyz2.com', 'parser' => function () { ... }],
['host' => 'xyz3.com', 'parser' => function () { ... }],
];

$parser = selectParser($parsers, 'http://xyz.com/address');

Вариант посложнее:

['host' => 'xyz.com', 'parser' => new XYZParser],
...

И еще сложнее:

$selector = new ParserSelector;
$selector->addParser('xyz.com', new XYZParser());

$parser = $selector->getParserFor('http://xyz.com/address');

А вообще, ты по моему зря заморачиваешься. Зачем тебе в парсерах какой-то сложный ООП? Ради чего ты хочешь это сделать? Просто сделай массив парсеров и выбирай из него.
Ответы: >>1219238 >>1219346
Аноним 2018/06/28 21:00:05  №1219238 4
>>1218673
Проблема не в IDE, а в том, что система типов в PHP не позволяет написать $parsers = new Map<string, callable>, не говоря уже о том, чтобы типизировать функции. Ещё проблема в PHP коммьюнити, которое до сих пор не договорилось о том, как хотя бы докблоками описывать дженерики, чтобы код могли анализировать IDE и статические анализаторы.

>>1217046
Замечу, что в Laravel при обращении к свойству модели проверяется существования метода setPropertyAttribute, где Property это свойство, к которому происходит обращение, в таком случае мы не можем выставить значение свойства, минуя сеттер. Видно по коду: https://github.com/laravel/framework/blob/5.3/src/Illuminate/Database/Eloquent/Model.php#L2876

>>1216145
> Докер - это ведь костыль по большому счету
Ну зачем так, докер решает много проблем, и это наоборот хорошо, что даже PHP-шники начинают его использовать. У нас вот встречаются проекты, которые нужно очень долго разворачивать из-за того, что старые и требуют хитрой настройки. И история затягивается ещё сильнее, когда у человека мак, а инструкция в readme написана для линукса. Тут докер очень сильно всё упрощает. Вообще у нас в компании почему-то считается нормальным давать несколько часов на разворачивание проекта, а ведь это может занять пару минут с докером.

>>1219227
Во фреймворках обычно это всё настроено и там есть понятие окружения (дев, прод, тест). В локальной разработке (дев) удобно сразу получать сообщения об ошибке на экран с полным стектрейсом: http://filp.github.io/whoops/demo/ .
На продакшене ошибки пользователю показывать не надо, там либо смотришь логи, либо настраиваешь логгер так, чтобы он слал оповещения на почту об возникающих исключениях на сайте. У нас используются Sentry и Rollbar

>>1218876
С нытьём проследуй в /b или перезвоним-тред.
Ответы: >>1219247
Аноним 2018/06/28 21:14:56  №1219247 5
>>1219238
>Во фреймворках обычно это всё настроено и там есть понятие окружения (дев, прод, тест). В локальной разработке (дев) удобно сразу получать сообщения об ошибке на экран с полным стектрейсом: http://filp.github.io/whoops/demo/ .
>На продакшене ошибки пользователю показывать не надо, там либо смотришь логи, либо настраиваешь логгер так, чтобы он слал оповещения на почту об возникающих исключениях на сайте. У нас используются Sentry и Rollbar

бро, объясни, как быстро сделать так, чтобы мне ошибки выводились на экран со стектрейсом(я к этому на рельсах привык)
Ответы: >>1219265 >>1219377
Аноним 2018/06/28 22:01:00  №1219265 6
maxresdefault.jpg (29, 1024x576)
576x1024
Ответы: >>1219276
Аноним 2018/06/28 23:38:10  №1219276 7
>>1219265
делаю, как там написано, получаю Class 'Whoops\Run' not found
Ответы: >>1219279
Аноним 2018/06/28 23:46:05  №1219279 8
>>1219276
Оно заработало, но мне пришлось дохуя всего перетащить в папку со своим кодом.
И что, мне в каждом своем файле подключать эту херню?
Ответы: >>1219379
Аноним 2018/06/29 06:14:03  №1219346 9
>>1217119
Я неправильно понял идею middleware и как используется httpMessage у людей. Теперь получше представляю.

>>1218673
>>1218674
Ну вот у меня массив. Я не мерил, но видел (перепроверять лично всё времени не хватит):
> Variable functions took 0.125958204269 seconds.
> call_user_func took 0.485446929932 seconds.
> eval took 2.78526711464 seconds.
Да, там бенчмарк и в реальности я за скрипт вызываю их не 10к раз. Но курочка по зернышку как говорится... Речь не только о микрооптимизациях: также большой вопрос что красивее - $func( ... ) или call_user_func( $func, ... )
Я просто не уверен что вот так держать массив с лямбдами укладывается в понятие "хороших практик" и для остальных будет выглядеть достаточно чисто.
Аннотации выглядят как припарка. В Plates шаблонах в заголовках тоже прописываю, там по другому вообще нельзя как я понимаю.
Аноним 2018/06/29 07:03:30  №1219377 10
>>1219247

В PHP для этого достаточно включить display_errors= 1 в php.ini. Не понимаю, зачем вы тут какие-то фреймворки и библиотеки приплели. Это встроено в сам PHP.

Стектрейс доступен только для исключений, для ошибок просто показывается название файла и строка.
Аноним 2018/06/29 07:04:13  №1219379 11
>>1219279

Сторонние библиотеки принято подключать с помощью менеджера пакетов composer. Ничего перетаскивать не надо.
Ответы: >>1219408
Аноним 2018/06/29 08:29:08  №1219408 12
>>1219379
Я с его помощью и сделал, но что-то пошло не так и заработало, только когда я всю папку composer перетащил в папку со своим проектом. Напутал с путями?
Ответы: >>1232697
594-827 Аноним 2018/07/22 04:27:17  №1232697 13
>>1219227

Я в консоли просто набираю команду вроде tail -f /var/log/nginx.log и она сама следит за логом и выводит новые сообщения. Это самый простой способ.

Команда tail умеет также следить за несколькими логами сразу.

В случае PHP, надо включить в php.ini display_errors=1 если это не продакшен. На продакшене естественно, выводить ничего на экран нельзя.

>>1219235

Ну у тебя там в коде есть элемент displayMessage, может текст сообщения в нем? Используй тогда регулярки.

>>1219408

Наверно. Надо прочитать какой-нибудь урок по композеру сначала. Например, надо подключить autoload.php в своем коде.

>>1219348

Это FastCGI-сервер и менеджер процессов PHP. Он принимает HTTP-запросы от веб-сервера через FastCGI и передает их на обработку рабочим процессам PHP. Применяется в сочетании с поддерживающим FastCGI сервером, например, nginx или Apache.

Если ты настраиваешь среду для разработки то, по моему, проще использовать встроенный в PHP веб-сервер, а не заморачиваться с nginx.

> Если я сделал apt get install php, этот fpm у меня уже есть, или надо ставить отдельно?
думаю, что отдельно. Ты бы мог посмотреть описание пакета php для начала: apt-cache show php, может там упомянуто.

>>1219835

Atom это редактор кода, а не фреймворк. Для твоего проекта может подойти микрофреймворк Slim.