Задать вопрос
  • Как запретить одновременный запуск PHP скрипта?

    Rsa97
    @Rsa97
    Для правильного вопроса надо знать половину ответа
    public function __construct()
    {
      if (file_exists('lock_file.lock')) {
        exit('already running');
      }
      touch('lock_file.lock');
    }
    
    public function __destruct()
    {
      unlink('lock_file.lock');
    }
    Ответ написан
    3 комментария
  • Как добавлять определенное число input с последующей записью в базу данных?

    joeberetta
    @joeberetta Куратор тега JavaScript
    Читай: https://epdf.pub/google-for-dummies.html
    Если не понимаете как в целом делать, то разделите задачу на более мелкие задачи.
    Во 1х, вам нужно реализовать создание/удаление новых полей (делается на js)
    Во вторых уже отправить эти поля на бэкенд. Тоже на js (гуглите про ajax) или без (form get/post php)
    И уже в 3х, вам нужно этл записать в нужную таблицу. Гуглите: insert data to sql db php.
    Ответ написан
    1 комментарий
  • Как правильно использовать ООП при парсинге?

    glaphire
    @glaphire
    PHP developer
    Разбейте логику вашей задачи на слои (группы классов с конкретной зоной ответственности).
    На первый взгляд это: парсинг файла, подготовка к импорту в базу, работа с базой (crud, фильтрация), контроллеры для получения/отдачи запросов. Методы в классах должны инкапсулировать одну задачу (не делать один метод "run/execute", который будет просто оберткой над процедурным кодом).

    В целом - посмотрите, как это сделано во фреймворках, реализацию задачи с применением ООП можно улучшать долго и нудно.
    Ответ написан
    Комментировать
  • Как сменить php 7.3 на Mac OS?

    fcherkassy
    @fcherkassy
    Откройте терминал и выполните команду:

    curl -s https://php-osx.liip.ch/install.sh | bash -s 7.3
    Система безопасности macOS может потребовать ввод пароля для получения доступа к системным файлам — вводите его. Скрипты компании Liip для установки PHP не содержат в себе вредоносного кода.

    В случае, если у вас уже установлена новая версия, то эта команда может вызвать вывод предупреждения об уже установленной свежей версии PHP.

    В результате скрипта будет развёрнут архив с файлами PHP 7.3 в директории пользователя, в моём случае, это было здесь:

    /usr/local/php5-7.3.8-20190811-205217/
    Окончание установки выглядело таким образом (обратите внимание на путь к распаковываемым файлам):

    Настройка работы PHP 7.3 из терминала
    Чтобы проверить текущую версию, запускаемую в терминале, выполните команду

    php -v

    Для работы composer в терминал у меня была поставлена версия PHP 7.2.16. Чтобы настроить запуск из терминала новой версии PHP нужно в файле ~/.bash_profile, если вы используете окружение терминала bash, добавить в конец файла следующие строки:

    export PATH="/usr/local/php5-7.3.8-20190811-205217/bin:$PATH"
    export PATH="/usr/local/php5-7.3.8-20190811-205217/sbin:$PATH"
    Путь к установленной версии PHP может отличаться от указанного мною. Актуальный для вас путь содержится в терминале, где происходила установка новой версии и запуск команды curl. После сохранения изменений в файле .bash_profile, внутри новых сессий терминала будет использоваться указанная вами версия. Для обновления версии внутри текущей сессии терминала, следует прочесть файл заново с помощью вызова:

    source ~/.bash_profile
    Теперь при вызове php -v в терминале вы должны увидеть последнюю версию PHP:

    Если нет файла ~/.bash_profile
    В случае, если файл ~/.bash_profile не создан, то это можно сделать прямо из терминала с помощью команды:

    touch ~/.bash_profile
    А затем взять в редактирование с помощью выполнения вызова:

    sublime ~/.bash_profile
    Если у вас не настроен запуск редактора sublime text из консоли, то это вы можете сделать с помощью этой статьи.

    Настройка PHP 7.3 во встроенном в macOS сервере Apache
    В операционную систему macOS изначально установлен веб сервер Apache, который позволяет разрабатывать сайты и полностью себя конфигурировать без установки LAMP, Apache через brew и т.п. Чтобы встроенный сервер Apache загружал нужную версию модуля PHP следует ему указать это в конфигурационном файле. Файл конфигурации находится по адресу:

    /private/etc/apache2/httpd.conf
    В этом файле следует найти строку, содержащую слово php. По умолчанию, она выглядит следующим образом:

    #LoadModule php7_module libexec/apache2/libphp7.so
    Следует убрать у неё в начале #, чтобы эта строка не была закомментирована, а также прописать вместо libexec/apache2/libphp7.so полный путь до файла libphp7.so в директории с новой версией PHP 7.3. В моём случае, строка выглядит следующим образом:

    LoadModule php7_module /usr/local/php5-7.3.8-20190811-205217/libphp7.so
    Сохраняем файл, вводим пароль, подтверждающий наши права на сохранение файла в системном месте. А затем нужно перезапустить сервер Apache c помощью команды:

    sudo apachectl restart
    Ответ написан
    2 комментария
  • Как добавить eng язык в эту регулярку?

    @IS-Builder
    ~ PHP-8 & REGEXP - This is a really powerful kit ~
    Камил
    Стандартный вариант регулярки такой: [\s\p{P}]

    \s - символьный класс пробельных символов
    \p{P} - символьный класс знаков пунктуации
    [\s\p{P}] - соответствие в этой позиции строки пробелу или знаку пунктуации

    Если вы ответите на вопрос из комментария "что вам конкретно то нужно?", шансов на получение помощи станет больше. См. пример
    Ответ написан
    Комментировать
  • Как большой файл обработать по частям?

    @IS-Builder
    ~ PHP-8 & REGEXP - This is a really powerful kit ~
    lesh_a
    $filename = 'text.txt';
    
    $total = 0;
    $buffer = [];
    
    $h = fopen($filename, 'r');
    
    while (! feof($h)) {
        if ($total > 100) {
            // var_export($buffer); // Вывести или выполнить обработку каждых 100 строк
            $total = 0;
            $buffer = [];
        }
        $buffer[] = fgets($h);
        $total++;
    }
    
    fclose($h);
    
    if (! empty($buffer)) {
    //    var_export($buffer); // Вывести или выполнить обработку оставшихся строк
    }
    Ответ написан
    Комментировать
  • Можно ли исправить ошибку без помощи терминала?

    IgorPI
    @IgorPI
    У вас нет доступа к файлу.
    Типичная проблема (проблема нулевого уровня)
    Файл был создан одним юзером, а php работает под другим.
    Ответ написан
    Комментировать
  • Как адекватно построить рабочее и игровое пространство на одном компьютере?

    HemulGM
    @HemulGM
    Delphi Developer, сис. админ
    В какой-то момент Windows засоряется и начинает глючить

    Если это основная причина, то помочь вам не чем. Потому что это совершенно ложное утверждение.
    Обоснование:
    1. Засоряется файлами? Т.е. по-вашему ОС глючит из-за большого кол-ва файлов или что? Так вот, ОС из-за файлов - не глючит.
    2. Засоряется программами? Т.е. опять же файлами или же чем? Если нет, то зачем вы все программы запускаете и оставляете их в фоновом режиме? Управляйте тем, что установили сами, сами! ОС этим заниматься не будет.
    3. Засоряется реестр (как многие эникейщики скажут)? Реестр - это набор файлов, составляющих БД. У каждого пользователя есть свой файл реестра "NTUSER.DAT". Находится он в каталоге пользователя. Посмотрите его размер, если интересно. За частую, он не превышает 10мб.

    Так чем же засоряется ОС? Может вашими кривыми руками? Уж извините, но иначе не скажешь.
    Глючить начинает ОС из-за железа. ОС на HDD работает медленно, т.к. HDD не удовлетворяет в скорости. Поставьте SSD и не будет у вас "засоряться винда". Плюс, HDD достаточно быстро расходуют свой ресурс. Достаточно одного медленного сектора, который будет тормозить почти все операции.

    Вот тебе ещё в добавок ИМХО:
    У меня винда стоит с 2014 года (переставил т.к. купил SSD), программ установлено под тысячу (скрин скину, если требуется). Винтов у меня 5 штук + ssd. Забиты под завязку. Обновления ставятся почти все через месяц после выхода (исключаю косячные и нежелательные). Я разработчик софта, и это мой рабочий комп, также, он и моё игровое место, где установлено под полсотни крупных игр. Т.е. ситуация как у вас. У меня проф. ПО, у меня игры, только вот проблем у меня почему-то нет. Хотя мой комп, в рабочее время - это полигон испытаний, на котором тестируется всякий изврат.
    И кстати, я не пользуюсь ни одним средством "очистки винды".

    Возможно вам стоит повысить компьютерную грамотность?
    Ответ написан
    11 комментариев
  • Какой выбрать шаблонизатор для файлов docx?

    Lillipup
    @Lillipup
    Allons-y, Алонсо!
    Ответ написан
    Комментировать
  • Какую CMS порекомендуете для практики в PHP?

    riky
    @riky
    Laravel
    если цель WP - его и ковыряйте.
    а вообще не советовал бы по CMS изучать. в голове каша будет.
    для изучения самого php - лучше изучайте голый php, для понимания основ.
    а потом уже саму систему плагинов и тем WP. а может и программировать на нем понравится и на фреймворки перейдете.

    код cms обычно ужасен, не для слабонервных. если начать работать с ним не получив предварительно иммунитета от работы с правильно построенными системами, можно стать говнокодером.
    Ответ написан
    Комментировать
  • Какую CMS порекомендуете для практики в PHP?

    Lillipup
    @Lillipup
    Allons-y, Алонсо!
    Frameworks > laravel
    Ответ написан
    Комментировать
  • Как в типизированных свойствах задать массив типа?

    Maksclub
    @Maksclub Куратор тега PHP
    maksfedorov.ru
    Дженерики еще не подвезли, которые бы сделали это возможным
    Используйте коллекции (из Симфони или Ларавел возьмите), если хотите, чтобы был некий контроль за типом, но и они, опять же, не будут полноценно контролировать тип элемента сами по себе.

    class Bar
    {
        /** @var ArrayCollection|Bar[] */
        public ArrayCollection $props;
    }


    Для решения вашей задачи нужен еще один виток развития языка :)

    НЕсуществующий код!
    class ArrayCollection<T>
    {
        public getElement(): <T>;
        public addElement(<T> $element): void;
    }
    
    class Bar
    {
        public ArrayCollection<Bar> $barCollection;
    }


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

    Stalker_RED
    @Stalker_RED
    Дисплей, кнопки и микросд можно прикрутить к arduino (atmega, attiny) или к esp, stm или к другому микроконтроллеру, в зависимости от задач. Микроконтроллеров много разных, они заметно отличаются по энергопотреблению, "мощи" железа и цене, и при выборе нужно бы понимать что вы вообще хотите сделать.

    С зарядкой тоже все довольно просто, можно прикрутить что-то типа таких чипов

    А вот со звуком все сложнее. Если "пищалку" можно сделать на любом хламе, то для воспроизведения качественного звука понадобятся и хороший ЦАП, и возможно процессор помощнее.

    Лучше всего нанять/уговорить помочь кого-то, кто шарит в проектировании электроники. Если интересно именно самому - ищите схемы похожих устройств, идите на форумы электронщиков и начинайте задавать свои вопросы.
    Ответ написан
    7 комментариев
  • Где хранятся переменные окружения UBUNTU?

    leahch
    @leahch
    3D специалист. Dолго, Dорого, Dерьмово.
    Переменные окружения хранятся в памяти процесса, в вашем случае это bash - командный интерпретатор, который в терминала или в консоли.
    Чтобы установить переменную среды используйте команду export.
    export DB_HOST=localhost
    Маленькое замечание, переменная устанавливается ТОЛЬКО в текущем интерпретаторе, и если запустить второй терминал, то ее там уже не будет!
    Чтобы установить переменную для всех интерпретаторов используйте файл .bash_profile в корневой папке пользователя.
    Но! Если запускать например из systemd как системный сервис, то нужно передавать переменные отдельно!
    В общем и целом, переменные среды хранятся в памяти, а аак они туда попадают - зависит от вызывающей программы или сервиса.
    В частном случае легче всего написать скриптовый файл для запуска и установки переменных среды типа start.sh (тоько сделайте его исполняемым
    #!/bin/bash
    
    export MYENV=myvalue
    python myscript.py

    chmod +x start.sh
    ./start.sh
    Ответ написан
    3 комментария
  • Как разделить однотипные данные при распечатке массива?

    Stalker_RED
    @Stalker_RED
    $prevType = null;
    foreach($items as $item) {
      if ($item[type] !== $prevType) { // type changed
         // do something
      }
      $prevType = $item[type];
    }
    Ответ написан
    Комментировать
  • В чем может быть проблема связанная с сервером Linux?

    CityCat4
    @CityCat4
    //COPY01 EXEC PGM=IEBGENER
    Уважаемый, Ваш вопрос нечитаем от слова совсем. Разбейте на абзацы, куски кода оформите тегами - может быть тогда кто-то и задумается. Поток сознания никто преодолевать не будет.
    Ответ написан
    Комментировать
  • Можно ли настроить Composer так, чтобы все файлы пакетов складывались в общую папку?

    SerafimArts
    @SerafimArts
    Senior Notepad Reader
    Для написания подобных вещей существует такая вещь как "плагины". У Composer при установке зависимости есть API, которым можно пользоваться и творить что пожелается.

    По второй ссылке, что указал Дмитрий в комментариях пример такого "творчества". Там используются вот эти команды: https://github.com/zendframework/zend-expressive-s... документация по которым есть на сайте композера: https://getcomposer.org/doc/articles/scripts.md#co... где вызываются вот эти методы во время установки: https://github.com/zendframework/zend-expressive-s...

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

    gbg
    @gbg
    Любые ответы на любые вопросы
    Формальных не нарушаете. Разве что правила хорошего тона.
    Ответ написан
    Комментировать