Задать вопрос
Ответы пользователя по тегу PHP
  • Как в классе использовать global?

    @rPman
    global может использоваться только внутри методов или функций, т.е.
    $a = 'test';
    
    class Cls {
    
      public function __construct($a) {
        global $a;
        $this->a = $a;
      }
      public function printer(){
        global $a;
        echo $this->a;
      }
    }
    
    $get = new Cls($a);
    $get->printer();


    Использование global - очень неверная стратегия, и ее нужно избегать всеми силами....

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

    Если прямо надо сильно глобальную переменную и лень писать global в каждом методе, пользуйся функциями, определенных глобально, их будет видно везде. Пример реализации сиквенса:
    function next_seq() {
      static id=0;
      return id++;
    }

    или даже возвращающего целые объекты или массивы
    function yoyo() {
      static $o=false;
      if($o===false) $o=new MyCoolObject();
      return $o;
    }
    использовать:
    yoyo()->myCoolMethod();


    Еще раз глобальная область видимости - бад практикс, везде старайтесь заворачивать весь функционал вокруг класса или хотя бы неймспейса. Это просто как ходить опрятно и не пованивать.
    Ответ написан
    Комментировать
  • Как реализовать поиск массива в массие?

    @rPman
    для этого из $code удаляю по 1 символу
    так заведи еще одну переменную для этого и скопируй туда $code
    Ответ написан
  • Как работает генератор?

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

    @rPman
    не надо в value ничего умножать

    несколько input на странице с name="sub_section[]" автоматически будут проанализированы веб сервером и превращены в массив из их value

    p.s. объясните, почему вы в 2021 году используете веб стандарт, который на клиенте работает без javascript? я конечно могу придумать пару применений такому но что то мне подсказывает что это не ваш случай.

    пользуйтесь XMLHttpRequest, он давно уже стандартизирован во всех браузерах, сериализуйте красиво в javascript свои данные и не заморачивайтесь
    Ответ написан
  • Есть и разница между разделителями | и +?

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

    Так что лучше используйте надежный |
    Ответ написан
    Комментировать
  • Как считать nfc метку и передать обработку на веб сервер?

    @rPman
    считываем nfc ридером
    каким именно? он определит то, каким образом вы будете получать эти данные и уже дальше каким способом заливать на сервер

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

    @rPman
    Зачем вам mysql? вы же единственный клиент будете?
    p.s. бесплатные без лишних условий это amazon aws free tier, google cloud (для россии под вопросом) или тот же oracle cloud free tier, получаете полноценную vps-ку, с очень медленным процессором, но вам хватит

    Если не жалко заплатить несколько баксов в год, ищите например тут lowendstock.com
    Ответ написан
    Комментировать
  • Можно ли использовать html-код в файле php?

    @rPman
    да можно, php изначально является шаблонизатором:
    <html>
    <body>
    <php if(@_GET['test']) { ?>
    <h1>Yo ho ho!</h1>
    <php }  else { ?>
    <h2>Yay!</h2>
    <php } ?>
    </body>
    </html>


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

    @rPman
    var_export

    осторожно с циклическими ссылками

    p.s. на практике для сериализации данных используют serialize/unserialize (свой текстовый формат представления для php) и популярный кроссплатформенный json_encode/json_decode - осторожно, все это текстовые форматы

    настоятельно рекомендую использовать google protobuf, для которого есть реализация для php, удобно быстро эффективно, кросплатформенно и бинарный формат
    Ответ написан
    3 комментария
  • Как на PHP создать свой сервер, чтобы получать данные с Andriod приложения?

    @rPman
    index.php
    <?php
    file_put_contents('mydatabase.serialized',serialized($_POST).nl,FILE_APPEND);
    ?>

    вот тебе готовый сервер из одного файла, ничего не проверяет, просто сохраняет все что к нему приходит

    Все дальнейшие правки делайте в нем чтобы контролировать корректность параметров данных, сохранять для удобного использования, выдавать данные по запросу и прочее прочее

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

    @rPman
    что значит перестает работать? какую ошибку пишет клиенту?

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

    Однозначно, любой сервер можно 'убить' плохо написанным кодом, ищите проблемы.
    Ответ написан
  • Как лучше сделать свой Интерпретатор или компилятор на php?

    @rPman
    Не буду задавать вопрос зачем заниматься такой херней.

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

    Если все же надо быстро и без напряга - пили транслятор в другой язык программирования, например тот же php и исполняй в eval
    Ответ написан
    3 комментария
  • Подключение через прокси?

    @rPman
    Возможность подключаться к https прокси - это фича реализации конкретной http-прокси, т.е. будет зависеть от того какую выбрали (поддержка http connect), само собой в этом режиме кэширования не будет
    Ответ написан
  • Как сделать запрос с передачей header в php?

    @rPman
    curl_setopt($ch, CURLOPT_POSTFIELDS, http_build_query($header));
    тут ошибка - это делает запрос POST с полями равными списку ваших заголовков (т.е. это будут уже данные а не заголовки)
    надо
    curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
    Ответ написан
    Комментировать
  • Как передать переменные php?

    @rPman
    Если скрипты запущены отдельным процессом, то есть три общих пути - через файлы (передающих сериализовал переменные методом serialize/json_encode/var_export... а принимающий прочитал и десериализовал deserialize/json_decode/...), через сокеты (tcp например), но тогда один из скриптов должен быть сервером, или через третье приложение, которое будет слушать сетевые запросы обоих и реагировать на них (веб сервер или к примеру базы данных).

    Первый метод самый простой и универсальный, но есть проблемы с оперативностью, синхронизацией и монопольным доступом, решаемые но в результате станет не так просто. Частный случай файлов - это пайпы и потоки, когда приложения запускаются одновременно с указанием что вывод одного (его echo или запись в STDOUT) поступят на вход другого (чтение STDIN) примерно так:
    php a.php | php b.php
    Ответ написан
    Комментировать
  • Как грамотно считать данные с большого XML файла?

    @rPman
    3) полученные объекты превращал в массив с помощью конструкции json_decode(json_encode(<объект из шага 2>), true), именно этот пункт забирает очень много производительности по оперативке.
    ваша проблема тут!

    Зачем вы это делаете? ассоциативные массивы объективно медленнее чем работа с объектами, и даже если надо, всегда можно на конкретном уровне написать (array)$obj и работать с уже массивом полей объекта, так же foreach прекрасно работает с полями объекта как с элементами массива.

    p.s. и самое главное, не работайте на сайте с xml, преобразуйте данные в более удобный для php вид, к примеру serialize или даже var_export (делает код php инициализирующий массив, его можно просто include или eval), делайте это в момент загрузки xml файла на сайте админом, а уже при работе с данными подгружайте файл удобным способом.

    Ну и классика - данные нужно хранить в базе данных (загружать медленнее но зато работать быстрее всего)
    Ответ написан
    Комментировать
  • Как скачать файл из запароленной папки в локальной сети?

    @rPman
    Если не ставить задачу полной симуляции samba клиента на php то придется авторизовывать и подключать шару перед ее использованием, запустив штатную утилиту windows:
    net use \\machine\share\ password /user:username /persistent:no

    а в php тогда открывать эту шару как обычно (внимание, путь писать с разделителями '\' в строковых константах его нужно дублировать).
    fopen('\\\\machine\\share\\path\\file','r')должны работать все методы включая glob и другие.
    по окончании сессию можно дисконнектить
    net use \\machine\share\ /delete

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

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

    @rPman
    Сначала нужно задаться очень важным вопросом, а как именно у вас будут использоваться категории? А то наворотите многоуровневую систему, а потом поверх этого будете реализовывать почти поиск по ключевым словам и не больше (т.е. только по названию категории без учета ее уровня вложенности).

    Базу данных необходимо в первую очередь строить исходя не из того что там хранится, а как это будет использоваться!

    К примеру мне нравится система, когда категория - это всего навсего метка/тег/ключевое слово, которое приписывается объекту, т.е. :
    справочник категорий (id,name,level,..)
    == 1-M ==
        V
    категории объектов(id_категория,id_объекта)
        ^
    == M-1 ==
    объекты (id,...)

    числовое поле level может находиться не в справочнике, а в таблице категории_объектов, если одна и та же категория может находиться у разных объектов на разных уровнях (либо придется заводить несколько одноименных категорий, каждую для своего уровня)

    Тут же можно в/рядом со справочником категорий хранить информацию по лимитам, взаимосвязей категорий и требованиям (например количество категорий всегда 3 или возможны объекты только с 1 корневой?)
    Ответ написан
    Комментировать
  • Как результат вызова команды php exec поместить в переменную или файл?

    @rPman
    Потому что это stderr и его перехватить можно либо с помощью пайпов и proc_open либо меняйте командную строку запуска nodejs так чтобы она возвращала ошибки в стандартный вывод или куда вам удобно простым перенаправлением в файл:
    exec("capture-website https://yandex.com --output=img.jpg 2>capture-website.err", $out);
    $err_str=file_get_contents('capture-website.err');
    Ответ написан
    Комментировать
  • Как лучше сравнить два файла изображения?

    @rPman
    В http стандарте есть заголовки, отвечающие за размер и время изменения файла
    посмотрите на ваш файл в своей программе или с помощью утилит curl -I http://.... сам файл при этом не загружается.

    Такие заголовки как Content-Length или Date или ETag, не всегда они есть но если они есть и изменились - значит файл изменился, иначе загружать весь не обязательно.
    Ответ написан