Laravel по-русски

Русское сообщество разработки на PHP-фреймворке Laravel.

Ты не вошёл. Вход тут.

#1 Re: Laravel 5 » Почему может тормозить сайт на Laravel » 03.03.2019 11:00:54

Затем , если страницу не трогать несколько минут и сделать Refresh опять тормоза .

Если это не какое-то внутреннее кэширование Laravel, то похоже на встроенный opcache в PHP, который кэширует (предкомпилирует) скрипты в памяти вместо загрузки каждый раз с диска, что очень сильно ускоряет работу проектов с кучей скриптов (как то Laravel, форумы, вики-движки и т.д.).

По умолчанию opcache не "протухает", но, возможно, на вашем сервере настройки нестандартные или памяти слишком мало - см. php.ini, группу [opcache]. Там много полезных переменных - максимальное число файлов, используемая память, время обновления и т.д.

#2 Re: Laravel 5 » "Оживление" формы обратной связи для регистрации и авторизации » 11.02.2019 22:54:35

garrip91
Тема закрыта. Я вам писал, почему. За повторный пост такого же характера будет бан - первый на этом форуме за все 7 лет его истории.

#3 Re: Laravel 5 » Проблема с nginx в homestead » 26.01.2019 15:14:00

[pool www] child 9221 exited on signal 11 (SIGSEGV - core dumped) after 1506.246210 seconds from start

А точно та ошибка? "after 1506.246210 seconds" говорит, что скрипт висел 25 минут, прежде чем упал, а вы писали: "При этом, если обновить страницу, то страница корректно отображается." - 25 минут точно ждали?

Есть сведения, что сегфолт можно вызвать зациклившейся регуляркой, например.

Это надо очень-очень постараться. Возможно, в системе несовместимые библиотеки, PHP был собран не на тех, которые есть сейчас. Лучше попробовать все удалить (со всеми зависимостями), обновить apt/yum/что там у вас, и поставить заново из пакетов.

#4 Re: Laravel 5 » Какие варианты Spinx-а вы знаете » 26.01.2019 15:09:19

На одном проекте хорошо разобрался и реализовал FullText (мускл 5.7 InnoDB) и в итоге при размере БД в 6КК строк в основном в трех таблицах (1гиг с индексами), ищет почти мгновенно.

У меня в одном проекте с ~5 млн строк (в одной таблице) поначалу тоже был FULLTEXT-индекс от MySQL, но, видимо, у нас разная структура данных и/или поиска. У меня каждый документ это где-то 50 индексируемых слов, а каждый запрос может содержать десяток слов в разной конфигурации (т.е. с операторами). На MySQL в какой-то момент времени поиск стал занимать секунды, перешел на Sphinx - поиск сократился до долей секунды (на 2 порядка).

Еще большой плюс Sphinx (либо отдельной системы хранения вроде Redis только для поиска) в том, что добавлять/обновлять данные в огромной таблице с FULLTEXT под нагрузкой нереально. У меня импорт 100к записей, если не отключать сайт, занимал часы, при этом хоть сайт и был скорее жив, чем мертв (для пользователей), но все жутко тормозило из-за параллельного обновления индекса. А Sphinx - это отдельная надстройка, он может легко обновляться частично и/или на лету без особых проблем с производительностью.

Минус только в том, что изначально связку Sphinx и MySQL нужно настроить, но зато дальше полет нормальный.

хочу спросить кто какие плагины использовал для Laravel 5

Насчет плагинов ничего не могу сказать (проект не на Laravel), но зачем они нужны, если у Sphinx такой же интерфейс, что и у MySQL?

#5 Re: Веб-разработка » "Вывернуть" массив )) » 14.01.2019 00:18:22

<?php
$persons = [
        'name'=>[
                0=> 'Vasya',
                1=>'Petya',
                2=>'Kolya'
        ],
        'street' =>[
                0=>'Lenina',
                1=>'Marksa',
                2=>'Engelsa'
        ]
];

// ----
$elegant = array_map(function ($name, $street) {
        return compact('name', 'street');
}, $persons['name'], $persons['street']);
// ----

var_dump($elegant);

#6 Re: Laravel 5 » Laracasts. Видео с русскими субтитрами » 21.12.2018 18:23:09

Так на https://laracasts.com нет субтитров. Или они появляются, когда покупаешь подписку?

