Изменения в версиях: https://www.php.net/manual/ru/migration80.incompatible.php
Я тоже в этом не разбираюсь, если что, но единственное что нашел подходящее - parent::__construct();
Спасибо, так вроде же есть родитель, класс самописного компонента, где используется конструктор наследуется от стандартного класса ядра Джумлы
Посмотрите как вызывается класс в самописном компоненте
Насколько я понимаю, класс самописного компонента наследуется от стандартного класса 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();
я не совсем понимаю как работает передача по ссылке и вроде бы она может вызывать ошибку (но убирание ампеданса проблему не решает)
Но дальше этой строки запрос не идет, я проверил.
Это вызов конструктора, с одним аргументом вместо трёх.
Почему тогда сохранение материалов родных Джумлы работает, а через самописный компонент нет? Все же идет через этот файл. Т.е. родной функционал Джумлы работает. Занчит причина где то в самописном компоненте, разве нет?
Пробовал добавить, вроде ошибки сперва пропали, потом опять вернулись ((
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 разрешил, но не помогло
если я все правильно понял , то
в описании на гитхабе написано, что они используют какой-то патч от 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 с бротли и прочими плюшками