• Как сделать редирект в зависимости от статуса регистрации или авторизации Laravel?

    DimaLondon
    @DimaLondon
    Я в таких случаях отдаю в JS результирующий массив в Json, который содержит информацию о результате выполнения скрипта. Что-то вроде такого:

    return json_encode([
        'status'    => 'Error', // результат выполнения Success или Error
        'message'   => 'Введите ваше имя', // Сообщение об ошибке или об успешной регистрации
        'url'       => !empty($this->http_referer) ? $this->http_referer : route('index'), // куда переадресовывать после выполнения действия
    ]);
    Ответ написан
  • Как правильно составить запрос для диапазона чисел?

    DimaLondon
    @DimaLondon
    SELECT * 
    FROM `my_table` 
    WHERE `priceFrom` < 150000 
    OR (`priceFrom` > 150000 AND `priceFrom` <= 180000);
    Ответ написан
    3 комментария
  • Нужна ли тетрадь для записей программисту?

    DimaLondon
    @DimaLondon
    Да, если вы изучаете что-то новое, то желательно хранить где-то новую информацию. Но не в блокноте и ручкой, а в виде ссылок, закладок. Например, в YouTube создайте приватный плейлист JavaScript, в браузере - папку для закладок с соответствующим именем...

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

    На крайний случай, заведите локальный файлик на ПК для каких-либо полезных сниппетов. Но в тетрадь писать - очень неудобно. Со временем, когда научитесь, весь синтаксис и программа в голове сама проявляется, только сиди и строчи код. И не забывай тестировать))
    Ответ написан
    Комментировать
  • Почему так происходит со строкой PHP?

    DimaLondon
    @DimaLondon
    Дело в двойных кавычках. Возьмите фразу в одинарные. Так быстрее и правильнее, данные интерпретируются как строка.
    $json = 'Привет мир!' . '"';
    Ответ написан
    Комментировать
  • Будет ли реклама в музыке, скаченной через vk api?

    DimaLondon
    @DimaLondon
    Рекламы 100% не будет. Только из-за того, что методы API VK, касающиеся музыки, отключены с 16 декабря 2016 года https://vk.com/dev/audio_api
    Ответ написан
    Комментировать
  • Как авторизоваться в Instagram через mgp25/Instagram-API?

    DimaLondon
    @DimaLondon
    Это происходит потому, что Instagram не доверяет вашему IP, с которого вы пытаетесь делать автопубликации. Обычно, когда эта ерунда, как на скриншоте, вылазит у вас в приложении или в web-версии, при автопубликации Инста отдает ошибку "Challenge required" (посмотрите логи).

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

    Я сделал вот так:

    1) Т.к. в библиотеке mgp25/Instagram-API метод _setUser() приватный, вы не можете обратиться к нему извне. Поэтому делаем "прокладку": в классе Instagram() в файле Instagram-API\src\Instagram.php в самом начале класса добавьте публичный метод:
    public function changeUser( $username, $password )
    {
        $this->_setUser($username, $password);
    }


    2) Создайте отдельный файл (или метод в вашем контроллере, если используете ООП), который будет обрабатывать авторизацию. Он должен содержать следующий код:

    # код из SMS (возможно, вы иначе принимаете GET)
    $code = isset($_GET['code']) ? $_GET['code'] : false;
    
    # данные от аккаунта Instagram
    $username    = '******';
    $password    = '******';
    
    # папка с файлами данных авторизации робота (путь от корня сайта)
    $user_path      = app_path('Core/Classes/Instagram-API/sessions/'.$username);
    
    # временный файл с данными от Инсты
    $user_tmp_file  = $user_path.'/'.$username.'-custom-response.dat';
    
    
    # если код еще не отправлялся - его надо отправить
    if (empty($code))
    {
        
        # для начала ВАЖНО удалить старые файлы от предыдущих авторизаций
        if (file_exists($user_path.'/'.$username.'-settings.dat')) {
            unlink($user_path.'/'.$username.'-settings.dat');
        }
        
        if (file_exists($user_path.'/'.$username.'-cookies.dat')) {
            unlink($user_path.'/'.$username.'-cookies.dat');
        }
        
        
        \InstagramAPI\Instagram::$allowDangerousWebUsageAtMyOwnRisk = true;
        $ig = new \InstagramAPI\Instagram(false, false);
        
        
        # затем ВАЖНО произвести попытку авторизации без старых данных авторизации (которые только что удалили)
        try {
            $instagram_login = $ig->login($username, $password);
            
        } catch (\Exception $e) {
            
            # Если IG вернул ошибку "Challenge required"
            if ( ($check = mb_strpos( mb_strtolower($e->getMessage()), 'challenge required') ) !== false) {
                
                # отправляем SMS
                $custom_response = $ig->request(mb_substr(
                    $e->getResponse()->
                    getChallenge()->
                    getApiPath()
                , 1))->
                setNeedsAuth(false)->
                addPost("choice", 0)->
                getDecodedResponse();
                
                # сохраняем временные данные, которые пришли от Инсты при отправке SMS (тут нам важен "nonce_code")
                @mkdir($user_path, 0777);
                file_put_contents($user_tmp_file, json_encode($custom_response), LOCK_EX);
                
                var_dump($custom_response);
            }
        }
        
    # иначе, если вы уже отправили код и передали его в GET, то отправляем Инсте ответ:
    } else {
        
        if (file_exists($user_tmp_file)) {
            $tmp_data = json_decode(file_get_contents($user_tmp_file), true);
            
            
            \InstagramAPI\Instagram::$allowDangerousWebUsageAtMyOwnRisk = true;
            $ig = new \InstagramAPI\Instagram(false, false);
            
            try {
                # изменяем данные аккаунта нашим методом changeUser()
                $ig->changeUser($username, $password);
                
                # и шлем инсте ответ с кодом из SMS
                $custom_response = $ig->request("challenge/".$tmp_data['user_id']."/".$tmp_data['nonce_code']."/")->setNeedsAuth(false)->addPost("security_code", $code)->getDecodedResponse();
                        
                var_dump($custom_response);
                
            } catch (Exception $e) {
                exit("Error ".$e->getMessage());
            }
            
        }
    }


    Работает это так: к примеру, этот ваш код работает по адресу /ig_auth
    1) Вы дёргаете этот адрес, ваш сервер дёргает Инсту и она отправляет вам SMS с кодом подтверждения на номер, который привязан к вашему аккаунту.
    2) Получаете SMS с кодом и дёргаете адрес /ig_auth?code=SMS_КОД (или как там у вас построена маршрутизация). При этом код отправляется обратно в Инсту. Та переносит ваш IP в список доверенных.
    Profit.

    Еще совет: не юзайте прокси. Инста их ОЧЕНЬ не любит и распознаёт на раз-два. Это грозит санкциями, вплоть до вечной блокировки аккаунта.
    Ответ написан
    1 комментарий
  • Много модальных окон. Какие есть способы вызова?

    DimaLondon
    @DimaLondon
    Bootstrap 4 юзает вот такие окошки. Посмотри примеры.
    Ответ написан
    Комментировать
  • Картинки в или background-image?

    DimaLondon
    @DimaLondon
    Картинки в теле html - более кроссбраузерно, индексируются поисковиками, можно реализовать ленивую подгрузку...
    Ответ написан
    Комментировать
  • Вывести Список товаров с Наибольшим весом?

    DimaLondon
    @DimaLondon
    Попробуйте вот так:
    SELECT *, `names` as `nm` 
    FROM `product` 
    HAVING `massa` = (
        SELECT max(`massa`) 
        FROM `product` 
        WHERE `names` = `nm`
    ) 
    ORDER BY `names` 
    ASC
    WB_7jOTLfjU.jpg
    Ответ написан
  • Как лучше сохранять неотправленное сообщение?

    DimaLondon
    @DimaLondon
    ...на случай случайной перезагрузки страницы...

    Это, конечно, очень странное поведение. Но лучше делать отправку Ajax на сервер при событии onblur из INPUT или TEXTAREA.

    Сохранять желательно в сессию (если на короткий срок). При этом будет мало мусора. А если важен длительный срок и вам плевать на мусор и лишние килобайты ненужного кеша - то в файлы.

    Как вариант для перфекционистов - в БД.
    Столбцы ID (autoincrement) | user_id | form_name | form_data

    Во всех вариантах массив значений всех полей оборачивайте в JSON (желательно) или сериализуйте.
    Ответ написан
    Комментировать
  • Как вызвать метод в шаблоне в Laravel?

    DimaLondon
    @DimaLondon
    Добавьте ваш класс ImageResize в список альясов в config\app.php

    'aliases' => [
        .....
        'ImageResize' => YouFolder\ImageResize::class
    ]


    Затем сбросьте кеш конфига:
    php artisan config:clear
    php artisan config:cache
    Ответ написан
    Комментировать
  • Есть ли разница на что вешать обработчик для отправки формы - на саму форму: on submit или на кнопку отправки: on click?

    DimaLondon
    @DimaLondon
    Лучше вешать на форму (атрибут onsubmit), потому что форма отправляется не только кликом по кнопке, а и, к примеру, нажатием Enter при установленном фокусе в INPUT[type="text"].
    Ответ написан
    4 комментария
  • Как открывать веб страницу только на определенных девайсах?

    DimaLondon
    @DimaLondon
    Если исходить из логики, что планшеты рабочие, то находиться они должны на рабочих местах. Если предположить, что коннектятся к сети они через Wi-Fi, то показывать форму можно только для IP вашего провайдера.
    Ответ написан
    Комментировать
  • Как задать куку для домена с www?

    DimaLondon
    @DimaLondon
    В данном случае "www" считается поддоменом. Вот так задавайте куки для ВСЕХ поддоменов в основном домене:
    setcookie('Title', 'value', time()+3600, '/', '.domain.ru');

    Кстати, страницы с "www" и без него гуглом считаются разными URL, соответственно, разными страницами с одинаковым контентом. А одинаковый контент поисковики не любят, поэтому "www" лучше либо убрать вообще, либо добавить во все URL сайта.

    Убрать можно, прописав в .htaccess вот это правило:
    RewriteCond %{HTTP_HOST} ^www\.(.*) [NC]
    RewriteRule ^/?(.*) http://%1/$1 [L,R=permanent]
    Ответ написан
  • На какой срок кешировать изображения, файлы css, js?

    DimaLondon
    @DimaLondon
    Статические файлы кешируются обычно на максимальный срок. Хоть навсегда. Обычно - на 1 год. Для файлов CSS, JS либо миниатюр аватарок обычно используется соль к файлу. В том же ВК в виде соли используется (по крайней мере раньше так было) дата последнего изменения файла.
    Ответ написан
    Комментировать
  • Помогите подобрать преобразование «Ìàðèíà → Марина» с помощью iconv+php

    DimaLondon
    @DimaLondon
    Извиняюсь за оффтоп.
    Гораздо интересным преобразованием было бы преобразование «Валера → Марина».
    С дальнейшим использованием по назначению xD
    Ответ написан
    Комментировать
  • Замена обычных кавычек на кавычки-елочки

    DimaLondon
    @DimaLondon
    для этого необходимо писать вспомогательную ф-ю, которая учитывает закрытость открытой кавычки. И использовать ее в регулярке. Это несложно, но в ней надо учесть все варианты. Прямо так сразу и не напишу (ибо сейчас слегка «под градусом»).
    Ответ написан
    Комментировать