Ответы пользователя по тегу PHP
  • Как настроить автоматическое подписание docx файла ЭЦП в CENTOS?

    @smple
    Насколько мне известно для подписи документов используется cryptopro в России (она реализует алгоритмы подписи сертифицированные), ее необходимо установить (в том числе и лицензию если потребуется), далее узнать команду для подписи файлов, вызвать эту команду из php с помощью exec, shell_exec

    Универсальный вариант следующий.
    1. Выбрать алгоритм и способ подписи
    2. Найти софт реализующий свои пожелания под Linux
    3. Установить софт
    4. Вызвать команду для подписи файла из php с помощью exec, shell_exec
    Ответ написан
    Комментировать
  • Что будет эффективнее (быстрее) работать на сайте session_start() или брать с бд массивом интересующие значения имея только $_SESSION['name']?

    @smple
    чтобы взять $_SESSION['name'] надо стартануть сессию :)
    Ответ написан
    Комментировать
  • PHPUnit: какой right way для тестирования классов, для которых требуется протестировать и их начальное создание/заполнение?

    @smple
    ArrayAccess это interface и соответственно надо не его тестировать а конкретные методы класса и проверять что класс реализует его.

    для примера пусть есть класс Magic который реализует ArrayAccess то MagicTest может быть примерно вот так

    class MagicTest extends Test
    {
       public function __setUp()
       {
           $this->magic = new Magic();
       }
       public function providerValue()
       {
         return [['key', 123],['key', 'string']];// и тд
       }
       /**
        * @dataProvider providerValue
        * @depends testMustBeArrayAccesable
        */
       public function testSet($key, $value)
       {
            $this->magic[$key] = $value;
            assertSame($value, $this->magic[$key]);
       }
    
       public fuinction testMustBeArrayAccesable()
       {
            assertTrue($this->magic instanceof ArrayAccess);
       }
    }


    но смысла нет писать тест на ArrayAccess надо проверять то что требуется от класса а не от его интерфейса.
    Ответ написан
    Комментировать
  • Как правильно дебажить php проект?

    @smple
    у тебя в настройках стоит break at first line или break when script is outside the project примерно такие флаги есть phpstorm в настройках
    эти флаги нужно убрать и сделать настройку если необходимо, вот пример я даже как то видео делал
    https://www.youtube.com/watch?v=yiQbJG_dSIc
    Ответ написан
  • Как сравнивать время клиента и сервера с разными временными зонами?

    @smple
    нужно все время преобразовать к одному часовому поясу например UTC и потом сравнивать.

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

    @smple
    я делаю примерно так
    в папке с проектом у меня папка www или frontend внутри нее лежит package.json и тут лежит весь фронтенд сайта
    также есть папка api или backend внутри нее лежит composer.json и тут все что касается бэкенда
    бэкенд обычно вынесене на поддомен api.project и фронт доступен по основному пути
    для изоляции окружений я использую vagrant или docker или что угодно, конфиг лежит в корне проекта и лежат скрипты которые могут развернуть окружение заново.
    запуск среды разработки
    vagrant up // или докер или любая другая виртуализация
    cd frontend
    npm run dev

    деплой чуть отличается но тоже довольно просто
    Ответ написан
    1 комментарий
  • Почему apache создаёт много процессов, что в итоге роняет систему?

    @smple
    1. количество процессов которое допустимо описывается в конфиге апача (ищи worker) тоже самое и касается php-fpm, вывод надо открыть конфиг и указать максимальное количество обработчиков.
    2. на забикс приходит обновление с различных устройств может быть стоит их не так часто отправлять и посмотреть конфиги забикса а также настройки по сбору обновлений ? потому ему может банально шлют слишком много данных которые он не в силах обработать и тут решение или уменьшать количество данных, или масштабировать сервер (вертикально или горизонтально)
    Ответ написан
    5 комментариев
  • Что использовать в данном случае?

    @smple
    1. Для получения состояния надо использовать метод который каждый раз его будет определять
    2. возможен любой вариант я бы хранил в дате
    3. не вижу зачем здесь крон, думаю вполне можно обойтись без него
    Ответ написан
    Комментировать
  • Какой набор стандартов для проверки code style PHP-кода выбрать?

    @smple
    PSR
    Ответ написан
    Комментировать
  • Что почитать по php 7?

    @smple
    офицальный сайт php.net/docs.php
    Ответ написан
  • Как сделать выборку одновременно из mongo и mysql на php?

    @smple
    а почему не сделать уникальную колонку в mysql и вставлять запись вначале туда, если имя свободно то пройдет вставка, значит имя свободно в mysql и значит свободно в sites (коллекция ведь тоже самое только со значениями).

    другой вариант использовать uuid https://ru.wikipedia.org/wiki/UUID на вике говорят "Можно с уверенностью сказать, что первый квадриллион ключей (1015) будут уникальными." вероятность совпадения ключей.
    Ответ написан
    Комментировать
  • Как написать тест для несуществующего метода?

    @smple
    ну отвечу для примера что никак в текущей ситуации

    причины почему этого не сделать
    1. Юнит тест он покрывает КОНКРЕТНЫЙ экземпляр класса, а не абстрактный (поэтому надо будет писать юнит тесты на все НЕ абстрактные классы).
    2. написать юнит тест для абстрактного класса не возможно, так как нельзя создать экземпляр абстрактного класса

    $obj = new AbstractClass; // dont work

    Поэтому учитывая выше сказанное надо тестировать конкретные классы наследники этого класса.

    Ну и еще вызывать вот так вот возможно существующие методы не особо хорошая практика я бы подобное написал по другому наверно, но это к тестированию не относится.
    Ответ написан
  • Что не так не могу загрузить в файл movies, в файл movie загружаеться?

    @smple
    Скорей всегда права на директорию выставлены не правильно
    chmod 777 /var/www/movie/movies
    чтобы проверить можно туда загрузить или нет директория куда грузишь должна быть доступна для записи (ну и плюс чтение и исполнение), а все цепочки директорий должны быть с доступом на чтение и исполнение

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

    Также вопрос вам на засыпку что будет если я буду загружать фаил с именем '../../../../etc/passwd' ? я понимаю что прав на запись не хватит, но подобным образом можно грузить файлы куда угодно и где будет возможность что то записать.
    Ответ написан
    Комментировать
  • Почему при обращении к базе данных и попытке преобразовать ответ в массив мне выдаёт ошибку?

    @smple
    При использование FETCH_COLUMN нужно указать номер колонки которую извлекаешь (нумерация с 0)
    Например:
    $ss->pdo->query('SELECT account_email FROM accounts')->fetchAll(PDO::FETCH_COLUMN, 0);

    Подробней смотри php.net/manual/ru/pdostatement.fetchall.php
    Ответ написан
    Комментировать
  • Как перенаправить на сайт через PHP?

    @smple
    header('Location: http://mysite.com/#message');
    Указать http или https

    Другие вараинты через js
    window.location = " http://mysite.com/#message";

    Через html и тэг meta
    <meta http-equiv="refresh" content="0;http://mysite.com/#message">
    Ответ написан
    Комментировать
  • Как можно отрефакторить приведенную php функцию?

    @smple
    я так понимаю package это active record

    Далее у тебя есть класс с методами (костылями вроде Util или Core) в котором есть setUnits, это пример процедурного кода, когда данные лежат отдельно (в package), а работа с этими данным в другом месте.

    Как бы я улучшил этот код.
    1. Я почти уверен что из package можно получить clientSource и clientDestination это похоже тоже объекты AR, значит я бы добавил связи между моделями
    2. Я бы удалил этот метод setUnits
    3. Поля SourceUnitsFinishJob и DestinationUnitsFinishJob и DestinationUnitsStartJob и SourceUnitsStartJob я бы сделал чтобы они расчитывались на основе связей с clientSource и clientDestination, если твоя AR этого не позволяет то получение значения этих полей я бы сделал методом

    Тогда получение некоторых свойств выглядело было вот так
    $package = Package::find($packageId);
    $package->clientSource->units; // SourceUnitsFinishJob
    // и тд
    // Чтобы получить поля DestinationUnitsStartJob которые расчитываются на основе двух параметров я бы сделал динамический атрибут
    $package->destinationUnitsStartJob;

    В laravel этот атрибут можно создать следующим образом в модели Package
    public function getDestinationUnitsStartJobAttribute()
    {
       return $this->clientDestination->units + $this->clientDestination->cost;
    }

    Где clientDestionation это связь
    соответсвенно работу работать с package можно было бы с помощью стандартных методов.
    Ответ написан
    Комментировать
  • Вывести значение поля?

    @smple
    if (!empty($_POST['username'])) {
       echo $_POST['username'];
    } else {
       echo 'net'
    }

    isset - проверяет поле на существование, если оно есть в форме то оно существует, пусть даже и незаполнено, чтобы проверить не пустое используется empty
    Ответ написан
    6 комментариев
  • Как отправить tcp/xml запрос к ИС из под PHP?

    @smple
    если в php.ini не запрещенно можно делать проще

    $result = file_get_contents('www.example.com');

    если порт не стандартный лучше использовать curl

    $curl = curl_init('http://nexusdigital.agency/API/....'); 
    curl_setopt($curl, CURLOPT_PORT, 81); 
    curl_setopt($curl, CURLOPT_RETURNTRANSFER, 81); 
    $result = curl_exec($curl);
    Ответ написан
  • Как удалить последнюю строку txt файла средствами php?

    @smple
    Грязный способ, но должен удалить последнюю строку.
    $file = file_get_contents('test.txt');
    
    $exploded = explode(PHP_EOL, $file);  // вместо PHP_EOL символ конца строки
    unset($exploded[count($exploded) - 1])
    $file = implode(PHP_EOL, $exploded);   // вместо PHP_EOL символ конца строки
    
    file_put_contents('test.txt', $file);
    Ответ написан
  • Есть ли в php пулл соединений к БД?

    @smple
    Есть такой флаг как persist connection php.net/manual/ru/features.persistent-connections.php его использовать я бы не советовал, для разных баз оно создается по своему.

    Также есть различные версии драйвров для разных баз и некоторые вполне могут не закрывать за собой подключения а кэшировать его, например для Mysql есть два драйвера limysql (стандартный) и mysqlnd, реализация которого в драйвере может отличатся, но апи для вас одинаковые, тут все зависит от драйвера и надо рассматривать конкретную реализацию
    Ответ написан
    Комментировать