Ответы пользователя по тегу PHP
  • Нормально ли в PHP определять переменную при вызове функции в списке аргументов?

    Newto
    @Newto
    В данном случае определять переменную $matches не нужно. Если вы посмотрите на документацию к функции preg_match (https://www.php.net/manual/ru/function.preg-match.php) то увидите валидный пример кода:

    <?php
    preg_match('/(foo)(bar)(baz)/', 'foobarbaz', $matches, PREG_OFFSET_CAPTURE);
    print_r($matches);
    ?>


    Эта переменная возникает из использования данной функции и пытаться определять её заранее не нужно. Если, конечно, этого не требуют особенности вашей программы.
    Ответ написан
    Комментировать
  • Как правильно создать шаблон пустого нового базового проекта?

    Newto
    @Newto
    Вам тут много чего могут насоветовать. Разные есть взгляды на построение файловой архитектуры на сервере.
    Лучшее решение -- это решение, которое примете вы сами. Можно придерживаться только нескольких правил:
    1. Отдельная папка для CSS. Не кладите CSS файлы туда, где лежит что-то еще.
    2. Отдельная папка для ОБЩЕГО js. Т.е. js который вы используете на более чем одной странице, а так же библиотека js функций должны лежать в отдельной директории. Если для отдельных страниц вы используете отдельный js, который нигде более не используется, то его можно положить в папку с отвечающим за страницу php скриптом, как пример: /registration(тут register.php)/js/register.js
    3. Что касается php файлов, то тут так просто не ответить. Обычно есть автоматом подключающиеся файлы с классами и файлы отвечающие за отдельные модули(упрощённо -- страницы). Так, автоподключающиеся файлы вы можете положить в /auto/classes(как вариант), а файлы отвечающие за отдельные страницы структурировать по типу "page/page.php".

    Это если упрощённо.
    Ответ написан
    Комментировать
  • Почему JS-скрипт не срабатывает при выводе из PHP?

    Newto
    @Newto
    alert(thrownError + '\\r\\n' + xhr.statusText + '\\r\\n' + xhr.responseText);}
    Ответ написан
    1 комментарий
  • Глюк с header location, как это так?

    Newto
    @Newto Автор вопроса
    Ответ найден. Штука интересная: https://stackoverflow.com/questions/7485111/weird-...
    По ссылке про фейсбук. А гугл отправляет #

    Самое интересное, что при перенаправлении это все будет добавляться к адресу в любом случае, если только вы не добавите свой собственный якорь.
    Ответ написан
    Комментировать
  • Как изменить видимость блока с помощью php?

    Newto
    @Newto
    <?php
    
    if(!is_int(my_price_replace($price, $product))) {
        $text = "<div class='no-price' style='display:block;'>Текст пояснения</div>";
    } else {
        $text = "<div class="no-price" style="display:none;">Текст пояснения</div>";
    }
    ?>

    И <?= $text; ?> в нужном вам месте в вашем HTML.
    Ответ написан
    Комментировать
  • Как реализовать смену форм на одной странице?

    Newto
    @Newto


    <?php 
    if(isset($_POST['form1'])) print $form2; // где $form2 это <form><input type="hidden" name="form2"><input type=submit></form>


    И так сделаете сколь угодно форм.
    Ответ написан
  • Как контролировать логин пользователя с другого компьютера?

    Newto
    @Newto
    Это банальная проверка IP адреса.
    Пользователь заходит на сайт => сайт запоминает его IP. Если пользователь авторизовывается из под другого IP, то сайт шлет ему письмо, с темой типа "это вы или не вы?".

    С точки зрения программирования(на PHP) делается так: $_SERVER['REMOTE_ADDR'] -- ip пользователя, получается при заходе на сайт. Когда пользователь регистрируется -- его ip запоминается в базе данных. И потом, при каждом посещении сайт кем-бы то ни было, проверяется ip. Т.е. вы зашли на сайт, ввели логин и пароль, программа проверяет -- совпадает ли ваш ip с тем, который у вас был раньше и если нет, то отправляет вам письмо.

    Это в самом простом варианте. Однако обычно проверяют не только ip адрес, но и его привязку к локации. Т.е. есть множество ip адресов, которые привязаны, например, к Москве. Программа может смотреть -- ваш ip не совпадает, но он привязан к Москве и вы в прошлый раз заходили с ip, который тоже был московским -- тогда все ок. Но если вы зайдете на сайт и ваш ip будет привязан к Екатеринбургу, а в прошлый раз вы заходили с ip который был привязан к Москве, то сайт пришлет вам письмо, что произошел странный вход в систему.
    Ответ написан
    3 комментария
  • Как в цикле в последнем значении не ставить /?

    Newto
    @Newto
    $string = "1/2/3/";
    $string = substr($string, 0, strlen($string)-1);
    print $string;
    Ответ написан
    Комментировать
  • Как записать в кавычках переменную с индексом?

    Newto
    @Newto
    Правильных советов вам тут уже дали пару штук. Код от generate будет работать так же если вы там двойные кавычки поставите:

    $html = <<< HTML
    
    <div class="{$object["class"]}"></div>
    
    HTML;


    А вообще говоря обычно разработчики не парятся и просто переопределяют переменные. Так оно выглядит красивей и без всяких ухищрений с кавычками:
    $class = $object['class'];
    $string = "<div class='{$class}'></div>";
    Ответ написан
  • Не удается авторизоваться через curl, почему?

    Newto
    @Newto
    Все зависит от того, как построена авторизация на сайте.
    Попробуйте
    CURLOPT_HTTPHEADER => array(
        'Authorization: Basic ' . base64_encode($user.':'.$password)
    );
    Ответ написан
    Комментировать
  • Как защититься от спама на лендинге без потери конвертации?

    Newto
    @Newto
    Я могу вам предоставить идею как это сделать без сессий и кук. Но мне важно знать, вы сами понимаете как происходит защита отправки данных от ботов? Технология капчи -- она уже проверена годами и нормальных альтернатив ей просто нет и то что я вам смогу предложить, это изврат. Вопрос защиты от спама это вопрос о качестве исполнения капчи. А любая качественная капча -- это сессии и куки. Тут речь идет именно о возможности первой отправки вашей формы, а не о обработке нескольких. Если первая нармальная -- окей. Если нет -- то ошибка. Любой другой алгоритм по определению ущербен.
    Ответ написан
  • Как запустить несколько php скриптов одновременно?

    Newto
    @Newto
    function sendPostInstant(string $url, string $postfields)
        {
            $ch = self::init();
            
            curl_setopt($ch, CURLOPT_URL, $url);
            curl_setopt($ch, CURLOPT_POST, 1);
            curl_setopt($ch, CURLOPT_POSTFIELDS, $postfields);
            curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
            curl_setopt($ch, CURLOPT_TIMEOUT_MS, 1000);
            curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
            
            curl_exec($ch);
            
            self::close($ch);
        }
    $result = sendPostInstant('путь к вашему скрипту', '');

    Этот код запустит ваш скрипт столько раз, сколько вы вызовите sendPostInstant('путь к вашему скрипту', '').
    А в $result будет результат выполнения.
    Ответ написан
    Комментировать
  • Как обновить страницу у пользователя при выполнении условия?

    Newto
    @Newto
    Правильная реализация сказана выше Алексеем -- это нужно делать через сокеты.
    Более простая, но нежелательная реализация -- через аякс. Выглядит это примерно так: 1) администратор клацает галочку -> ставится запись в БД (admin_klazz = 1). На стороне пользователей стоит скрипт, который раз в, скажем, 10 секунд проверяет статус этой самой admin_klazz. Если admin_klazz изменяется с 0 на 1, то перезагружается страница. Но если это реляционная база типа MySQL то дергать ее каждые 10 секунд еще и многими пользователями -- очень плохая идея. Однако если у вас стоит, скажем, Redis, и вы будете записывать этот флаг admin_klazz в него, то это сильно минимизирует затраты серверных мощностей.

    Но, как я и сказал выше, правльно -- через сокеты. Остальное -- костыли.
    Ответ написан
    Комментировать
  • Как изменить кодировку символов в PHP PhantomJs?

    Newto
    @Newto
    А если вы на сайт перейдете просто через строку браузера, с GET переменными (типа https//site.com/?a=кириллица), то там символы нормально отобразятся? Просто если нет, то это не у вас проблемы, а на том сайте.
    А вот если нормально и вы забираете контент после GET запроса через, например, Curl, то это уже проблема на вашей стороне. В таком случае просто проставьте кодировку UTF-8.

    header('Content-Type: text/html; charset=utf-8');

    В скрипте.
    И
    <meta charset="utf-8" />
    в html коде страницы.

    Если не поможет и сайт куда вы отправляете запрос находится не на локалке, а в сети, то дайте ссылочку, я посмотрю :)
    Ответ написан
    Комментировать
  • Как отобразить любой сайт на моем?

    Newto
    @Newto
    Дык просто же. Читаете про html frameset. Ставите два фрейма -- верхний для шапки и нижний для сайтов. В верхний ставите src=ваша шапка.html, в нижний src=сайт.ру

    Сайт.ру при таком подходе будет свободно работать в вашем фрейме, при условии что у них ссылки не с target=_top

    А если работоспособность чужого сайта не нужна и хочется без фреймов, то можно делать div-ами, заполняя нужный div контентом сайта, взятым через Сurl, например (только тогда вам там программно нужно будет много что менять в чужом html коде, так что это такое себе).

    Или анонимайзеры как работают. Берут весь код сайта, парсят его, меняют ссылки (типа если запрошен сайт.ру, то "href='/' и src='/'" меняются на "href='ваш сайт?url=сайт.ру/' и src='сайт.ру/'"), плюс перенаправляют POST и GET запросы в себя, отправляют их на запрошенный сайт и отдают результат. В общем это трудоемкая весьма задачка если выбирать этот подход.
    Ответ написан
    Комментировать
  • Как отправлять сообщения из очереди только после ответа получателя?

    Newto
    @Newto Автор вопроса
    Кажется нашел. Видимо нужно смотреть в сторону basic_ack/basic_nack
    Ответ написан
    Комментировать
  • Почему не отправляется сообщения на email open server?

    Newto
    @Newto
    Функция mail не умеет отправлять письма с локального хоста. Для этого посмотрите в сторону, например, библиотеки PHPmailer.
    Ответ написан
    Комментировать