Dram

Рейтинг
1114
Регистрация
28.06.2008
D.iK.iJ #:

Изменения в версиях: https://www.php.net/manual/ru/migration80.incompatible.php

Я тоже в этом не разбираюсь, если что, но единственное что нашел подходящее - parent::__construct();

Спасибо, так вроде же есть родитель, класс самописного компонента, где используется конструктор наследуется от стандартного класса ядра Джумлы


SERM-service #:

Посмотрите как вызывается класс в самописном компоненте

Насколько я понимаю, класс самописного компонента наследуется от стандартного класса JModelLegacy Джумлы (вероятно этот класс далее уже перекидывает запрос в класс Тейбл где и случается ошибка), а далее уже идут обычные CRUD методы

<?php

defined('_JEXEC') or die('Restricted access');

jimport('joomla.application.component.model');

class VuzModelItem extends JModelLegacy
{
    var $dir = null;

        function __construct()
        {
                parent::__construct();

        $this->dir = JPATH_ROOT.'/images/vuz';
                $array = JRequest::getVar('cid',  0, '', 'array');
                $this->setId((int)$array[0]);
        }

        function setId($id)
        {
                $this->_id      = $id;
                $this->_data    = null;
        }

        function getImages()
        {       
                $db = JFactory::getDBO();

                $db->setQuery("SELECT * FROM  #__vuz_images WHERE item_id = ".$this->_id);
                return $db->loadObjectList();
        }
....

При нажатии сохранить запрос уходит в контроллер, метод apply

оттуда уже запрос идет в модель итем, метод store  (class VuzModelItem extends JModelLegacy  - начало этого класса в начале этого поста)


Вот тут меня смущает строка

$row =& $this->getTable();

я не совсем понимаю как работает передача по ссылке и вроде бы она может вызывать ошибку  (но убирание ампеданса проблему не решает)

Но дальше этой строки запрос не идет, я проверил.

webinfo #:

Это вызов конструктора, с одним аргументом вместо трёх.

Почему тогда сохранение материалов родных Джумлы работает, а через самописный компонент нет? Все же идет через этот файл. Т.е. родной функционал Джумлы работает. Занчит причина где то в самописном компоненте, разве нет?

Я тоже так решил. Оказалось эта надстройка не поддерживает post запросы, вообще, что полностью убивает ее смысл. 

Пробовал добавить, вроде ошибки сперва пропали, потом опять вернулись ((

proxy_request_buffering off;

Вроде бы нашел ответ (но не решение тут) https://stackoverflow.com/questions/69843526/nginx-http-3-phpmyadmin-5-1-1-epoll-ctl1-16-failed-17-file-exists

Это известная ошибка Cloudflare (Angristan использует их патч quiche/nginx). Эта ошибка возникает, когда вы используете POST с телом.

Но команда Cloudflare не использует POST в своей системе, поэтому для них это не является приоритетом.

К сожалению похоже придется пока http3 отложить на полочку, а жаль... сайт реально стал грузиться быстрее

Ошибка найдена как всегда методом научного тыка.

Вместо строки

 add_header alt-svc 'h3-23=":443"; ma=86400'

нужно писать

add_header Alt-Svc 'h3=":443"';

и все заработало!

Вот итоги (среднее время, прогнал каждый вариант раз 20) и это с выключенным кешем браузера (кеш  nginx тоже пока выключен):

HTTP2 + php 8.2 + mariaDB 10.10 + nginx 1.22.0 + brotli


HTTP3  + php 8.2 + mariaDB 10.10 + nginx 1.22.0 + brotli


Мы одновременно написали, в общем конфиг загрузился, но http3 пока нет

Если закомментировать строку listen 443 ssl http2;  то сайт перестает работать.

проверка через это https://www.http3check.net/ выдала

Server does not advertise supported HTTP/3 or QUIC version on the same port.

В фаерволе UDP разрешил, но не помогло 


Pr00f #:

если я все правильно понял , то

в описании на гитхабе написано, что они используют какой-то патч от cloudflare. в их документации параметр называется не http3 а quic

Спасибо,  вот этот конфиг загрузился без ошибок

server {
    # Enable QUIC and HTTP/3.
    listen 443 quic reuseport;

    # Enable HTTP/2 (optional).
    listen 443 ssl http2;
        
    # Enable all TLS versions (TLSv1.3 is required for QUIC).
    ssl_protocols TLSv1 TLSv1.1 TLSv1.2 TLSv1.3;
        
    # Add Alt-Svc header to negotiate HTTP/3.
    add_header alt-svc 'h3-23=":443"; ma=86400'

...

Но проблема в том, что сайт работает по http2, а где же http3?


Чтобы она сама конфиги сайтов могла править.

В общем установил на чистый ВПС штатными средствами Nginx, теперь sudo apt install python3-certbot-nginx прошла нормально.

Ну а сверху уже накачу новых Nginx с бротли и прочими плюшками

Всего: 6924