Честно говоря уже не помню, возможно ты прав. Но если там нет английских субтитров - значит нигде нет.

#7 Re: Laravel 5 » Laracasts. Видео с русскими субтитрами » 21.12.2018 10:33:09

Хотел бы спросить, как можно просматривать курсы от Laracast с английскими субтитрами?

Купить подписку на laracasts.com и смотреть там.

#9 Re: Laravel 5 » Безопасность Laravel » 28.11.2018 12:17:59

Заказчик хочет получить веб-программиста и аудит безопасности в одном флаконе? При разницы з/п у обоих примерно в 20 раз...

но на будущее хочется всё-таки собрать инфу по безопасности.

Это не то, что можно просто "собрать" и вызубрить. Нужно понимать работу всех компонентов, в том числе нижележащих - PHP, веб-сервера, протоколов. Я на пару пунктов отвечу для интереса, но это только вершина айсберга.

Проверка на удаленное выполнение произвольного кода;

Если не использовать eval($_GET['x']); то RCE в PHP получить не получится, к счастью.

Проверка на наличие инъекций (внедрение кода);

Внедрение кода в SQL?..

В любом случае, если использовать ORM, то шанс получить инъекцию очень мал, но остается, ведь "сырые" выражения никуда не деваются. Правда, некоторые любят использовать целые сырые запросы в сложных случаях, когда ORM снижает читабельность - тогда риск больше.

Проверка веб-ресурса на наличие «XSS» / «CSRF» уязвимостей;

Странно, что две совершенно разные проблемы объединены в один пункт.

XSS - когда в шаблоне нет экранирования пользовательского ввода (который может прийти не только напрямую из GET/POST, но и косвенно через БД, к примеру). Тогда можно вставить свой код на страницу, утащить cookie с сессией и другие пользовательские данные, вроде кредиток.

XSS бывают отраженной и хранимой, об этом писать не буду.

CSRF - возможность выполнить действие "за" пользователя без его явного согласия. Например, есть маршрут вида "GET //my.site/delete/account". Кто-то авторизовался на вашем сайте, перешел на "вредоносный" ресурс, где стоит картинка с этим URL: <img src=".../delete/account">. Результат - браузер запросил картинку, это вызвало удаление аккаунта.

Решается добавлением скрытого token к подобным маршрутам: //my.site/delete/account?csrf=token. Вредоносный сайт token знать не будет, поэтому запрос на удаление будет отклонен.

Внедрение XML-сущностей;

Еще более странно, что этот класс отдельно от XSS. По сути то же самое, только вставка своего ввода не в HTML, а в XML. На большинстве сайтов XML нет, RSS, к сожалению, умер, поэтому про это можно не думать.

Попытки произвести Remote File Inclusion / Local File Inclusion;

Это, к счастью, вымерло окончательно благодаря автозагрузке классов.

require $_GET['lang'].'.php';

RFI - когда lang=http://my.site/inc.php
LFI - когда lang=/tmp/upload/f78a.tmp

То есть можно выполнить произвольный PHP-код на сервере. Очень опасная штука.

Проверка на перенаправление на другие сайты и открытые редиректы;

Имеем форму логина и переменную типа "page". По смыслу, когда человек вошел на сайт, его перекидывает обратно на данную "page". Однако без дополнительных проверок, если page - любой URL, то получаем "open redirect": /login?page=http://my.site/xxx

Это плохо для SEO. Также это может сбить с толку пользователя, если my.site внешне неотличим от исходного сайта - можно, к примеру, подсунуть пользователю "форму входа", он подумает, что ошибся в пароле и введет свои данные снова, только на этот раз - на подставном сайте.

Сканирование директорий и файлов, используя перебор и «google hack»;

Я просто оставлю это здесь: https://habr.com/post/70330/

Проверки ресурса на возможность открытого получения конфиденциальной и секретной информации;

Файлы во всяких форумах и CMS часто сохраняют в какую-то общую папку без защиты доступа. Если у тебя есть ссылка (имя файла) - то даже не имея прав просматривать форум/раздел CMS ты можешь получить файл. Это не обязательно плохо, т.к. к примеру может использоваться для расшаривания файлов другим людям, но многие сайты этим грешат. Чтобы этого не было, используют специальные ссылки с хэшем, см. к примеру nginx: http://nginx.org/ru/docs/http/ngx_http_ … odule.html

