Ответы пользователя по тегу PHP
  • Каким образом сделана защита от скачки на сайте?

    @remzalp
    Программер чего попало на чем попало
    4 комментария
  • Php curl multi user requests?

    @remzalp
    Программер чего попало на чем попало
    1. Убедитесь, что удаленный сервер на ваш комп умеет отдавать одновременно несколько страниц. Например апачевский ab:
    ab -c 10 -n 100 http://localhost:8080/
    Аккуратно! Сопоставимо с ДоС атакой по нагрузке, убедитесь, что с той стороны будут рады Вас принять. Будет запрашивать в несколько потоков один и тот же урл.

    2. Убедитесь, что локальному серверу хватает мощности, чтобы просто отдавать страницы в несколько потоков тем же ab

    3. Попробуйте не модулем PHP работать, а вызывать через php.net/manual/ru/function.passthru.php
    НЕБЕЗОПАСНО, только теста ради.

    4. Попробуйте в тестовом скрипте не стартовать сессии (не уверен, что в этом причина, но бывает блокировка).

    И когда исключите всё за пределами cUrl, уже можно будет ковыряться с ним.
    Ответ написан
    3 комментария
  • Как правильно отправить CURL запрос на сайт с капчей?

    @remzalp
    Программер чего попало на чем попало
    Сама идеология HTTP протокола в том, что каждый запрос независимый. Единственный костыль, который позволяет отследить состояние - cookie.

    Вся последовательность работы:
    1. скачать страницу с капчей
    2. Тут же СКАЧАТЬ КАРТИНКУ КАПЧИ - вот тут у вас косяк, потому что вы отдаете урл картинки, она открывается другим браузером - у юзера, с другими куками и другим ип адресом, сохранить её в файл
    3. отдать картинку юзеру с вашего локального сервера, получить от него текст капчи
    4. текст капчи отпостить на форму из п.1

    на всех этапах следим за куками. Wireshark/tcpdump в помощь, позволит заглянуть глубже некуда.

    Функции request() из первого файла более чем достаточно, зачем костылить одноименную такую же функцию во втором случае?
    Ответ написан
  • Будет ли нормально работать псевдо стримминг на php?

    @remzalp
    Программер чего попало на чем попало
    Собственно эта вот строка:
    if (!($this->stream = fopen($this->path, 'rb'))) {
    намекает на то, что скрипт открывает файл только на чтение, так что проблем у параллельных процессов с доступом к этому файлу как-бы совсем нет.

    Проблема может быть в количестве одновременно запущенных процессов php. 1000 коннектов = 1000 запущенных процессов, каждый процесс кушает запросто мегабайт 50. Оперативной памяти серверу хватит? :)

    Все вопросы авторизации лучше доверить профессионалам:
    erlyvideo.ru/doc/auth
    Ответ написан
  • Как парсить json с чужого сервера?

    @remzalp
    Программер чего попало на чем попало
    Просто по запросу ссылки отдаётся html страница, в ней JS код, который проверяет наличие куки c нужным именем и IP адресом, если нету - устанавливает её и перезагружает страницу
    Фрагмент установки: setCookie('Y...6', '1.2.3.4', 10);

    Для того, чтобы выяснить минимальный набор заголовков, который надо передавать - используйте Chrome, инструменты разработчика, вкладка Network, правым кликом на запросе - "Copy as Curl (cmd)".

    Для тестирования скачать curl for windows, крутить запрошенный текст в командной строке, по одному убирая параметры -H

    Еще будет полезен ключик -k, чтобы не ругалось на сертификаты:
    curl -k "https://...." .....

    Когда удалось вполне разумно руками получать результат, пишите то же самое на PHP. PHP cURL справляется на ура.

    Соответственно вся логика - запрашивается страница с нужными заголовками, если отдали html, то проанализировать значение куки, поправить в запросе и переслать заново. Для совсем первого запроса запрашивать без куки, для следующих - сохранять.
    Ответ написан
    2 комментария
  • Ctrl+shift+r через php можно?

    @remzalp
    Программер чего попало на чем попало
    Самый простой вариант для самой страницы - в заголовках отдавать требование не кэшировать.

    php.net/manual/ru/function.header.php
    <?php
    header("Cache-Control: no-cache, must-revalidate"); // HTTP/1.1
    header("Expires: Sat, 26 Jul 1997 05:00:00 GMT"); // Дата в прошлом
    ?>


    Для подключаемых файлов самый надежный вариант уже предложил 65536, просто менять номер в ссылке. Можно вообще так (пример):
    <link rel="stylesheet" href="1.css?<php echo rand(); ?>">


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

    @remzalp
    Программер чего попало на чем попало
    1. ищется запись с permalink "как-напиться-недорого", по ней извлекается ид и прочая информация, дата служит больше для красоты URL, для разных дат permalink всё-равно совпадать не может

    2. Добро пожаловать в мир уникода. Всё нормально. Хотите красоты - ставьте модуль транслита, который будет генерировать permalink только с английскими символами, тогда ссылка не будет конвертиться в неправильные символы.
    Более того адрес "http://сайт.рф" при копировании в буфер обмена станет "xn--80aswg.xn--p1ai"
    Ответ написан
    Комментировать
  • Как оптимизировать данный код?

    @remzalp
    Программер чего попало на чем попало
    1. Логиниться для каждого поста смысл нет. Блок с авторизацией вынесите выше сразу после if ($postsToUp), до foreach
    2. Для отладки имеет смысл сохранять полученные страницы, плюс желательно со временем, когда именно получена.
    3. Все телодвижения с curl вынести в отдельную функцию, читабельность резко подскочит
    4. Забор из закрывающих фигурных скобок намекает, что слишком много в одну функцию запихали, уже пора разбивать на отделньые.

    Возможно ошибка происходит со стороны сервера, так что сохраняйте все страницы и смотрите, после чего перестало работать. Обработку ошибок в принципе не вижу. Единственное место, где что-то может пойти не так - if (!empty($cookies['member_id'])) - если куки не найдены, то молча завершает работу. Пусть хотя бы скажет - почему
    Ответ написан
  • Какие существуют способы проверки php функции mail() на отправку письма?

    @remzalp
    Программер чего попало на чем попало
    Самый простой вариант решения проблемы - использовать внешний SMTP сервер (гугл, яндекс?) и библиотеку отправки писем через SMTP.

    В этом случае как минимум часть ошибок уровня smtp сервера будет получена.
    Ответ написан
    Комментировать
  • Как сделать ЧПУ без id?

    @remzalp
    Программер чего попало на чем попало
    Дополню D' Normalization
    1. Завести таблицу вида id, slug, причем slug char, будет чуть быстрее (индекс не забываем). А сама таблица с приличной вероятностью будет целиком попадать в кэш.

    Самый простой вариант запроса
    SELECT id, title, author FROM books WHERE id=(select id from slugs where slug='php-dlya-chajnikov')

    2. Добавить в рецепт sphinxsearch.com, ибо он резок как понос, но это план на очень далёкое будущее, хотя если на нем реализовать поиск по описаниям, то будет очень хорошо.
    Ответ написан
    1 комментарий