Задать вопрос
  • Как настроить cron для запуска php скрипта?

    Fernus
    @Fernus
    Техник - Механик :)
    Используйте __DIR__ для получения текущего каталога..и относительно него подключайте скрипты при запуске из командной строки...
    Ответ написан
    Комментировать
  • Как устроен современный сайт?

    Fernus
    @Fernus
    Техник - Механик :)
    Лучше гугла тут ничем не помочь...

    Если учитывать это:
    Вот если брать образцовый сайт в 2020, то как он будет устроен?

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

    То "гугли" с фильтром по годам 2018-2020... :)
    Ответ написан
    Комментировать
  • Как получить позицию первого вхождения подстроки?

    Fernus
    @Fernus
    Техник - Механик :)
    <?php
    
    public function findUrl($message) {
        $result = false;
    
        $domains = ['.com', '.ru', '.cc'];
        foreach($domains as $domain) {
            $data = strpos($message, $domain);
            if($data !== false) {
                $result = $data;
                break;
            }
        return $result;
    }
    Ответ написан
    1 комментарий
  • Как разделить карту мира на равные части (квадраты)?

    Fernus
    @Fernus
    Техник - Механик :)
    Щас порылся в проекте одном своём...я немного другую задачу решал, но доработать, думаю можно...
    У меня была такая задача:
    1. Есть точка на карте;
    2. Есть полигоны (многоугольники) на карте;
    3. Есть внутри каждого многоугольника точка на случай, если точка из п.1 не попала ни в один многоугольник, то нужно найти ближайшую точку из п.3 для точки из п.1...

    Ниже пример как проверять вхождение точки из п.1 в полигоны (многоугольники) из п.2...

    class Polygon {
        /**
         * @var array
         */
        var $polygon = [];
        /**
         * Polygon itself, with basic vector-based structure
         * Array: [ [1,1], [2,1], [3,0], [2,-1] ]
         *
         * @var $polygon array
         */
        function setPolygon($polygon) {
            if (count($polygon) < 3) {
                return false;
            }
    
            if (!isset($polygon[0]['x'])) {
                foreach ($polygon as &$point) {
                    //$point = ['x' => round($point[0] + 300, 4), 'y' => round($point[1] + 300, 4)];
                    //$point = ['x' => round($point[0], 4), 'y' => round($point[1], 4)];
    
                    if($point[0] < 0)
                        $point[0] = 90 + 90 - abs($point[0]);
                    if($point[1] < 0)
                        $point[1] = 180 + 180 - abs($point[1]);
    
                    $point = ['x' => round($point[0], 4), 'y' => round($point[1], 4)];
                }
            }
            $this->polygon = $polygon;
        }
        /**
         * Check if $polygon contains $test value
         *
         * @var $test array(x=>decimal, y=>decimal)
         */
        function calc($test) {
    
            if($test['x'] < 0)
                $test['x'] = 90 + 90 - abs($test['x']);
            if($test['y'] < 0)
                $test['y'] = 180 + 180 - abs($test['y']);
    
            $q_patt= [[0, 1], [3, 2]];
            $end = end($this->polygon);
    
            $pred_pt = end($this->polygon);
            $pred_pt['x'] -= $test['x'];
            $pred_pt['y'] -= $test['y'];
            $pred_q = $q_patt[$pred_pt['y'] < 0][$pred_pt['x'] < 0];
            $w = 0;
    
            for ($iter = reset($this->polygon); $iter !== false; $iter = next($this->polygon)) {
                $cur_pt = $iter;
                $cur_pt['x'] -= $test['x'];
                $cur_pt['y'] -= $test['y'];
                $q = $q_patt[$cur_pt['y'] < 0][$cur_pt['x'] < 0];
    
                switch ($q - $pred_q) {
                    case -3:
                        ++$w;
                        break;
                    case 3:
                        --$w;
                        break;
                    case -2:
                        if ($pred_pt['x'] * $cur_pt['y'] >= $pred_pt['y'] * $cur_pt['x']) {
                            ++$w;
                        }
                        break;
                    case 2:
                        if (!($pred_pt['x'] * $cur_pt['y'] >= $pred_pt['y'] * $cur_pt['x'])) {
                            --$w;
                        }
                        break;
                }
                $pred_pt = $cur_pt;
                $pred_q = $q;
            }
    
            return $w != 0;
        }
    
        public static function distance($lat1, $lng1, $lat2, $lng2) {
    
            $lat1=deg2rad($lat1);
            $lng1=deg2rad($lng1);
            $lat2=deg2rad($lat2);
            $lng2=deg2rad($lng2);
    
            $delta_lat=($lat2 - $lat1);
            $delta_lng=($lng2 - $lng1);
    
            return round( 6378137 * acos( cos( $lat1 ) * cos( $lat2 ) * cos( $lng1 - $lng2 ) + sin( $lat1 ) * sin( $lat2 ) ) );
        }
    
        public static function closestPoint($x, $y, $arPoints) {
    
            $RESULT = false;
    
            $x = floatval($x);
            $y = floatval($y);
    
            if(!empty($arPoints) && is_array($arPoints) && count($arPoints) > 0) {
    
                $arRes = array();
    
                foreach ($arPoints as $KEY => $VAL) {
    
                    $x2 = floatval($VAL[0]);
                    $y2 = floatval($VAL[1]);
    
                    $distance = self::distance($x, $y, $x2, $y2);
    
                    $arRes[$KEY] = $distance;
    
                }
    
                if(count($arRes) > 0) {
    
                    natsort($arRes);
                    reset($arRes);
    
                    //$RESULT[key($arRes)] = current($arRes);
    
                    $RESULT = array(
                        'ID' => key($arRes),
                        'DISTANCE' => current($arRes)
                    );
    
                }
    
            }
    
            return $RESULT;
        }
    }
    
    /* Ипользование */
    
    // Координаты точки, которую проверяем на вхождение в "полигон"
    $X = 33.45;
    $Y = 44.25;
    
    // "Полигоны"
    $arCheckPoints = [
        'КЛЮЧ_МНОГОУГОЛЬНИКА' => [22.45, 44.55, 11.22, 55.66], // Координаты вершин
        'КЛЮЧ_МНОГОУГОЛЬНИКА_2' => [33.45, 66.55, 77.22, 99.66], // Координаты вершин
        'КЛЮЧ_МНОГОУГОЛЬНИКА_3' => [12.45, 15.55, 17.22, 54.66], // Координаты вершин
    ];
    
    $arResults = [];
    
    $p = new \App\Helpers\Polygon();
    
    foreach ($arCheckPoints as $KEY_POLYGON => $arPolygon) {
    
        $p->setPolygon($arPolygon);
    
        if($p->calc(array('x' => $X, 'y' => $Y)))
            $arResults[$KEY_POLYGON] = $arPolygon;
    
    }


    Для решения п.3 используется функция distance...если под твои задачи это логика подходит...то дальше покажу ещё пример...

    Мне просто код переписывать приходится прежде, чем выложить...))

    P.S.: Все координаты тупо из головы...на реальных данных лучше тестить...
    Ответ написан
  • Как правильно обнавить данные laravel?

    Fernus
    @Fernus
    Техник - Механик :)
    Если банально и без всяких проверок, то...
    public function update(Request $request,$id){
            $user = Crud::find($id);
            if($user) {
               $user->name = $request->input('name');
               $user->email = $request->input('email');
               $user->save();
            }
    
            return redirect('/')->with('update', 'Вы успешно Изменили Данные');
        }


    У тебя люди/кони смешались...доку повнимательнее глянь...

    Исходя из твоего варианта, то наверное так:

    public function update(Request $request,$id){
    
            $update = Crud::where('id', $id)->update([
               'name' => $request->input('name'),
                'email' => $request->input('email')
            ]);
    
            return redirect('/')->with('update', 'Вы успешно Изменили Данные');
        }
    Ответ написан
  • Как в Laravel примененить фильтры в модели?

    Fernus
    @Fernus
    Техник - Механик :)
    Комментировать
  • Смогу ли я сделать поиск по базе данных?

    Fernus
    @Fernus
    Техник - Механик :)
    SELECT * 
    FROM `orders` 
    LEFT JOIN `companies` ON `orders`.`company_id` = `companies`.`id` 
    LEFT JOIN `clients` ON `orders`.`client_id` = `clients`.`id` 
    WHERE `companies`.`id` = `clients`.`company_id`
    AND `clients`.`phone` = '1234567890'
    Ответ написан
    1 комментарий
  • Один сервер для фотографий для нескольких разных сайтов?

    Fernus
    @Fernus
    Техник - Механик :)
    Если исходить из задачи в вопросе:

    1. Берёшь сервак с "кучей" места;
    2. Ставишь nginx в связке с lua;
    3. Грузишь фотки на сервак этот;
    4. Прогаешь lua в связке с nginx так, как нужно отдавать фотки...там размер меняешь "на лету" или сначала сохраняешь, потом отдаешь...там логотипы возможно всякие накладываешь в зависимости от запроса...
    Но тут дофига ньюансов в программировании на lua...точнее просто разобраться надо в самом языке и как он работает с nginx...
    5. Радуешься какое-то время, когда "запрогаешь" это всё...
    6. Если задача "на лету" вставлять логотип и менять размеры, то в конечном итоге "втыкаешься", как раз, в CPU и RAM...когда будет много запросов на отдачу!
    7. Дальше читаешь свой вопрос и комментарии к нему:
    Сервер БЕЗ фоток можно запустить на убогом и самом дешевом впс. А для фоток нужно место на диске. И оно постоянно растет. Фоток может и терабайт быть. И их можно вынести на отдельный сервер, с убогим процессором, и планкой оперативки, но полной корзиной дисков всяких разных.

    8. Задаёшь новый вопрос уже с более понятной и описанной структурой и задачей...
    9. О, Привет! Опять я))
    Ответ написан
    1 комментарий
  • Можно ли в mongodb искать похожие слова?

    Fernus
    @Fernus
    Техник - Механик :)
    https://docs.mongodb.com/manual/text-search/

    Если это "мимо", то - вряд ли...
    Точнее, если нет именно самого критерия отбора по слову/набору слов...
    Ответ написан
    1 комментарий
  • Индексы. Какие лучше создать?

    Fernus
    @Fernus Автор вопроса
    Техник - Механик :)
    Короче, если кому-то пригодится подобный "расклад" в похожей структуре данных в таблице...

    Получилось так:

    Одиночные:
    INDEX field4_id
    INDEX link_id

    Составные:
    INDEX field4_id, field2_id, field3_id
    INDEX field4_id, field1_id, field2_id, field3_id

    НО, мне кажется, либо есть лишние индексы, либо чего-то не хватает... :)
    Долго времени на "эксперементы" с MySQL не было...хотел просто посоветоваться с теми, кто "собаку" съел уже на этом, так сказать))

    Для меня результат получился приемлемым...
    Соотношение данных приведено в вопросе...поэтому считаю это ответом.

    Буду рад, конечно, принять поправки!
    Спасибо)
    Ответ написан
    Комментировать
  • Как сортировать по количеству записей из связанной таблицы Laravel?

    Fernus
    @Fernus
    Техник - Механик :)
    SELECT `adverts`.*,
    ((SELECT COUNT(`likes`.`id`) FROM `likes` WHERE `likes`.`advert_id` = `adverts`.`id` AND `dislike` = 0) - (SELECT COUNT(`likes`.`id`) FROM `likes` WHERE `likes`.`advert_id` = `adverts`.`id` AND `dislike` = 1)) AS `ALL_LIKES`
    FROM `adverts`
    ORDER BY `ALL_LIKES` DESC


    На ORM Laravel'я сам переведёшь?

    UPD:
    $rs = Advert:selectRaw('`adverts`.*, ((SELECT COUNT(`likes`.`id`) FROM `likes` WHERE `likes`.`advert_id` = `adverts`.`id` AND `dislike` = 0) - (SELECT COUNT(`likes`.`id`) FROM `likes` WHERE `likes`.`advert_id` = `adverts`.`id` AND `dislike` = 1)) AS `ALL_LIKES`')->orderBy('ALL_LIKES', 'DESC')->get();


    P.S.:
    Задумайтесь о хранении кол-ва лайков/дизлайков либо их соотношения прямо в поле у объявления...т.е. при каждом лайке/дизлайке обновляйте это поле...и тогда меньше придётся дёргать вторую таблицу для вывода объявлений...
    Ответ написан
    Комментировать
  • Как пересортировать строки в mysql таблице?

    Fernus
    @Fernus
    Техник - Механик :)
    Получили $_POST массив [12, 119, 6, 9]


    Может так попробовать?

    SELECT `id`, `value`
    FROM `table`
    ORDER BY 
        CASE `id`
            WHEN 12 then 1
            WHEN 119 then 2
            WHEN 6 then 3
            WHEN 9 then 4
            ELSE NULL
        END
    ASC


    Сформировать запрос средствами PHP сможешь же?

    P.S.: Всё что не окажется в $_POST...окажется в начале списка...но тут можно добавить и условие для выборки, например:

    SELECT `id`, `value`
    FROM `table`
    WHERE `id` IN(12,119,6,9)
    ORDER BY 
        CASE `id`
            WHEN 12 then 1
            WHEN 119 then 2
            WHEN 6 then 3
            WHEN 9 then 4
            ELSE NULL
        END
    ASC


    Делаю админку. Вывожу список значений из таблицы в порядке `id`.
    Использую jquery-UI sortable. Можно переставлять местами строки и отправить форму.

    Если это задумано для дальнейшего вывода потом "где-то" в том порядке, в котором указали...то логичнее добавить поле в таблицу, например "sort"...в него записывать порядковый номер из списка, который натусовал пользователь в админке...и далее просто ORDER BY `sort`...
    Не?
    Ответ написан
  • Почему в docker не работает traefik?

    Fernus
    @Fernus
    Техник - Механик :)
    Гугл решает

    Замените:
    - --certificatesResolvers.leresolver.acme.dnsChallenge.resolvers:="1.1.1.1:53,8.8.8.8:53"

    На:
    - --certificatesResolvers.leresolver.acme.dnsChallenge.resolvers="1.1.1.1:53,8.8.8.8:53"


    Перед равно уберите двоеточие...

    Это...если "тупо" по гуглу прогуляться...

    Если не помог, то давайте разбираться...
    Ответ написан
  • Проблема с MySql, кто знает?

    Fernus
    @Fernus
    Техник - Механик :)
    Есть ли ошибки синтаксические?

    1. Включи показ ошибок в PHP;
    2. Вижу в этом месте, что вместо одинарных ковычек - апосторфы...

    $select = "SELECT * FROM users WHERE email=`$email`";


    Как минимум должно быть так:
    $select = "SELECT * FROM users WHERE email = '".$email."'";
    Ответ написан
    Комментировать
  • Какой провайдер смс наиболее качественный?

    Fernus
    @Fernus
    Техник - Механик :)
    https://stream-telecom.ru

    Проблем не замечал.
    Кабинет удобный, всё настраивается.

    P.S.: Правда...с таким вопросом я бы поступил так:

    1. Гуглим какие сервисы бывают;
    2. Берём название сервиса из тех что нашли и дальше гуглим "название_сервиса отзывы" / "название_сервиса недостатки";
    3. На основе пункта 2 решаем сами.
    Ответ написан
    Комментировать
  • Как получить файл по url с удаленного сервера?

    Fernus
    @Fernus
    Техник - Механик :)
    Шаги действий если не шарим нифига...

    1. Выясняем какая ОС (операционная система) на Вашем VDS;
    2. Гуглим как установить на эту ОС nginx;
    3. Гуглим как настроить nginx для отдачи файлов с сервера;
    4. Настраиваем;
    5. Радуемся. Профит.
    Ответ написан
    Комментировать
  • Как сгруппировать выборку по дням?

    Fernus
    @Fernus
    Техник - Механик :)
    SELECT MAX(`date`), `field` FROM `table` GROUP BY TO_DAYS(`date`)
    Ответ написан
  • Как решить задачу?

    Fernus
    @Fernus
    Техник - Механик :)
    Тебе код нужен прям?

    Смотри...есть 5 кустов:

    1. "Съедаем" всё через один, получается:
    2,4
    2. Если кусты остались, жрём дальше...получается:
    4
    3. Остаётся последний куст...жрём и смотрим, что сожрали последним:
    4

    P.S.: Тут даже третий пункт не нужен, если нет задачи "сожрать" :)
    Т.е. надо через один рубить кусты по кругу пока не останется один...это и будет ответ...
    Ответ написан
    5 комментариев
  • Как узнать изменился ли файл без его открытия и закрытия?

    Fernus
    @Fernus
    Техник - Механик :)
    www.php.su/functions/?md5-file

    Как экзотический вариант...

    P.S.: В данном случае на время изменения будет не важно...только, если содержимое изменится...
    Ответ написан
    Комментировать
  • Как без цикла сделать действие после появления файла в директории?

    Fernus
    @Fernus
    Техник - Механик :)
    Всё решается "событиями"...

    1. Идём гуглим, что такое события в программировании...
    2. При каждом добавлении/удалении "генерируем" и "слушаем" эти события;
    3. Выполняем какое-то требуемое действие после этого события.
    Ответ написан