Ответы пользователя по тегу PHP
  • Сжатие html посредством кода, вызывает ли данный код какую-то нагрузку и есть от него польза?

    @rPman
    Если цель - уменьшить трафик, то сжатием пусть занимается веб сервер, собственно так и есть по умолчанию, все происходит прозрачно для пользователя.

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

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

    @rPman
    Одно слово - вииртуализация.

    Так как при попытке установить старую версию ОС на новое железо можно получить странные проблемы (а можно не получить, не попробуешь не узнаешь) но главное устаревший софт уже давно не поддерживается и никто баги в нем не чинит. Закрыть виртуалку фаерволом (просто когда она за nat уже хорошо) логичнее всего.

    Поэтому ставишь современную ос, а внутри средствами виртуализации или любых инструментов создания песочницы (даже chroot поможет) устанавливаешь устеревшую версию ОС и приложений. В простом варианте может подойти просто миграция (читай копирование) из старого железа внутрь виртуалки как есть, останется настроить сеть и все продолжит работать как работало.

    ОС FreeBSD 7.2
    уходи от этого, на linux, рекомендую для новичков - на ubuntu, сама freebsd может и норм но настраивать что то нестандартное будет новичкам тяжелее на порядок

    С высокой вероятностью Lighttpd и MySQL подойдут новых версий, и большая часть проблем создаст код, написанный под старую версию php, т.е. почему бы не попробовать установить на современную ОС только его (но придется собирать из исходников, я не видел бакпортов php такой старой версии под новые) т.е. вся возня, найти максимально высокую версию ОС для запуска в виртуалке, для которой есть php4

    Для установки старой версии ubuntu можно использовать архив old-releases.ubuntu.com и указав их репы в debootstrap собирать какую угодно старую версию минисборки в каталог, которую уже можно виртуализировать хоть chroot хоть lxc хоть полноценной виртуалкой
    Ответ написан
    2 комментария
  • Как передать содержимое в переменную PHP?

    @rPman
    Отвечу максимально полно

    Чтобы скрипт php что то 'получил', он должен быть как минимум запущен, подавляющее большинство стратегий создания приложений на php это когда клиент (браузер) либо чистый html либо javascript делает запрос на сервер, а сервер запускает на короткое время php скрипт чтобы тот вернул ответ (готовый html или данные в каком то виде, например json чтобы javascript обработал)

    Общение между браузером и сервером происходит по http короткими запросами вопрос-ответ, поэтому фраза 'установить переменную' немного некорректна в этом случае, ведь установив переменную в результате запроса, таковой она будет только тот короткий момент, пока этот запрос обрабатывается (например все что идет в http запросе как GET или POST параметры, веб сервер автоматически прописывает в глобальные переменные $_GET и $_POST соответственно, бери и читай). Для отправки запросов из браузера на сервер есть готовые библиотеки, гуглить ajax (на чистом javascript без библиотек для этого можно использовать XMLHttpRequest)

    Поэтому есть способ передачи данных через заголовки запроса, с помощью cookies, браузер устанавливает куки, которые автоматически в дальнейшем добавляются к любому запросу с данного домена на сервер. На сервере в php доступ к ним можно получить из переменной $_COOKIE. Так же есть способ установить куки со стороны сервера. С точки зрения эффективности это не самый лучший способ, так как данные получаются не сохраняются где то на сервере, а транслируются повторно с каждым запросом, поэтому большие объемы хранить там не рекомендуется.

    Существует подход, когда php приложение не короткоживущий скрипт а сам веб сервер, обработка запросов, чтение get/post параметров, куки и прочее, в этом случае обрабатывает это приложение (есть библиотеки, например асинхронный php react), но зато, так как приложение не завершает свою работу после запроса, прочитав переменную из запроса ее можно сохранить в памяти приложения. Этот подход на порядок ускоряет работу приложений по сравнению с классическим http-rest подходом (ведь скриптам не нужно на каждый запрос восстанавливать состояние серверного приложения, загружая нужные данные откуда-то, например из базы данных) т.е. из коробки более быстрый но сложнее к масштабированию.

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

    @rPman
    Без полного чтения файла (хотя бы один раз, например построить индекс) до нужной строки, без знания о размерах этих строк - невозможно

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

    p.s. если размер строк фиксированный, то само собой можно вычислить позицию в файле простым умножением номера на размер строки

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

    @rPman
    читай заголовки и ищи Content-Disposition

    Заголовки парсить вручную, добавив их в вывод curl_setopt($ch, CURLOPT_HEADER, 1);
    заголовки в текстовом виде, по строке на заголовок (разделитель \r\n), между именем и значением разделитель ': '

    p.s. если content-disposition нет, то имя файла исторически берут из url, отсекая все до конца начиная с ? и до первого '/' если читать с конца (никто не гарантирует что там будет желаемое в принципе)
    Ответ написан
    Комментировать
  • Почему не срабатывает код php?

    @rPman
    ты 'добросовестно' отключил вывод сообщений об ошибках с помощью @ при вызове unlink и теперь удивляешься что тебе непонятно, почему ничего не работает?

    убери это и смотри по логам, там будет точно указано, какой файл и почему не получилось удалить
    Ответ написан
  • Задача по арифметическим операторам php?

    @rPman
    $a = 40; 
      $b = 54; 
      $c = 66; 
      $d = 5;
    разве проверочное окно не ожидает что входные числа оно будет задавать само, т.е. твоя программа должна их считать с помощью к примеру fgets(STDIN) - читает одну строку из стандартного ввода и возвращает в виде строки

    На вход подается четыре числа. Последовательность того, что нам надо с ними сделать:
    ненавижу такие постановки задач, после них вопросов еще больше появляется - как подаются, какой разделитель, int или float? я молчу про систему счисления, это типа все подразумевают десятичную но мало ли
    Ответ написан
  • Как узнать IP по доменному имени?

    @rPman
    Ответ написан
    Комментировать
  • Как правильно написать свой обработчик ошибок php?

    @rPman
    Если в скрипте произошла ошибка, то как мне откатить транзакцию
    старайся чтобы все, что касается работы с каким то объектом, у которого состояние требует реакции (закрытие файла, транзакции бд и т.п.) то настоятельно рекомендуется описывать всю логику примерно на одном уровне/в одном месте

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

    Язык программирования php рекомендует и предлагает для этого конструкцию try catch finaly, там где может произойти ошибка, в catch прописывай логику завершения именно данной секции (откатить транзакцию) и вызывай следующий throw по цепочке, в finaly же прописывай то что нужно исполнить в любом случае.

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

    @rPman
    Одноразовый код логичнее через eval выполнять

    Задача то какая, неужели без исполнения когда по строке не обойтись?
    Ответ написан
  • Как запустить сервер на своем ПК?

    @rPman
    Настоятельно рекомендую не использовать готовые мега сборки для разработки, а взять чистую linux операционку (пусть и серверных ревизий но не обязательно) и установить ее в виртуальной машине (можно в windows wsl использовать но я так же настоятельно не рекомендую этого, так как проблем это добавит а для начинающего лишние они не нужны), для начинающих пользователей рекомендую VirtualBox

    Этот подход подготовит начинающего разработчика к тому что его ждет на VDS-ках и позволит научиться базовым основам администрирования.

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

    @rPman
    Причина тормозов - неправильно оформленный запрос, то что можно посчитать на sql сервере, почему то считаешь на бакэнде.

    Даже не изучая код, видно что вместо того чтобы делать 100500 запросов, по одному для каждого $this->room[$cart_min]->Room_id, достаточно собрать эти идентификаторы в список и сформировать один запрос на выгрузку сразу всех room_images (так как работа списка не зависит от ответа от sql сервера)

    Если количество идентификаторов меньше тысячи, то это можно сделать с помощью select ... from ... where id in (1,2,3,4,5,...)
    если больше, то подумать, может пусть списком идентификаторов сам сервер сразу и заведует, храня их в какой-нибудь табличке
    Ответ написан
  • Почему не получается обновить до php7.3 на Ubuntu 16?

    @rPman
    Потому что 16-ая версия ubuntu xenial устарела на два lts релиза, а через месяц уже будет три
    В указанном ppa нет сборок под xenial

    есть неофициальные архивы, так что с осторожностью:
    https://launchpad.net/~sergey-dryabzhinsky

    p.s. совет, если обновить систему никак не получится, виртуализируй что можешь, либо полноценными виртуалками либо с помощью lxc или docker
    Ответ написан
    Комментировать
  • Как сортировать массив после каждой итерации?

    @rPman
    Нужно собрать посылки со складов. Если посылка весит больше 5, то посылка должна быть отправлена со склада "foo", иначе "bar". Но если на складе нет необходимого количества, то это условие нужно опустить и исходить из наличия. Вес посылки становится известен только при обращении к складу.

    Единственное условие выбора склада у вас - 'вес посылки больше 5', не зная веса посылки принять решение невозможно.

    В данной задаче необходимо топать в оба склада одновременно или по очереди и запрашивать посылку.
    Ответ написан
  • Как с помощью mPdf в PHP на один лист добавить две картинки?

    @rPman
    Сделай одну картинку, скомпоновав их с помощью, да хотя бы модуля gd или с помощью консольной утилиты imagemagic (она так же умеет формировать pdf из серии картинок)
    Ответ написан
    Комментировать
  • Получения энтропии для генератора случайных чисел в PHP - как можно сделать случайность по настоящему случайной?

    @rPman
    самый дешевый и доступный практически всем 'аппаратный источник шума' на реальном железе (не виртуалки) - микрофон звуковой карты, даже наверное подключив просто резистор можно получить шум, особенно если повысить частоту дескритизации до максимума и включить усилитель.

    https://habr.com/ru/post/62237/
    Ответ написан
  • Как отправить форму несколько раз с разными данными?

    @rPman
    Тебе на php нужно симулировать отправку данных html формы?

    Это делается инструментом curl (пример), либо консольной утилитой (команду покажет сам браузер в дев-консоли, на вкладке network правую кнопку на нужном вызове - копировать - curl команду).
    Ответ написан
  • Как получить m3u8 файл с сайта?

    @rPman
    Попробуй сконвертировать m3u8 файл в готовый видеофайл с помощью ffmpeg (он умеет загружать), чтобы не перекодировало указывай кодек -c copy

    Если сайт смотрит на http заголовки, который отправляет плеер/качальщик, и блокирует их, то очевидно их придется вручную подставлять, копируя из девконсоли браузера, один раз скопируй команду загрузки куска видео затем напиши скрипт, загружающий этой командой все куски локально и собирай с помощью ffmpeg
    Ответ написан
  • Не могу вывести результат получаемый от Google recaptcha v2, как это можно сделать?

    @rPman
    вангую что скрипт обработчика сначала формирует строку ответа а потом выводит заголовки ответа и сформированную строку, соответственно если что-либо вывести перед выводом заголовков, вылетает ошибка

    чтобы понять что происходит, нужно смотреть сообщения об ошибках на веб сервере

    p.s. отладочные логи выводи не в ответ с помощью echo а пиши в файл
    Ответ написан
    Комментировать