Я работаю над обновлением Typo3 7.6 до 8.7. Я делаю это на своем локальном компьютере с XAMPP в Windows с PHP 7.2.
Бэкэнд у меня заработал. Потребовалась некоторая ручная работа в БД, например, изменение CType в tt_content для моих собственных элементов контента, а также заполнение colPos.
Однако, когда я вызываю страницу во внешнем интерфейсе, все, что я получаю, - это тайм-аут:
Fatal error: Maximum execution time of 60 seconds exceeded in
C:\xampp\htdocs\typo3_src-8.7.19\vendor\doctrine\dbal\lib\Doctrine\DBAL\Driver\Mysqli\MysqliStatement.php on line 92
(это не изменится, если я установлю max_execution_time на 300)
Обновлено: я добавил echo непосредственно перед строкой 92 в приведенном выше файле, это функция:
public function __construct(\mysqli $conn, $prepareString)
{
$this->_conn = $conn;
echo $prepareString."<br />";
$this->_stmt = $conn->prepare($prepareString);
if (false === $this->_stmt) {
throw new MysqliException($this->_conn->error, $this->_conn->sqlstate, $this->_conn->errno);
}
$paramCount = $this->_stmt->param_count;
if (0 < $paramCount) {
$this->types = str_repeat('s', $paramCount);
$this->_bindedValues = array_fill(1, $paramCount, null);
}
}
Я получаю следующее утверждение 1000 раз, всегда одно и то же:
`SELECT `tx_fed_page_controller_action_sub`, `t3ver_oid`, `pid`, `uid` FROM `pages` WHERE (uid = 0) AND ((`pages`.`deleted` = 0) AND (`pages`.`hidden` = 0) AND (`pages`.`starttime` <= 1540305000) AND ((`pages`.`endtime` = 0) OR (`pages`.`endtime` > 1540305000)))`
Примечание: у меня нет записей на страницах с uid = 0. Так что я действительно не уверен, для чего это нужно. Нужна ли страница с uid = 0?
Я включил ведение журнала медленного запроса в mysql, но ничего не регистрирую с его помощью. Я не получаю дополнительных ошибок PHP и не получаю запись в журнале с опечаткой 3.
Так что сейчас я немного застрял и не знаю, что делать дальше.
Я включил общее ведение журнала для mysql, и когда я вызываю страницу на фронте, я получаю этот SQL-запрос, выполняемый снова и снова:
SELECT `tx_fed_page_controller_action_sub`, `t3ver_oid`, `pid`, `uid` FROM `pages` WHERE (uid = 0) AND ((`pages`.`deleted` = 0) AND (`pages`.`hidden` = 0) AND (`pages`.`starttime` <= 1540302600) AND ((`pages`.`endtime` = 0) OR (`pages`.`endtime` > 1540302600)))
выполнение этого запроса вручную возвращает пустой результат (у меня нет записей на страницах с uid = 0). Не знаю, значит ли это что-нибудь ...
Какие у меня есть варианты? Как я могу найти то, чего не хватает / где ошибка?





Первый: дайте вашему PHP больше времени для запуска. в конфигурации php.ini увеличьте максимальное время выполнения до 240 секунд. имейте в виду, что для TYPO3 в рабочем режиме рекомендуется 240 секунд. Если вы запустите инструмент для установки, вы можете выполнить Проверка системы и получить информацию о конфигурации, которая может нуждаться в оптимизации.
Второй: избегать режима разработки и использовать производственный режим. выполнение будет быстрее, но вы потеряете возможность отладки.
отладка всегда требует больше времени и памяти для подготовки всей этой информации. может быть, 240 секунд недостаточно, и вам даже нужно больше памяти.
почти все, особенно если вы включите все виды отладочной информации. как отредактировано в моем ответе: проверьте систему в инструменте установки. тогда вам может потребоваться терпение, если у вас большие данные и сложная конфигурация.
max_execution_time теперь установлен на 600, сообщит, если это что-нибудь изменится.
max_execution_time на 600 ничего не меняет. Также typo3 не создает ничего в typo3temp, кроме папок и изображений из установочного инструмента (тестовые изображения).
Я повторил утверждение в MysqliStatement.php: 92 и получил один и тот же запрос 1000 раз (см. Также редактирование моего вопроса). Есть идеи, какой должна быть страница uid = 0?
в таблице pages какая информация должна быть в поле tx_fed_page_controller_action_sub (поле, которое запрашивается 1000 раз). Я проверил таблицу страниц, и tx_fed_page_controller_action_sub пуст во всех записях.
«страница» с uid - это корневая страница вашего дерева страниц. Для этой «страницы» нет записей. и у вас есть записи на этой «странице», поскольку каждая запись, не назначенная отдельной странице, «размещается» здесь (например, be-users, languages, ...). Но как сказал Даниэль: попробуйте отключить расширение (а). Я также подозреваю, что отсутствует условие корневой страницы, поэтому существует бесконечный доступ к корневой строке. Ваш вывод уже начинается с запросов page.uid "0"?
Поле tx_fed_page_controller_action_sub поступает от расширения, оно не является частью ядра. Скорее всего, в вашей системе установлены flux и fluxpages.
Попробуйте отключить эти расширения и продолжить без них. Реинтегрируйте их позже, если они вам все еще понадобятся. Тайм-аут часто означает, что происходит какая-то рекурсия. Исходя из моего опыта работы с потоком, возможно, что элемент содержимого сам установлен как собственный flux_parent и, следовательно, создает бесконечный цикл рендеринга, который приведет к фатальному завершению после max_execution_time.
Итак, в вашем случае я бы попытался найти запись, которая вызывает это (похоже, это запись страницы) и / или код, который инициирует запрос. В самой Doctrine отлаживать не нужно :)
О, раньше время выполнения было
300, я установил его, поэтому мне не нужно каждый раз ждать 5 минут, пока я не получу ошибку. второй: я установил все, что мог, в режим разработки / включил ведение журнала. Мне сейчас не нужна производительность, мне нужна информация. 5 минут (время выполнения 300 секунд) должно быть достаточно, чтобы показать мне простую целевую страницу, даже если все регистрируется. Есть ли что-то еще, что может повредить мне при запуске в режиме разработки?