Отдавать статику через PHP плохая идея из-за производительности. На форуме уже была тема.

Другая проблема - перебор идентификаторов. Я сделал заказ 1234, и если нет проверок на права (а их очень часто забывают) - я могу открыть ту же страницу с заказом, но дописав в параметр не 1234, а 1235. И увижу заказ другого человека.

Решается тоже добавлением хэша/секретной строки.

Атаки класса «race condition»;

Про это можно целую книгу написать. Вкратце, есть маршрут заказа некоего товара. Если программист не озаботился защитой от гонки, то там будет что-то такое:

if ($user->balance >= $order_total) {
  create_order();
  $user->balance -= $order_total;
  $user->save();
}

Итого, сделав 2 и более запросов одновременно (а это не так сложно, имея быструю сеть в дата-центре) я могу загнать пользователя в минус, не имея достаточно денег на балансе.

Данный конкретный пример решается оборачиванием всего маршрута в транзакцию, но этот пример мне просто пришел в голову с ходу, а на практике гонка встречается в самых разных формах и может вылиться в крупные суммы для ресурса, если постоянно не держать эту возможность в голове.

Подбор паролей.

Без деталей можно только гадать, что имелось в виду - повесить CAPTCHA, ограничить число попыток ввода с IP или что-то более умное вроде атак по времени на токены, может даже BREACH...

В целом, насчет возможности подбора паролей переживать не стоит, это самая малая проблема для сайта - пользователи, которые не парятся о своих паролях, найдут способ любые ваши ограничения ("один знак, заглавная буква и цифра" = "aA1!") и их все равно взломают, а те, которые парятся, сгенерируют такой пароль, что его даже без CAPTCHA можно брутфорсить до конца времени.

Меня больше волнуют банки, которые не позволяют использовать больше 16 знаков в пароле, или которые ограничивают набор символов только цифрами (привет, ВТБ).

#11 Re: Прочее » Блокировка за почтовую рассылку уведомлений в каталоге. » 25.10.2018 17:21:04

Можно как-то отправить с сервера запрос и получить ответ.

Нельзя, в целях защиты от спама не все сервера отвечают, когда ящик существует, когда нет, и крайне редко сообщают, когда письмо попало в спам (вернее, иногда сообщают, но не-сообщение далеко не означает, что письма в спаме нет).

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

Так что 100% гарантии дать невозможно.

#12 Re: Прочее » Блокировка за почтовую рассылку уведомлений в каталоге. » 06.10.2018 19:59:22

Во время активации каждой организации уходило уведомление.

Кому? Каждой из 2 млн предприятий? Так это натуральный спам, естественно за него и хостер будет блокировать, и в спам такие письма попадать будут.

#13 Re: Веб-разработка » Как найти дублирующиеся подряд записи по признаку? » 30.09.2018 22:20:12

Есть такая структура таблицы orders

Довольно странная структура, "заказ" обычно это набор товаров, а здесь получается, что "заказов" нет, но есть запись "id товара" на каждого пользователя (а не на каждый заказ!).

Нужно, чтобы заселектились записи только те, в которых предыдущие записи с такими же user_id имеют эквивалентный product_id.

В СУБД как такового нет порядка строк, и уж тем более нельзя производить операции над строками в зависимости от их порядка (т.е. "выбрать если предыдущая строка ..."). Для этого вводится новое поле и используется GROUP BY.

То есть если бы в orders, как это обычно бывает, был бы id заказа (order_id), то задача решается простым SELECT ... GROUP BY order_id, без подзапросов и прочих трюков.

#14 Re: Веб-разработка » FileUpload » 17.09.2018 21:00:14

Как грамотно проверить ограничение на загрузку и выдать предупреждение пользователя.

Никак. В формах не предусмотрено стандартных механизмов для оповещения браузера о максимальном размере загружаемого файла (на самом деле - размере передаваемых данных в форме, например, если ты вставишь в textarea N мегабайт текста, результат будет тот же). Соответственно, ошибка произойдет только тогда, когда пользователь отправил форму и браузер переслал на сервер max+1 байт.

Мораль такова: для мелких файлов (пара мегабайт) можно использовать традиционный способ загрузки (через форму с POST) - здесь потеря данных и времени не так критична; для больших файлов - только JavaScript, с предварительной проверкой на клиенте до отправки формы. Из минусов - некоторые очень старые браузеры идут лесом.

