Как я могу исправить устаревшую функцию?

Позвольте мне пока изложить сценарий. Я просто должен работать над созданием Pmwiki установить. Пока все хорошо, верно?

Итак, я добавляю pagetoc.php как описано в PMWiki Cookbook для Pagetoc. Далее я хотел добавить Markdown служба поддержки. Таким образом, поиск в Google привел меня к Поваренная книга для Markdown. Также указано MarkdownMarkupExtension Cookbook как то проверить. Оба установлены. Я не уверен, что это конфликтует с обоими, но, кажется, ничего не вырвало … кроме ошибки ниже.

Pagetoc.php работает просто отлично. Что не является markdown.php, Ошибка, которая генерируется следующим образом:

ERROR: pat=/\(:markdown:\)(.*?)[ ]?\(:markdownend:\)/se preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead

Теперь … вот соответствующий код в markdown.php,

Очевидно, что исправление заключается в использовании preg_replace_callback() функция. Я смотрю на это, и это похоже на массу лапши для меня. Я не уверен, каков правильный шаг вперед для решения этой проблемы. Я не достаточно знаком с PHP, чтобы иметь возможность использовать функцию, как было предложено.

<?php if (!defined('PmWiki')) exit();
#
# Markdown  -
#
# Copyright (c) 2006 Benjamin C. Wilson
# <http://www.dausha.net/Markdown/Recipe>
#

#$EnableMarkdownInline = 0;

include_once("$FarmC/pagetoc.php");
include_once("$FarmD/scripts/diag.php");
SDV($EnableMarkdown,0); # Off by default.
SDV($MarkdownSectionLevel, '!!'); # Creates <h2> for === sections.
SDV($MarkdownSubSectionLevel, '!!!'); # Creates <h3> for --- sections.
SDV($MarkdownSubSubSectionLevel, '!!!!'); # Creates <h4> for --- sections.
if ($EnableMarkdown) {
$EnableStdMarkup = 0; # Turn off PmWiki's markup behavior.
SDV($MarkdownTabWidth, 4);
SDV($MarkdownTabLessOne, $MarkdownTabWidth - 1);
SDV($EnableMarkdownInline, 1);
SDV($EnableMarkdownLinks, 1);
SDV($EnableMarkdownBlock, 1);
SDV($EnableMarkdownPrecode, 1);
SDV($EnableMarkdownLists, 1);
SDV($EnableMarkdownBlockquotes, 1);
include_once("markdown/pmwiki-directives.php");
include_once("markdown/pmwiki-links.php");
include_once("markdown/pmwiki-advtables.php");
include_once("markdown/pmwiki-block.php");
include_once("markdown/pmwiki-inline.php"); # Added 2006-05-07 BCWI
$HTMLVSpace = '';
}
if ($EnableMarkdownInline) include_once("markdown/markdown-inline.php");
if ($EnableMarkdownLinks)  include_once("markdown/markdown-links.php");
if ($EnableMarkdownBlock)  include_once("markdown/markdown-block.php");
if ($EnableMarkdownPrecode)  include_once("markdown/markdown-precode.php");
if ($EnableMarkdownLists)  include_once("markdown/markdown-lists-0.2.php");
if ($EnableMarkdownBlockquotes)  include_once("markdown/markdown-blockquotes.php");

/*
#Markup("prebullet", "<bullet", "/^(\s+)\\*\s/e", "deindent('$1','*');");
#Markup("preordered", "<orderedlists", "/^(\s+)(\\#|[0-9]+\.)\s/e", "deindent('$1','#');");
function deindent($stuff,$type) {
$level = (int) strlen($stuff) / 3;
return str_pad('',$level,$type);
}
## bullet lists
Markup('bullets','block','/^(\\*+)\\s?(\\s*)/','<:ul,$1,$0>$2');
Markup('orderedlists','<bullets','/^(#+)\\s?(\\s*)/','<:ol,$1,$0>$2');
*/

1

Решение

Прочитайте PmWiki / CustomMarkup который описывает Markup_e() функция, которая завершает большую часть работы для вас. Вам нужно найти экземпляры регулярных выражений с /e в конце, в идеале, уже в вызовах Markup()и отредактируйте их так:

До:

Markup('mkatxheading','<preordered', '/(#{1,6})\s*(\w.*?)#+/e', "MarkdownAtxHeading('$1','$2');");

После:

Markup_e('mkatxheading','<preordered', '/(#{1,6})\s*(\w.*?)#+/', "MarkdownAtxHeading(\$m[1],\$m[2]);");

Обратите внимание, что используемый вами рецепт довольно старый (май 2006 г.), поэтому могут возникнуть дальнейшие проблемы. Не забудьте внести исправления обратно на страницу рецепта тоже.

2

Другие решения

Эти рецепты кажутся довольно старыми и не были исправлены, чтобы соответствовать PHP55 (как указано на pmwiki.org).

Если вы не чувствуете себя уверенно исправляя код рецепта, Список рассылки пользователей PmWiki Обычно это лучшее место, чтобы связаться с авторами рецептов и спросить их совета.

0

По вопросам рекламы [email protected]