Ответы пользователя по тегу PHP
  • Передаёт пустые значение в БД, как это решить?

    PQR
    @PQR
    Если это одна и даже страница, что отображает форму и позже принимает данные - сначала надо проверить, а в какой стадии мы сейчас находимся, мы?

    Предлагаю обернуть весь код отвечающий за вставку записи завернуть в
    if (!empty($_POST)) {
       // здесь код из ответа товарища quiplunar
       
    }
    Ответ написан
  • RedBean выдаёт ошибку после отправки формы. Что это может быть?

    PQR
    @PQR
    Судя по сообщению об ошибке, в файле W:\domains\Dino\signup.php на строке 73 происходит вызов метода ->store($здесь_какая-то_переменная) - так вот эта переменна имеет значение null, а ожидается что должен быть bean.

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

    PQR
    @PQR
    Я думаю, что запросы к бд каждые n-секунд - решение не эффективное.


    Зависит от СУБД. Если использовать классическую СУБД MySQL, то придётся делать запросы каждые n секунд.

    Если же использовать другие системы, например Redis, можно подписываться на новые записи и получать их реактивно. Но для этого и само приложение (PHP скрипт) должно работать постоянно, что является отдельной темой для изучения.

    Так что вопрос "не эффективности" скорее лежит в другой плоскости. Vk - это большая соцсеть. Но сколько у вас, конкретно в вашем приложении, планируется сообщений в секунду? Если это чатик местного сельпо и речь до сотнях сообщения в секунду или меньше - MySQL даже на средненьком хостинге справится по схеме "опрашиваем раз в несколько секунд, нет ли новых?", и это будет гораздо эффективнее с точки зрения трудозатрат на разработку, чем разбираться с демонтированным PHP и Redis.
    Ответ написан
    Комментировать
  • Как сделать присваивание до?

    PQR
    @PQR
    Функция array_search($login, $logins) должна искать в массиве логинов $logins, но на деле это вовсе не массив, а строка, которая выглядит как-то так: "/var/nginx/html/data/login.php".

    Подозреваю, что массив логинов находится в файле login.php в таком виде:
    <?php
    return [
      'admin',
      'user1',
      'Ivan'
    ];
    ?>


    Тогда подключать этот файл нужно следующим образом:
    $logins = require $_SERVER['DOCUMENT_ROOT'] . '/data/login.php';
    Ответ написан
    Комментировать
  • Как сделать отправку файла на введенный в форму E-mail?

    PQR
    @PQR
    Для отправки файла на E-mail из PHP можно воспользоваться стандартными функциями отправки почты, но удобнее использовать библиотеку, например, Swfitmailer: https://swiftmailer.symfony.com/docs/introduction.html

    Код отправки может быть примерно таким:
    // Create the Transport
    $transport = (new Swift_SmtpTransport('smtp.gmail.com', 993))
      ->setUsername('your_email_account@gmail.com')
      ->setPassword('your password')
    ;
    
    // Create the Mailer using your created Transport
    $mailer = new Swift_Mailer($transport);
    
    // Create a message
    $message = (new Swift_Message('Тема сообщения'))
      ->setFrom(['your_email_account@gmail.com' => 'John Doe'])
      ->setTo($_POST['to']) // на форме должно быть поле <input name="to">
      ->attach(
        Swift_Attachment::fromPath('/path/to/file.pdf')
      );
    
    // Send the message
    $result = $mailer->send($message);
    Ответ написан
  • Как можно вывести отдельный блок в зависимости от выбранного наименования в выпадающем списке?

    PQR
    @PQR
    Вы сравниваете супенрглобальную переменную $_POST с числом: if($_POST=1), тут несколько ошибок:
    1) сравнение делается с помощью двойного знака равенства ==
    2) сравнение $_POST с числом не имеет смысла, т.к. $_POST - это массив, а не число.

    Нужно сравнивать так: if($_POST['polling ']==1)

    3) В через if/else конструкций не верно расставлены скобки, там вся логика нарушена (хотя чисто случайно синтаксический всё оказалось верно)
    Ответ написан
    Комментировать
  • Почему не работает перебор по ссылкам в foreach php?

    PQR
    @PQR
    Если я правильно понял условие задачи, то массив $ssil12 содержит ссылки (в смысле url страниц, которые нужно обработать).

    Далее в цикле вы перебираете этот массив и каждую отдельную ссылку в итоге передаёте в вызов функции str_get_html($https);

    Но судя по документации (https://simplehtmldom.sourceforge.io/manual.htm) принимает на вход не ссылку, html код страницы. Таким образом вы забыли скачать саму страницу по ссылке, например, так:
    $content = file_get_contents($https)
    $domObject = str_get_html($content);
    Ответ написан
    Комментировать
  • Как правильно изменить реализацию шаблона репозиторий подгружаемого с помощью интерфейсов для инициализации модели?

    PQR
    @PQR
    Чтобы конкретно этот метод buildOrderDetails не вызывал внутри new ProductRepository, код нужно переписать так:

    class OrderRepository extends BaseRepository implements OrderRepositoryInterface
    {
        use OrderTransformable;
    
        public function __construct(Order $order, ProductRepositoryInterface $productRepo)
        {
            parent::__construct($order);
            $this->model = $order;
            $this->productRepo = $productRepo;
        }
    
        public function buildOrderDetails(Collection $items)
        {
            $items->each(function ($item) {
                $product = $this->productRepo->find($item->id);
                if ($item->options->has('product_attribute_id')) {
                    $this->associateProduct($product, $item->qty, [
                        'product_attribute_id' => $item->options->product_attribute_id
                    ]);
                } else {
                    $this->associateProduct($product, $item->qty);
                }
            });
        }
    Ответ написан
    Комментировать
  • Можно ли как-то получить картинку?

    PQR
    @PQR
    Я не работал непосредственно с MTProto из PHP, но судя по описанию типа приватного свойства bytes "danog\MadelineProto\TL\Types\Bytes" - это набор байт. Можно попробовать сохранить его в файл в и посмотреть с помощью любой программы открывающей изображения: file_put_contents($bytes);
    Ответ написан
    Комментировать
  • Как сделать composer install внутри docker контейнера?

    PQR
    @PQR
    Чтобы composer не ругался на root/super user, нужно установить переменную окружения
    ENV COMPOSER_ALLOW_SUPERUSER 1
    https://getcomposer.org/doc/03-cli.md#composer-all...
    Ответ написан
    Комментировать
  • Постоянно запущенный скрипт на PHP, как реализовать?

    PQR
    @PQR
    Это можно сделать на ReactPHP, который по сути всегда запущен на сервере и работает в режиме event loop (как Node.js) https://reactphp.org/
    Ответ написан
    Комментировать
  • Существуют ли в природе реализации блокчейн на PHP от и до?

    PQR
    @PQR
    Один человек уже написал боокчейн на PHP: https://habrahabr.ru/company/dcoin/blog/272695/ - посмотрите, может там где-то ссылка на исходники есть или спросите у автора. Правда, потом его бросила девушка и он переписал всё на Go.
    Ответ написан
    1 комментарий
  • Как быстро сформировать сложный Excel-документ?

    PQR
    @PQR
    На тостере есть похожий вопрос по оптимизации генерации Excel из PHP, посмотрите, там дельные ответы: Оптимизация генерации excel из php?

    Расскажу также свою историю, не про запись, а про чтение большого Excel файла (несколько десятков страниц, на каждой странице 1000+ строк * 30 столбцов). PHPExcel работал но медленно. Классическая PEAR библиотека оказалась быстрее в 2 раза, но и она в итоге отрабатывала за 60+ секунд (время чтения xls файла в память PHP). Поскольку входной формат файла был известен заранее, я открыл исходники и начал выпиливать оттуда фишки, которые мне не нужны, удаляя лишний код! Некоторые функции вручную инлайнил. В итоге время чтения сократилось до 5 секунд. Резюме: если формат зафиксирован и гибкость не нужна, узкозаточенное решение (после некоторых усилий по заточке) даст хороший результат!

    Также на этот вопрос есть классический ответ на StackOverflow, который собрал все альтернативы: stackoverflow.com/questions/3930975/alternative-fo...

    Процитирую здесь, чтобы далеко не ходить или на случай если stackoverflow.com будет не доступен (валидность всех ссылок не проверял):

    For Writing Excel

    PEAR's PHP_Excel_Writer (xls only)
    php_writeexcel from Bettina Attack (xls only)
    XLS File Generator commercial and xls only
    Excel Writer for PHP from Sourceforge (spreadsheetML only)
    Ilia Alshanetsky's Excel extension now on github (xls and xlsx, and requires commercial libXL component)
    PHP's COM extension (requires a COM enabled spreadsheet program such as MS Excel or OpenOffice Calc running on the server)
    The Open Office alternative to COM (PUNO) (requires Open Office installed on the server with Java support enabled)
    PHP-Export-Data by Eli Dickinson (Writes SpreadsheetML - the Excel 2003 XML format, and CSV)
    Oliver Schwarz's php-excel (SpreadsheetML)
    Oliver Schwarz's original version of php-excel (SpreadsheetML)
    excel_xml (SpreadsheetML, despite its name)... link reported as broken
    The tiny-but-strong (tbs) project includes the OpenTBS tool for creating OfficeOpenXML documents (OpenDocument and OfficeOpenXML formats)
    SimpleExcel Claims to read and write Microsoft Excel XML / CSV / TSV / HTML / JSON / etc formats
    KoolGrid xls spreadsheets only, but also doc and pdf
    PHP_XLSXWriter OfficeOpenXML
    PHP_XLSXWriter_plus OfficeOpenXML, fork of PHP_XLSXWriter
    php_writeexcel xls only (looks like it's based on PEAR SEW)
    spout OfficeOpenXML (xlsx) and CSV
    Slamdunk/php-excel (xls only) looks like an updated version of the old PEAR Spreadsheet Writer

    For Reading Excel

    php-spreadsheetreader reads a variety of formats (.xls, .ods and .csv)
    PHP-ExcelReader (xls only)
    PHP_Excel_Reader (xls only)
    PHP_Excel_Reader2 (xls only)
    XLS File Reader Commercial and xls only
    SimpleXLSX From the description it reads xlsx files , though the author constantly refers to xls
    PHP Excel Explorer Commercial and xls only
    Ilia Alshanetsky's Excel extension now on github (xls and xlsx, and requires commercial libXL component)
    PHP's COM extension (requires a COM enabled spreadsheet program such as MS Excel or OpenOffice Calc running on the server)
    The Open Office alternative to COM (PUNO) (requires Open Office installed on the server with Java support enabled)
    Nuovo's spreadsheet-reader (csv, xls, xlsx, and ods)
    SimpleExcel Claims to read and write Microsoft Excel XML / CSV / TSV / HTML / JSON / etc formats
    PHPExcleReader Is just a ZIP with an old version of PHPExcel
    Akeneo Labs Spreadsheet Parser OfficeOpenXML (.xlsx) and CSV files
    spout OfficeOpenXML (xlsx) and CSV
    xhook's php-spreadsheetreader Claims to do most formats
    Ответ написан
    Комментировать
  • Как правильно развернуть окружение через Docker?

    PQR
    @PQR
    Ставьте на голый сервер без докера - и nginx и node и php-fpm - всё на один сервер. Пусть nginx проксирует либо на php-fpm, либо на node.js в зависимости от имени хоста на который пришел запрос.

    Если очень хочется докер - делайте один контейнер а внутрь nginx+node+php-fpm (зато с докером, модно!)
    Ответ написан
  • В какой момент пора использовать ООП?

    PQR
    @PQR
    >если вы не пишите в ООП стиле - вы лох.
    Это уже устарело, сейчас в моде отказ от ООП! Посмотрите на go - процедурное программирование + интерфейсы.
    Посмотрите на Scala - функциональные подходы в Java экосистеме (сюда же Clojure и Kotlin).
    Во фронтенде сплошная функциональщина: ClojureScript, Elm, Purescript. Тот же модный нынче React+Redux.

    Так что смело забивайте на ООП и начните писать на Clojure + ClojureScript!
    Ответ написан
    Комментировать
  • Как циклу предоставить не ряд числе, а только некоторые?

    PQR
    @PQR
    Можно придумать десяток способов, но у вас достаточно простой, читаемый и понятный код получился, я бы его оставил.

    Для примера, вот альтернативы:
    $notInResult = [0,1,2,4,5,7,8];
    $all = range(0, $nColumn); //массив всех чисел от 0 до $nColumn
    $inResult = array_diff($all, $notInResult); //убираем из массива всех чисел те, которые указаны в $notInResult
    
    foreach ($inResult as $j) {
        echo $sheet->getCellByColumnAndRow($j, $i)->getValue();
    }


    Второй вариант очень похож на ваш, но вместо медленной проверки in_array используется быстрая проверка isset
    $notInResult = [0 => true, 1 => true, 2 => true, 4 => true, 5 => true, 7 => true, 8 => true]; //номера скрываемых колонок будем хранить в ключах массива, а значениями массива сделаем заглушку true
    for ($j = 0; $j < $nColumn; $j++) {
        if (!isset($notInResult[$j])) {
            echo $sheet->getCellByColumnAndRow($j, $i)->getValue();
        }
    }
    Ответ написан
    Комментировать
  • Есть ли аналог Curl на PHP который не требует установки?

    PQR
    @PQR
    Лучшая библиотека для http запросов на PHP на сегодняшний день - это Guzzle. Работает без curl, если тот не доступен: guzzle.readthedocs.org/en/latest/overview.html#req...

    Но она с ООП интерфейсом.
    Ответ написан
    Комментировать
  • Есть ли толковый php framework для SAAS?

    PQR
    @PQR
    MODx развивается в сторону удобного разворачивания в cloud, была статья на хабре: habrahabr.ru/post/141455/
    Ответ написан
    1 комментарий