#15 Re: Веб-разработка » Тестирование в sqlite » 12.09.2018 19:56:17

1) для строковых полей размер поля не указан. в sqlite у строк нет размера ?

Да, и более того, в SQLite даже нет строгих типов полей - тип поля можно вообще не указывать, в строковом поле можно хранить числа и т.д.

2) Могут ли быть какие проблемы если при разработке использовал mysql, а для тестирования взять sqlite ?

У них разный синтаксис (" вместо ` для колонок, и пр.), у MySQL больше функций и других расширений стандарта (GROUP_CONCAT, AUTO_INCREMENT, работа с кодировками) и т.д.

Если в проекте ничего из этого не используется, то проблем не будет, но редко встретишь проект, который можно просто взять и запустить на любой другой СУБД - в обычном случае под СУБД понимается именно и только MySQL, и люди используют ее нестандартные функции, даже не зная, что они нестандартные (в этом нет ничего плохого, т.к. 90% проектов с MySQL никогда не уходят).

Я вычитал что для тестирования sqlite как раз и хорош - так как он однопользовательский ...

Он не однопользовательский, SQLite может работать в многопользовательском режиме. По всей видимости, там где ты это читал имелось в виду, что он не умеет писать в базу одновременно двумя клиентами (т.е. если выполнить UPDATE в двух одновременных запросах, то первый запрос начнет выполнение UPDATE, второй заморозится и будет ждать, когда первый закончит, после чего выполнит свой UPDATE). То есть операции записи идут последовательно, даже если они друг друга не затрагивают (например, UPDATE разных таблиц).

Это влияет только на производительность. SQLite не упадет из-за того, что приходят одновременные запросы на запись, он просто будет работать медленнее MySQL. Для локальной разработки это не критично.

3) А для каких приложений(кроме тестирования) sqlite может быть удобен ?

Там, где нагрузка на БД не большая. SQLite лучше MySQL и других мощных СУБД в том, что его не нужно устанавливать и что-либо настраивать на сервере. Больше того, он может даже работать с БД в памяти, т.е. даже прав на запись на диск у него может не быть.

Для решений, где главное - простая установка (а лучше вообще отсутствие установки) - это самое то. Извлек скрипты и тут же начал работать.

SQLite используют очень много крупных проектов - Firefox, Android и т.д. Это проверенное решение.

#16 Re: Прочее » Вики-разметка и доступность редактирования » 31.08.2018 21:42:47

С телефонами ясно, они не позволяют узнать, когда на странице изменилось выделение, или там это делается как-то иначе, но на десктопе у тебя такой штуки тоже нет?

post-17566.png

#17 Re: Прочее » Как создавая командой 7z архив пропустить подкаталоги? » 31.08.2018 21:37:34

Как я понимаю в результатн будет файл arch.tar.xz ?

Да. Расширение можно сделать короче - вместо .tar.xz просто .txz.

tar cJf arch.txz ...

.

1) Что это за формат ?

Обычный формат, тот же tar, только сжатый. Стандартно на Windows открывается теми же 7-Zip и WinRAR.

Под *nix tar'ом бекапы лучше делать, чем zip/7z, так как он сохраняет специфичные вещи типа флагов доступа, владельцев, символических ссылок и т.д. Единственный минус - если надо из большого архива вытащить один файл, то это будет долго (в худшем случае по времени равно извлечению всего архива).

и может быть не только рабочий linux...

tar можно даже на Android распаковать, правда, из-за высокого сжатия смартфон может сам себя поджарить.

2) А на тома tar распаковывать умеет?

Нет, для этого используют отдельную команду split через связку команд (pipe):

tar zc --exclude foo /_wwwroot ... | split -b100M - arch.txz.
tar c --exclude foo /_wwwroot ... | pixz | split -b100M - arch.txz.

В результате получим файлы максимум по 100 Мб, с именами arch.txz.aa, arch.txz.ab (.ac ... .ba .bb ... .zz). Можно переключить с буквенных суффиксов на числовые:

... | split -d -b100M arch.txz.

Получим arch.txz.00, .01, ...

Собрать тома обратно можно банально через cat (tar tv = вывод содержимого архива и его проверка):

cat arch.txz.* | tar ztv
cat arch.txz.* | pixz -d | tar tv

