Спасибо @ Matěj Grabovský за ответ ;тем не менее, я отключил пару раз, пока заставлял его работать, поэтому вот запись.
Прежде всего, я просто сохранил код из ответа как mwparse.php
и попытался вызвать его извеб-браузер - ответ: « Этот скрипт должен запускаться из командной строки ».Ах, хорошо :) Оказывается, это требование для использования commandLine.inc
.
Итак, я вхожу в оболочку сервера и пытаюсь выполнить из CLI, и я получаю:
$ cd /path/to/mwparse/
$ php -f mwparse.php
...
Exception caught inside exception handler: exception 'DBQueryError' with message 'A database error has occurred
Query: SELECT /* MessageCache::loadFromDB 127.0.0.1 * / page_title FROM MWPREFIX_page WHERE page_is_redirect = '0' AND page_namespace = '8' AND (page_title not like '%%/%%') AND (page_len > 10000)
Function: doQuery
Error: HY000 no such table: MWPREFIX_page
' in /path/to/MyWiki/includes/db/Database.php:606
Stack trace:
....
... что является bullcrap, поскольку установка MyWiki
работает при вызове из браузера - и я также открыл базу данных в sqlitebrowser
, чтобы подтвердить, что таблица MWPREFIX_page
действительно существует.(что упоминается в /w
в ответе Матея здесь я звоню /MyWiki
)
Итак, после попытки установить xdebug
и отладить скрипт с помощью этого (который не работалс Mediawiki для меня, по-видимому, потому что память продолжала истощаться), я просто попытался выполнить эту команду:
php -r "require_once dirname( __FILE__ ) . 'PREFIX/maintenance/commandLine.inc';"
... в разных каталогах, с соответствующими PREFIX
.Оказывается, только возможно выполнить эту строку в корневой установке Mediawiki - то есть, в данном случае, в папке MyWiki
:
$ cd /path/to/MyWiki
$ php -r "require_once dirname( __FILE__ ) . '/maintenance/commandLine.inc';"
$
Зная это, яизменен скрипт Матей на:
<?
//~ error_reporting(E_ALL);
//~ ini_set('display_errors', '1');
chdir('../MyWiki);
//echo getcwd() . "\n"; // for debug check
require_once './maintenance/commandLine.inc';
$text = "* [[foo]]\n* [[Example|bar]]\n* [http://example.com/ an outside link]";
$titleObj = Title::newFromText( 'Example' );
$parserOptions = new ParserOptions();
$parserOptions->setTidy( true );
$parserOutput = $wgParser->parse( $text, $titleObj, $parserOptions );
$parsedText = $parserOutput->getText();
echo $parsedText;
?>
Теперь я могу запустить скрипт из его собственной директории;однако следующее:
PHP Notice: Undefined index: SERVER_NAME in /path/to/MyWiki/includes/Linker.php on line 888
Notice: Undefined index: SERVER_NAME in /path/to/MyWiki/includes/Linker.php on line 888
... можно увидеть в выходных данных.Notice
- если error_reporting
включено - PHP Notice
на самом деле в stderr.Таким образом, чтобы получить только вывод из скрипта, в каталоге скрипта я бы назвал:
php -f mwparse.php 2>/dev/null
Чтобы получить это в сети, теперь мне просто нужно написать страницу PHP, которая вызывает этот скрипт в CLI(возможно, с использованием exec ), что не должно быть проблемой ( за исключением того, что require_once ... commandLine.inc
занимает несколько секунд, так что это будет некоторый удар по производительности ).
Хорошо, рад видеть, что это решено - еще раз спасибо,
Приветствия!
PS: Поскольку я потратил довольно много времени на это, я будувыгрузка некоторого количества записей из командной строки (в основном связанных с установкой xdebug
) ниже.
from web: This script must be run from the command line
from remote terminal:
Exception caught inside exception handler: exception 'DBQueryError' with message 'A database error has occurred
Query: SELECT /* MessageCache::loadFromDB 127.0.0.1 * / page_title FROM MWPREFIX_page WHERE page_is_redirect = '0' AND page_namespace = '8' AND (page_title not like '%%/%%') AND (page_len > 10000)
Function: doQuery
Error: HY000 no such table: MWPREFIX_page
' in /path/to/MyWiki/includes/db/Database.php:606
Stack trace:
....
PHP Deprecated: Comments starting with '#' are deprecated in /etc/php5/cli/conf.d/mcrypt.ini on line 1 in Unknown on line 0
sdf
MediaWiki internal error.
Original exception: exception 'DBQueryError' with message 'A database error has occurred
Query: SELECT /* MediaWikiBagOStuff::_doquery 127.0.0.1 * / value,exptime FROM PREFIX_objectcache WHERE keyname='wikidb-MWPREFIX_:messages:en'
Function: doQuery
Error: HY000 no such table: MWPREFIX_objectcache
' in /path/to/MyWiki/includes/db/Database.php:606
http://www.apaddedcell.com/easy-php-debugging-ubuntu-using-xdebug-and-vim
/1257582/kak-ya-mogu-otladit-skript-php-cli-s-pomoschy-xdebug
sudo apt-get install php-pear # pecl
sudo pecl install xdebug-beta # sh: phpize: not found
sudo apt-get install php5-dev # phpize; The following extra packages will be installed: autoconf automake autotools-dev binutils gcc gcc-4.4 libc-dev-bin libc6-dev libltdl-dev libssl-dev libtool linux-libc-dev m4 manpages-dev shtool zlib1g-dev
sudo pecl install xdebug-beta # Installing '/usr/lib/php5/20090626+lfs/xdebug.so'
sudo nano /etc/php5/apache2/php.ini # zend_extension=/usr/lib/php5/20090626+lfs/xdebug.so and paste
sudo service apache2 restart # sudo /etc/init.d/apache2 restart
wget http://xdebug.org/files/xdebug-2.1.1.tgz # for debugclient
tar xzvf xdebug-2.1.1.tgz
rm package*.xml
cd xdebug-2.1.1/
$ cd debugclient
$ ./configure --with-libedit # configure: error: "libedit was not found on your system."
sudo apt-get install libedit2 # libedit2 is already the newest version.
sudo apt-get install libedit-dev # The following extra packages will be installed: libbsd-dev libncurses5-dev
$ ./configure --with-libedit
$ make
# make install
./debugclient # Waiting for debug server to connect.
# open another remote terminal
export XDEBUG_CONFIG="idekey=session_name"
php mwparse.php
# flies by
# mediawiki started crashing upon adding ?XDEBUG_SESSION_START=1 to url, restart server
# now different errors:
# Deprecated: Call-time pass-by-reference has been deprecated in /path/to/MyWiki/includes/Article.php on line 1658 (http://www.emmajane.net/php-what-call-time-pass-reference-story)
# Notice: Undefined variable: wgBibPath in /path/to/MyWiki/extensions/Bibwiki/Bibwiki.i18n.php on line 116
# Fatal error: Allowed memory size of 20971520 bytes exhausted (tried to allocate 16 bytes) in /path/to/MyWiki/includes/GlobalFunctions.php on line 337
http://www.mediawiki.org/wiki/Manual:Errors_and_symptoms#Fatal_error:_Allowed_memory_size_of_nnnnnnn_bytes_exhausted_.28tried_to_allocate_nnnnnnnn_bytes.29
sudo nano /etc/php5/apache2/php.ini # comment out xdebug stuff
sudo service apache2 restart # now mediawiki works fine...
РЕДАКТИРОВАТЬ примечания:
- Обратите внимание, что даже есливы устанавливаете
$wgDefaultUserOptions ['editsection'] = false;
в вашем LocalSettings.php
, что не влияет на вышеупомянутый скрипт (, хотя это будет действовать в собственно Mediawiki ) - если вы хотите отключить редактирование списка разделовдля рендеринга скрипта API скрипт должен содержать $parserOptions->setEditSection( false );
(, это устанавливается через MediaWiki: ParserOptions Class ) - Поскольку на рабочем сервере, похоже, у меня нет разрешения на запуск PHP: exec () (точнее, PHP: passthru () ), или, возможно, нет разрешения на запуск
php-cli
- поэтому я не могу использовать дословное решение выше, потому что commandLine.inc
потребует терминал.Тем не менее, можно сделать копию commandLine.inc
и «взломать» ее с помощью $argv = array();unset($_SERVER);
, и тогда вышеупомянутый парсер может работать полностью из контекста веб-сервера ( однако, я не уверен, если это копированиеcommandLine.inc
может представлять угрозу безопасности? )