Назад | Перейти на главную страницу

Как решить проблему с предупреждением php для mediawiki, запущенного на Tomcat с помощью quercus

Я установил mediawiki (1.19.2) с quercus (4.0.25) на Tomcat 7. Процесс установки прошел хорошо, ошибок или предупреждений не было, соединение с базой данных в порядке, и в конце процесса установки я скопировал файл LocalSettings.php в базовую папку mediawiki по мере необходимости.

С этого момента я несколько раз получал следующее предупреждение php поверх каждой страницы mediawiki:

webapps\mediawiki\includes\Message.php:388: Warning: function 'htmlspecialchars' called with 4 arguments, but only expects 3 arguments [htmlspecialchars]

Message.php:

365:/**
366: * Returns the message parsed from wikitext to HTML.
367: * @return String: HTML
368: */
369:public function toString() {
370:    $string = $this->getMessageText();
371:
372:    # Replace parameters before text parsing
373:    $string = $this->replaceParameters( $string, 'before' );
374:
375:    # Maybe transform using the full parser
376:    if( $this->format === 'parse' ) {
377:        $string = $this->parseText( $string );
378:        $m = array();
379:        if( preg_match( '/^<p>(.*)\n?<\/p>\n?$/sU', $string, $m ) ) {
380:            $string = $m[1];
381:        }
382:    } elseif( $this->format === 'block-parse' ){
383:        $string = $this->parseText( $string );
384:    } elseif( $this->format === 'text' ){
385:        $string = $this->transformText( $string );
386:    } elseif( $this->format === 'escaped' ){
387:        $string = $this->transformText( $string );
388:        $string = htmlspecialchars( $string, ENT_QUOTES, 'UTF-8', false );
389:    }
390:
391:    # Raw parameter replacement
392:    $string = $this->replaceParameters( $string, 'after' );
393:
394:    return $string;
395:}

Может ли кто-нибудь сказать мне, является ли это серьезным предупреждением или может быть конфликт версий (последняя версия mediawiki не работает с quercus)?

Может ли это предупреждение появиться из-за неправильной кодировки (я выбрал utf-8 в настройке)?

Если решения нет, есть ли способ избавиться от этого специального предупреждения (кажется, mediawiki работает нормально, насколько я могу судить)?

Согласно Руководство по PHP, htmlspecialchars делает взять 4 параметра, 3 из которых необязательны.

Это говорит о том, что Quercus - неполная реализация PHP.

Предупреждение в PHP обычно указывает, что он будет продолжать работу и делать все возможное. Предположительно, в этом случае он будет вести себя так, как если бы было установлено значение true, и, следовательно, он будет дважды кодировать любые существующие объекты.

Если для четвертого параметра в строке 388 (и во всех других местах, где эта функция вызывается с четырьмя параметрами) установлено значение true, это предупреждение можно игнорировать.

Если для него установлено значение false (и теперь, когда код в вашем вопросе, я вижу, что это является), вы, скорее всего, получите объекты с двойной кодировкой в ​​html вики. Это может вызвать проблемы с отображением и потенциально неработающие ссылки.

На мой взгляд, более насущный вопрос: как неполный это Quercus? Сколько других функций не работают так же, как ванильный PHP?

Если это общедоступно, могут возникнуть проблемы безопасности с неполными функциями (эквивалентная проблема в htmlspecialchars_decode() может разрешить XSS, например.)

Что касается того, как устранить предупреждение, правильным способом будет поднять отчет об ошибке с Caucho и обновите, как только они это исправят.