Можно и recovery record добавить, как в WinRAR, только это делается отдельной командой (запускать уже после того как все тома заархивируются):

par2 c -n1 -r5 arch.txz.*

-r5 = максимум 5% томов может быть битыми, потом их нельзя будет восстановить.

В итоге имеем тома arch.txz.aa .ab ... и файл с recovery record arch.vol... (файл .par2 можно удалять).

Посмотри эту тему, там тоже про бекапы говорилось, в частности, как их можно в одну команду перекидывать на другой хост через ssh.

#18 Re: Прочее » Вики-разметка и доступность редактирования » 29.08.2018 22:47:09

А хотелось бы выделить часть чужого сообщения, нажать на кнопку quote и чтобы выделенная часть чужого сообщения была внутри тега.

Не знаю, как это на мобильных, но на десктопе при выделении любого текста на странице появляется окошко "нажми Q...", и на него можно кликнуть/тапнуть, а можно нажать Q на клавиатуре. Первый вариант должен и на телефонах быть удобен.

При тапе что происходит с textarea ответа?

#19 Re: Прочее » Как создавая командой 7z архив пропустить подкаталоги? » 29.08.2018 22:44:34

7-zip и rar под *nix неадекватны, в сравнении с zip или тем более с tar. Какой смысл использовать его? (В твоем примере, кстати, ошибка - расширение не .zip, а .7z.)

Я советую tar + xz, а если система многоядерная, то tar + pixz.

# gz
tar czf arch.tar.xz --exclude node_modules --exclude vendor /_wwwroot
# xz
tar cJf arch.tar.xz --exclude node_modules --exclude vendor /_wwwroot
# pixz
tar -Ipixz -cf arch.tar.xz --exclude node_modules --exclude vendor /_wwwroot

#20 Re: Прочее » Вики-разметка и доступность редактирования » 23.08.2018 23:51:41

Может не в тему, но тег СODE не работает по кнопке.

В Chrome и правда не работал. Исправил, работает?

#21 Re: Прочее » Вики-разметка и доступность редактирования » 23.08.2018 20:09:40

и правом на правку своего комментария?!

В смысле поста на форуме? Ты не писал комментариев.

Баг точно есть? Не могу выявить, на редактирование дается час во всех случаях.

#22 Re: Laravel 5 » Тестирование: как проверить значения переменных в методе контроллера » 04.08.2018 17:07:44

С точки зрения PHP это нереалезуемо: в общем случае поля $this->utm_source и $this->utm_term не обязаны быть открытыми, потому в методе exampleTest() доступа к ним быть не должно.

PHPUnit позволяет тестировать поля вне зависимости от области видимости с помощью функций вида assertAttribute..., например: assertAttributeSame('somestr', 'strProp', $obj);

Степень кошерности сего подхода может быть разной в зависимости от ситуации и может быть вполне приемлемой, если все остальные способы протестировать нечто ведут к велосипедам и усложнению тестов и/или тестируемого кода (класса).

#23 Re: Laravel 5 » Вопросы по установке Laravel 5.4 (версия sql драйвера 11, php 5.6.36) » 19.05.2018 10:53:27

"4" меньше, чем "36".

echo version_compare('5.6.36', '5.6.4', '>=');
//= 1
// version_compare() returns ... 1 if the second is lower. 

#24 Re: Laravel 5 » Видео уроки на русском языке! » 29.04.2018 11:25:43

П.С, Админы: почему я свои сообщения редактировать не могу? яб понял еслиб 2 дня прошло, но не 5 же минут, ребят..

15 минут таймаут, не работает?

АДмины, важуж девизию! верните права на редактирование! правки в инструкцию внести надо

Вернул, пробуй.

#25 Re: Прочее » Как из-рабочего проекта сделать архив » 07.04.2018 15:39:35

Composer/npm - это одно, а "копии проекта копируя только необходимое" (бекапы?) - это другое. Я так понял, речь о первом.

Composer (npm и прочие подобные) позволяет ставить пакеты (библиотеки с кодом) и следить за их зависимостями. То есть если один пакет для работы требует другой, то Composer поставит оба. Чтобы работало "composer install", нужно пакет опубликовать. Как это сделать описано на сайте проекта; Composer - https://getcomposer.org, npm - https://www.npmjs.com/

https://packagist.org/?q=laravel&p=0
https://www.npmjs.com/search?q=laravel

Подвал раздела