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

    @rPman
    Начните с ТЗ. Любая работа должна начинаться с нормальной постановки задачи. Фраза хочу все объединить ни о чем не говорит. Если так поставить задачу, разработчик шутник просто соберет все ваши скрипты на одну страницу ;) обычным объединением (.е. максимум работа, изоляция переменных в коде) само собой вам скорее всего этого не надо. Вот и начните с того что сядьте и подумайте, что вы хотите видеть как пользователь результата. Рисуйте (просто описанием текстовым тоже покатит) какими вы видите страницы с примерами, определите бизнеслогику и т.п.
    Ответ написан
    Комментировать
  • Почему если в php сложить число и текст, то выведется только число. Текст и число, то все равно только число?

    @rPman
    Плюс в php всегда возвращает число. Если хотите объединение как строк, используйте оператор точка '.'.
    echo 123.'xxx'.987;

    Осторожно так как точка ещё и десятичный разделитель

    ещё неплохой вариант использовать автоматическую подстановку значений переменных, если строка в двойных ковычках то $ в строке обрабатывается с заменой на заявление переменной.
    $xyz='asd';
    echo "\$xyz='$xyz'";

    выведет
    $xyz='asd'
    Ответ написан
    Комментировать
  • Как остановить экспортирование файла, если процесс экспорта уже запущен?

    @rPman
    Что у вас за вебсевер? В настройках сервера можно определить, сколько одновременно запросов он может обрабатывать, а некоторые (например встроенный в php по ключу -S ) и вовсе умеют только один поток, остальные запросы в этот момент ждут.

    Правильное и универсальное решение - вынести длительные задачи в сторонний сервис/процесс, запускаемый независимо (например php-cli запускаемый с помощью services а во время отладки просто в консоли или screen). Совсем правильно - организуйте ваш сервис в виде приложения с использованием например reactphp (websocket сервер например и проксируйте его через ваш веб сервер), при этом организуйте работу полностью асинхронно (есть методы для асинхронной работы со всем включая работу с файлом, т.е. ваш цыкл будет выглядеть как метод, который указан в качестве вызова успешной записи в файл для записи следующей порции данных)

    Веб сервер не должен ждать долгие задачи а должен работать в режиме сигналов - процесс запущен, процесс закончен, команда отмены процесса...
    Ответ написан
    Комментировать
  • Как организовать обработку больших объемов данных?

    @rPman
    В вашем случае, даже если числа float, где то нужно хранить 15 000 000 * 500 000 * 4 = 30 000 000 000 000 это 30 терабайт. Это просто линейный блоб, файл в формате 4 байта на число. И это без индексов (они появятся когда вам понадобятся поисковые запросы по выборкам). Не вздумайте брать универсальные базы данных, у вас узкая специализация и практически любое другое готовое решение будет требовать от вас плату либо местом либо процессорным временем.

    Никуда от этих чисел вам не деться!.

    3 минуты на последовательность умноженные на 15 миллионов штук - это приговор, 31тысчу cpu дней, это вам кластер из тысячи процессоров надо на месяц загружать, и хорошо если можно использовать gpu (это может позволить одной машине делать не десяток вычислений а сотни за раз), тогда обойдетесь десятком инстансев амазона и за пару тройку недель посчитаете.

    Поверьте, стоимость места в данном случае настолько мизерная что даже смешно ;)

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

    Отличный пример, вам нужно посчитать матрицу якобиана для нейронной сети, изменяя значения весов по одному +e и -e. Т.е. нужно вычислить матрицу N*N чисел где N - количество весов в нейронной сетию Если решать задачу в лоб, это значит нужно O(N^3) вычислений - это дико много. Но, так как для каждого числа из матрицы в нейронной сети меняется только один вес, то почти в половине случаев вычисления веса будут использовать одни и те же числа (особенно если вес изменился в сети близко к ее концу) а значит если хранить промежуточные значения вычислений, можно их опускать. На практике хранить ВСЕ на постоянной основе не по требуется, достаточно используя знания в каком порядке идут вычисления (не важно в каком она будет считаться, пусть например с конца) можно рекурсивно считать нейронную сеть, храня эти промежуточные значения в стеке. Трудоемкость конечно все равно останется большой где то порядка O(N^2*log(N)*...) но за ускорение будет небошая плата в N*log(N) памяти
    Ответ написан
    1 комментарий
  • Как выполнить этот код на PHP?

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

    Нажмите F12, выберите закладку network, включите логирование (страница перегрузится), отправьте файл на сайт (что там у вас форма постинга сообщений?) и старательно изучите лог network, на нужной записи нажмите правую кнопку и выберите в меню Copy - Copy as curl.

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

    @rPman
    php однопоточный, а достпуные многопоточные сборки - это чтобы плагины работали синхронно, если это им зачем то понадобится.

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

    Если вам прямо смерть как надо, переписывайте на асинхронную работу свои методы, тогда у вас вообще такой проблемы не возникнет. phpreact смотрите.
    Ответ написан
  • PHP проблема при заливке файлов размеров более 2GB?

    @rPman
    2гб - выглядит так будто попали в лимит 32-битной адресации (т.е. размер файла в signed int), в php целые числа при превышении 2^31 преобразуются в double, со всеми вытекающими от сюда глюками.

    попробуйте 64-битную реализацию на тестовом железе, если я прав.
    Ответ написан
    2 комментария
  • Как генерировать png на 300 точек в php?

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

    На практике вы можете что то гарантировать, если программное обеспечение (и даже устройство) обеспечение у клиента совпадает с вашими тестовыми стендами, тогда пользуйтесь хоть html или даже ms word (вот уж где геморой).

    Если вы хотите попробовать печать именно изображения, используйте метод GD - setImageResolution. Кажется в jpeg эти данные могут быть сохранены.

    p.s. изображение может состоять хоть из 1 пиксела, но выставив разрешение например 1dpi то этот пиксел на бумаге станет (должен стать) квадратом в 1 дюйм.
    Ответ написан
    1 комментарий
  • Как обновить данные в бд, если одно или несколько полей пусты?

    @rPman
    Убирайте пиздец с вставкой значений в sql-код, пользуйтесь параметрами запросов. Иначе к вам приедут sql injection.

    По поводу значений формы, вам достаточно использовать условия в вырожениях, что то типа
    @$_POST['vidrab']==''?null:$_POST['vidrab']
    @ говорит что ошибку отсутствия нужно игнорировать, и значение в этом случае будет false, нестрогое равенство == скушает вместе с false еще и пустую строку. Если у вас комбобокс, то используйте конкретное значение 'не выбрано' и сравнивайте дополнительно с ним. Осторожнее с чекбоксиками, там отключенное значение - пустое.
    Ответ написан
    4 комментария
  • Как сделать коробочную версию сайта?

    @rPman
    Постановка задачи в общем случае не решаемая, но можно сделать процесс правки исходников и базы данных на столько дорогой, что это перестанет иметь смысл.

    Одно слово - обфускация. С кодом даже немного просто (можно просто скомпилировать код в jvm/llvm/бинарный код процессора, и это уже создаст море проблем), вот с базой данных по сложнее, так как вам потребуется уже на этапе разработки внедрять в код приложения (в виде прослойки или сразу) шифрование данных и сокрытие имен таблиц (чтобы были безликие наборы символов).

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

    p.s. есть есть доступ в интернет и много клиентов, можно заставить пользователей (их инсталляций приложения само собой) следить друг за другом и контролировать неправомерные изменения, но это уже из разряда создания proof-of-что-нибудь и блокчейна ;) ха ха но именно это позволило решить проблему неправомерных изменений 'амбарной' книги bitcoin и аналогов.

    p.p.s. если бы вы были моим исполнителем, идущим на подобные шаги, уволил бы нахрен, и всем бы в округе рассказал ;)
    ----

    Про коробочную версию, у php есть штаный механизм упаковки всего проекта в phar файл (это zip файл), мало того, в 99% случаев для запуска приложения достаточно только php, запустив его с ключом -S поднимется упрощенный веб сервер (не подходит для высокой нагрузки). Так же при использовании sqlite база данных будет идти в виде одного файла, итого - весь проект можно передать двумя файлами и короткой инструкцией по установке, или же базу данных можно создавать автоматически при первом запуске.
    Ответ написан
    Комментировать
  • Помощь по регулярным выражениям. Почему кириллицу не принимает?

    @rPman
    С не латиницей работать надо с помощью штатного расширения mbstring
    php.net/manual/ru/book.mbstring.php смотрите методы mb_ereg_... само собой при указании верной кодировки.

    Так же попробуйте штатный модификатор у регулярных выражений u (при использовании utf8)
    php.net/manual/en/reference.pcre.pattern.modifiers.php
    Ответ написан
    Комментировать
  • Как скрыть PHP код на сервере при условии что надо его править?

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

    Если запускаемое приложение может работать без доступа к сети, то можно делать запуск в контролируемом окружении (виртуальная машина или lxc/docker контейнер), пусть он там что угодно делает, по окончании работы забираем ожидаемый результат и откатываем изменения.

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

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

    В самом простом случае, можете реализовать ВЕСЬ платный функционал на сервере, а на клиенте только интерфейс (вернуться во времена http rest архиетктуры, ну с оглядкой на эффективность и отзывчивость).
    Ответ написан
    2 комментария
  • Как заниматься разработкой на удалённом сервере на DigitalOcean?

    @rPman
    Под php можно разрабатывать и под windows, я долгое время вообще сидел исключительно в far manager без отладчика и т.п. Плюс есть куча IDE которые так же пойдут под windows.

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

    Если вас зачем то интересует linux окружение для работы с машины на windows то начните сygwin.org удобный пакетный менеджер, практически все утилиты из мира linux портированы под windows, режим portable т.е. не требует администраторских прав и т.п.

    Чуть менее качественно linux окружение портировано в mingw (msys), в основном там это сделано для возможности сборки приложений из исходников, заточенных под linux на windows. Но не думаю что вам это актуально при использовании php.

    Если вам все еще будет этого недостаточно, в win10 недавно встроили linux подсистему, что то типа wine наоборот, где бинарники, собранные под linux той же архитектуры что у вас windows, обычным способом запускаются под windows. GUI нет, возможно придется искать и главное настраивать xserver самому.

    Если и этого не хватает, а virtualbox тормозит (например очень старая машина без поддержки аппаратной виртуализации), и если у вас x86 версия windows (к сожалению x86_64 не поддерживается и не будет, проект считай загнулся, зато работает даже на winxp) то вы можете попробовать colinux.org это считай openvz/lxc/user mode linux из мира linux только под windows но для запуска именно linux. Скорость работы этой виртуалки практически совпадает с нативным запуском приложений (виртуализации не происходит, только подмена вызовов), особенно это заметно там где много вычислений а не системных вызовов. К сожалению там будут работать только старые версии linux, но попытка не пытка.
    Ответ написан
    Комментировать
  • Хочу попробовать асинхронность PHP 7 с помощью REACTPHP, нужен совет?

    @rPman
    Асинхронность может помочь, если вы внутри foreach делаете запрос куда-то наружу и ждете... ускорение в данном случае получите только за счет того что для следующего запроса ждать результат предыдущего не будете, т.е. у вас в цикле должно будет запуститься асинхронные запуски для каждого элемента, а после списка (скорее всего по завершению работы), начнут вызываться коллбеки (т.е. соответствующие методы промис) с полученными результатами.
    Ответ написан
  • Время ответа сервера с file_get_contents?

    @rPman
    Пользуйтесь методами curl_... где вы сможете проконтролировать гораздо больше, если совсем хочется счастья, берите любую http socket библиотеку (например из react окружения).

    Постарайтесь выяснить, откуда появляются задержки, например локально провайдеры могут создавать их специально или нет (у меня были внезапные проблемы с php curl_multi), которых не было в обычном curl_... и только у конкретного провайдера в случайные часы суток).
    Ответ написан
    Комментировать
  • Вставка изображения на задний план gif-анимации. Как такое возможно реализовать?

    @rPman
    первый же запрос в гугл
    html transparrent background gif animated

    https://www.sitepoint.com/community/t/how-would-i-...
    Ответ написан
    Комментировать
  • Узнаем кол-во строк в нескольких базах?

    @rPman
    Если баз МНОГО то не только считайте количество тригерами, но и делайте запросы в базу асинхронными, иначе даже после десятка баз последовательный запрос будет выполняться секунды.

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

    p.s. будьте осторожны, несколько баз работают независимо и не умеют транзакции, т.е. количество может измениться в процессе чтения и к примеру если вы перемещаете объект между базами, суммарное количество объектов не изменилось (тут убрали там добавили) но при запросе количества можно получить на 2 меньше или больше, т.е. неверное значение.
    Одно из решений, храните несколько последних значений подсчетов количества с датой их получения, а запрашивать эти данные только те, дата которых ниже даты запроса
    Ответ написан
    Комментировать
  • Есть файл который весит ~6 гб, как его прочитать?

    @rPman
    Если предложения выше вам не помогут, и вам нужно весь файл зачем то считать в память, то воспользуйтесь 64-битной версией php, поправив в php.ini
    memory_limit = 8192M

    p.s. если ваш файл - картинка, смело умножайте на 4 ваши требования по оперативной памяти
    Ответ написан
    Комментировать
  • Как сделать кириллицу читабельной в HTTP_REFERER?

    @rPman
    вместо помещения в тело письма текстовой ссылки, помещайте ее html воплощение
    <a href='http://ссылка'>текст, который будет виден в письме, подчеркнутым как ссылка</a>
    в тексте вы можете писать что угодно и как угодно, лищь бы заголовки письма и в head соответствовали кодировке
    Ответ написан
    Комментировать