Ответы пользователя по тегу PHP
  • Как записать массив в БД?

    iqw
    @iqw
    Serior Software Engineer
    Поле id должно быть auto increment (в базе), и его необходимо убрать из запроса, id будет генерироваться на уровне базы
    Ответ написан
    1 комментарий
  • Как программно добавить товар на olx.ua?

    iqw
    @iqw
    Serior Software Engineer
    Так как olx не имеет api - нужно писать софт, который залогинится от реального пользователя и get-post запросами будет поочередно постить обьявления одно за одним, только могут быть подводные камни (не исследовал систему безопасности olx, детальнее не скажу) в виде CSRF токенов на формах, капч, порога обьявлений на единицу времени.
    Ответ написан
    Комментировать
  • Как уменьшить размер изображения в php?

    iqw
    @iqw
    Serior Software Engineer
    Без уменьшения качества - никак, главное чтобы уменьшение качества не повлияло на саму картинку (ее восприятие), вот есть небольшой гайд, (отсюда):

    <?php 
    	function compress($source, $destination, $quality) {
    
    		$info = getimagesize($source);
    
    		if ($info['mime'] == 'image/jpeg') 
    			$image = imagecreatefromjpeg($source);
    
    		elseif ($info['mime'] == 'image/gif') 
    			$image = imagecreatefromgif($source);
    
    		elseif ($info['mime'] == 'image/png') 
    			$image = imagecreatefrompng($source);
    
    		imagejpeg($image, $destination, $quality);
    
    		return $destination;
    	}
    
    	$source_img = 'source.jpg';
    	$destination_img = 'destination .jpg';
    
    	$d = compress($source_img, $destination_img, 90);
     ?>
    Ответ написан
    Комментировать
  • Правильно ли я делаю регистрацию?

    iqw
    @iqw
    Serior Software Engineer
    Из официальной документации PDO (php.net/manual/ru/pdo.prepared-statements.php):
    $stmt = $dbh->prepare("INSERT INTO REGISTRY (name, value) VALUES (:name, :value)");
    $stmt->bindParam(':name', $name);
    $stmt->bindParam(':value', $value);
    
    $stmt->execute();


    Тоесть Вы запрос подготовили, но не выполнили. Так же нужно заменить прямую вставку переменной - параметром, который позже установить с помощью метода bindParam. С точки зрения логики работы - все должно получиться, с точки зрения архитектуры функционала аутентификации - Ваш код небезопасен, монструозен и непереносим, советую использовать готовые библиотеки для реализации данного функционала, или же следовать гайдам, например - https://daveismyname.blog/login-and-registration-s...
    Ответ написан
    Комментировать
  • Что нужно указать, чтобы на всех страницах сайта, кроме главной, были свои значения CSS для элемента?

    iqw
    @iqw
    Serior Software Engineer
    На главной в <body> добавьте class="main-page" (или типо того, как вам удобнее), на остальные страницы - например просто class="page"
    Потом в css происходит разграничение стилей:
    .simple {
    //Базовые стили для всех вариантов .simple
    }
    
    .page .simple {
    //Дополнительные стили для всех страниц
    }
    
    .main-page .simple {
    //Дополнительные стили для главной страницы
    }
    Ответ написан
    Комментировать
  • Как определить конечный сайт через curl?

    iqw
    @iqw
    Serior Software Engineer
    Если нюансы HTTP редиректов еще можно учесть - то javascript редиректы - проблема, там в коде может и не быть ссылки редиректа, а она может получаться с другого хоста аякс запросом (рекламные сети, например так делают). Чтобы пройти по всем редиректам - необходимо качественно выполнять все js на страницах (используя какие-то движки рендера js, например v8 (https://developers.google.com/v8/?hl=ru)
    Ответ написан
    Комментировать
  • Как спроектировать ленту активности?

    iqw
    @iqw
    Serior Software Engineer
    Я бы делал следующим образом: сделал бы систему ивентов, например - создалась страница, добавлен коммент, и когда происходит одно из этих собитый - тригерится ивент, обработчик его ловит, пишет основные данные в отдельную таблицу (что-то типо EventLog), поля, которые содержит эта таблица - user_id(int), date(datetime), event_type(tinyint), triggered_on(int), где user_id айди юзера, с привязкой его в энтити напрямую, date - дата события, event_type - константа типа ивента (описать можно константами или другим удобным способом, я бы, например, делал дискриминатором по полю event_type с под-сущностями, каждая из которых будет иметь привязку на свой ожидаемый тип сущности, наследуя геттеры, тут есть большое пространство для улучшения взаимодействия), triggered_on - id записи в базе, которая была создана-обновлена etc. После этого имеем список всего, что делал юзер, таблица достаточно простая, логирование можно расширять.
    Данный этап вносит некую денормализацию данных, чтобы упростить их поиск.

    Этап второй - выборка. Тут строится нехитрый запрос, который исключает данные, что этому пользователю не надо.
    Джойном подгружается сущность юзера, остальные данные можно получить на момент рендера этого списка (если есть дискриминатор, предложенный выше, запросив что-то типо {{ eventLog.triggeredOn.title }}).

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

    В любом случае, построение эффективной бизнес-логики - зависит от всех нюансов задачи, того финальный результат составлять Вам, такие задачи никто не решит в ответ на вопрос на Question-Answer сайте :)
    Ответ написан
    Комментировать
  • Создание крона?

    iqw
    @iqw
    Serior Software Engineer
    * * * * * /usr/local/bin/php /home/c/****/server.php
    запуск каждую минуту

    0 * * * * /usr/local/bin/php /home/c/****/server.php
    запуск каждый час (вариант, который Вы прописали)

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

    iqw
    @iqw
    Serior Software Engineer
    На самом деле - надежно никак. Можно написать воркараунд, если сервис other.com оставляет после себя какие-либо зацепки (например передает кастомные хедеры, которых при прямом запросе на site.com нет). В случае если все чисто и зацепок нет - то ничего с этим не поделать, увы.
    Ответ написан
  • Как смотреть PHP логи в реалтайме через консоль Windows [СРОЧНО]?

    iqw
    @iqw
    Serior Software Engineer
    Можно использовать Power Shell (что-то на подобии терминала linux в windows), там есть комманда tail, которая как раз позволяет читать лог в реальном времени. Документацию можно найти тут - https://blogs.technet.microsoft.com/rmilne/2016/06...
    Ответ написан
    Комментировать
  • Есть готовая библиотека для написания сценариев/логики бота?

    iqw
    @iqw
    Serior Software Engineer
    Для реализации функционала бота хорошо подойдут библиотеки автоматического функционального тестирования, например Selenium Webdriver (www.seleniumhq.org/download ), Codeception (codeception.com ). Причем первый подойдет Вам больше, так как используя реальный браузер может реально отрабатывать JS, кликать по кнопкам, читать формы и много-много другого.
    Суть их работы в чем - сценарий пишется вручную на php-коде (или на любом другом языке в случае с Selenium Webdriver). Сценарии собой представляют последовательность действий, например - открыть страницу, кликнуть по кнопке, считать данные, которые вылезли в попапе, ввести другие данные, нажать кнопку сохранения, проверить что все сработало. Все действия сценария выполняются согласно функциональности выбраной библиотеки и с помощью xpath-css селекторов (для поиска блоков на целевой странице).
    Ответ написан
  • Как при клике изменить число в базе данных?

    iqw
    @iqw
    Serior Software Engineer
    Функция myAlerts() в данной реализации (onclick атрибут) должна послать асинхронный запрос на сервер, который уже сделает запись в базу.

    Так как javascript выполняется в браузере уже после выполнения кода на сервере - единственный способ сделать запись в базу - AJAX (еще есть вебсокеты, но это более сложная тема).

    https://ru.wikipedia.org/wiki/AJAX

    Обработчиком этого запроса может служить выделенный файл php, или роут (если Вы используете фреймворк)
    Ответ написан
    Комментировать
  • Какие есть системы сборки, умеющие выкачивать зависимости из интернета, как Maven?

    iqw
    @iqw
    Serior Software Engineer
    По веб проектах на php/javascript - Bower, Pear.
    Ответ написан
    Комментировать
  • Как в PHP проверить содержимое массива?

    iqw
    @iqw
    Serior Software Engineer
    Смотрите и другие строковые функции.
    www.softtime.ru/bookphp/gl3_3.php
    Уверен, вы для себя найдете там немало интересного. Конечно, способ покруче - так preg_match с регуляркой, но если такое проделать сложно пока - пользуйтесь строковыми функциями.
    Ответ написан
  • Как средствами php и mysql найти данные, и потом обновить?

    iqw
    @iqw
    Serior Software Engineer
    Если тебе нужно что то прибавить к данным - то делаеться это так:
    "update student set tel = tel + 1 where fio like '%".$fio."%'"

    чисто для примера как работать с уже существующими данными, врядли будет нужно прибавлять единицу к номеру)
    Ответ написан
    Комментировать