Ответы пользователя по тегу PHP
  • Как реализовать вместо рандома очередь, 1, 2, 3, 4 и т.д.?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Зависит от конкретной задачи. Если это что-то типа рекламы, где точность не важна, то можно хранить счетчик в самом браузере в localStorage (через JavaScript).
    var counter = localStorage.counter || 0; // загружаем
    counter++;
    if (counter >= 10) counter = 0;
    localStorage.counter = counter; // сохраняем
    
    console.log(counter == 9 ? "Да" : "Нет");
    Ответ написан
  • Регулярные выражения: как найти слово с начинающееся с цифры?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Тут разные подходы могут быть.

    Можно перечислить все символы в артикле:
    \b(\d[\d\w.-]*)
    (числа, латинские буквы, дефис, точка)
    Если нужны русские, их нужно отдельно вписать по типу А-Яа-я.

    Также можно использовать выражение "всё кроме". Например, "кроме пробела":
    \b(\d[^ ]*)

    В общем виде будет как-то так:
    preg_match('/\b(\d[^ ]*)/', $product->name, $matches);
    Ответ написан
    1 комментарий
  • Можно ли в PHP из дочернего процесса создавать еще дочерние процессы?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    В PHP можно создавать процессы внутри процессов, но есть некоторые нюансы, которые следует учитывать.

    Когда ты вызываешь pcntl_fork(), ОС создает копию текущего процесса. Этот новый процесс наследует от родительского процесса все открытые файлы и соединения. Это включает в себя все файлы, открытые с помощью popen(), fopen(), сокеты, соединения с базой данных и т. д.

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

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

    Кроме того, ты можешь столкнуться с проблемами с буферизацией вывода. Функции вроде popen() обычно буферизуют свой вывод, и если ты не очистишь буфер перед тем, как завершить процесс, ты можешь потерять часть вывода. Ты можешь использовать функции вроде fflush() для очистки буфера перед завершением процесса.
    Ответ написан
    1 комментарий
  • Как можно в PHP-скрипте получить на 100% достоверную информацию об IP веб-клиента?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    $_SERVER['REMOTE_ADDR']
    Ответ написан
    Комментировать
  • Можно как то суммировать эти цифры использую цикл php?

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

    Если сомневаетесь, как именно должно что-то работать, перечитайте основы в учебнике/документации (по какому алгоритму работает цикл while, в каком порядке выполнится $a=$b+=1 и т.п.)
    Ответ написан
    Комментировать
  • Почему мое условие на проверку ширины неправильно работает?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если в будущем у меня будет мерседес, то выдайте мне ключи от него сейчас.
    Ответ написан
  • Почему данные с сервера приходят с null?

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

    Смотрите в сторону серверного кода, который эти самые заголовки разбирает. Возможно, там при каких-то заголовках одна логика, а при других заголовках - другая логика (содержащая ошибки по сравнению с первой логикой). Может быть, там простейшая защита от парсинга и т.д. В общем, надо смотреть серверный код.
    Ответ написан
    Комментировать
  • Как поменять номер телефона внутри текста regexp?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Это делается очень просто. Для этого нужно знать лишь основы регулярных выражений. Поэтому нужно сделать следующее:
    1. Вбить в гугл "регулярные выражения" и проследовать на Википедию, ознакомиться со статьёй.
    2. Далее вбить в гугл "регулярные выражения php" и проследовать к документации PHP, изучить нужные функции из API.

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Зная timezone сервера, можете получить "чистый" timestamp (зона +0). И далее уже к нему прибавлять или отнимать timezone клиента/запроса.
    Ответ написан
  • Как работать с большими массивами?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Если поиск в массиве осуществляется через foreach, то грош цена такому массиву.

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

    Конечно, на формирование массива тоже тратится время, какой бы оптимизированный поиск ни был. Поэтому супер большие массивы - тоже признак плохой оптимизации. Не зря же придумали базы данных. А что если в базе не 30 тыс. товаров, а миллиард? Тоже загоните их в массив? Надеюсь, что нет, а вместо этого будете пользоваться средствами поиска самой базы данных.

    Но если всё же оптимизировать создание массива наравне с последующим поиском по нему, то нужно будет углубиться в суть задачи, а также изучить, какие вообще есть структуры данных в PHP, какие у них плюсы и минусы, как они устроены на низком уровне, и как на их основе сделать более совершенные структуры данных (конкретно для вашей задачи).
    Ответ написан
    3 комментария
  • Почему javascript и php сообщают мне неправильное время?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Документацию по Date.now() читали?

    Метод Date.now() возвращает количество миллисекунд, прошедших с 1 января 1970 года 00:00:00 по UTC.

    Гуглим, что такое UTC.

    Соответственно, для date() можно заюзать date_default_timezone_set()
    Ответ написан
    Комментировать
  • Как определяют реальный IP адрес запроса?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Прокси может передавать IP адрес. Прокси, которые не передают IP, называются анонимными (условно, конечно же).

    А вообще другой сайт может и не знает реальный IP адрес, а просто видит, что запрос идёт именно с прокси. То есть сайт знает список прокси, и видит, что IP запроса совпадает с одним из прокси. Либо сайт сканирует конкретные или все порты на IP запроса с целью обнаружить там прокси. Как вариант)

    И ещё сайт может банить не за прокси, а за сам факт париснга. Как он обнаруживает парсинг - это совсем другая история.
    Ответ написан
    5 комментариев
  • Как сделать прогресс бар с отрезками?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Для поиска ошибок в существующем коде нужно заняться его отладкой.
    Если совсем не знаешь, с чего начать, то начни с самого понятия отладка.
    Ну или жди телепатов.
    Ответ написан
    2 комментария
  • Как сделать все возможные комбинации?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Вложенный цикл, очевидно.
    $arr = [1, 2, 3];
    $len = count($arr);
    
    $new_arr = [];
    
    for($i=0; $i<$len; $i++) {
        for($j=0; $j<$len; $j++) {
            $new_arr[] = [$arr[$i],$arr[$j]];
        }
    }
    
    var_dump($new_arr);
    Ответ написан
    1 комментарий
  • Как сохранить значение кнопки после обновления страницы?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    localStorage

    Можно локально (т.е. в браузере) хранить информацию, что купон уже активирован. И не нужно будет лишний раз беспокоить БД.
    Ответ написан
    7 комментариев
  • Как сохранять информацию о нажатии на кнопку на сервере?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Я так понял надо взаимодейстовать с сервером и там сохранять информацию

    Да. В момент нажатия отправить запрос на сервер и отложить реакцию до прихода ответа от сервера. На сервере же будет обычная очередность: Петя, Вася, Петя, Вася и т.д. Таким образом, какие бы ни были пинги, очерёдность будет довольно строгая. А если до сервера не удалось достучаться, то можно в качестве реакции что-то типа Radnom(Петя,Вася).
    Ответ написан
  • Как при переадресации на страницу авторизации запомнить изначальный запрос?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    В куках можно запомнить.
    Ответ написан
    Комментировать
  • Как преобразовать число в строку?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    $soldprice = 123;
    echo(" x " . $soldprice);
    Ответ написан
    3 комментария
  • Как слить несколько массивов с одинаковыми ключами, но выбрать самые большие значения?

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Очень просто.

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

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

    dollar
    @dollar
    Делай добро и бросай его в воду.
    Можно воспользоваться функцией hash_file().
    Надеюсь, SHA-256 вам будет достаточно.
    Ответ написан
    4 комментария