PHP와 관련된 문제를 기록해 두고, 가능한 해결책을 찾아보고자 합니다.
PHP Warning: Unable to initialize module
PHP 버전 8.3 업그레이드 후에 몇 개의 모듈을 다시 컴파일할 필요가 있습니다. 대체로 PHP에 있는 데비안용 컴파일 패키지를 이용해서 모듈을 만들 수 있지만, php-luasandbox는 제대로 컴파일이 되더라도 초기화가 되지 않습니다. 그럴 때에는 PHP 버전 변경에서 auto로 갖고 있는 값을 해당 버전으로 수동으로 조정해서 컴파일 후에 설치할 수 있습니다.
PHP 8.1
$GLOBALS 변수를 사용할 수 없다고 합니다.
PHP 8.0
새로운 버전은 JIT를 적용한 버전으로써, 7.4에 비해 30% 이상 속도 향상이 있을 것으로 기대됩니다.
어쨌든, Extension:TemplateStyles에서 아래 오류가 발생합니다.
- Parse error: syntax error, unexpected token "match" : 111줄
이것 외에도 상당히 많은 변경 점이 있기 때문에, 현재 미디어위키와 호환되기 위해서는 상당한 시간이 소요될 것으로 보입니다. 어쨌든, PHP와의 전반적인 호환성에 대한 정보는 여기에서 얻을 수 있으며, 현재 PHP8와의 호환성을 위한 작업하고 있는 내용은 여기에서 확인할 수 있습니다.
데이터베이스 판올림
- php maintenance/update.php
...
Query: ALTER TABLE `mw_flow_ext_ref` DROP KEY flow_ext_ref_idx_v2
...
Error: 1050 Table 'mw_flow_wiki_ref' already exists (localhost)
해당 테이블을 삭제하고 새롭게 진행합니다.
- sudo mysql -u root -p
MariaDB [wikidb]> use wikidb;
MariaDB [wikidb]> drop table mw_flow_ext_ref;
MariaDB [wikidb]> drop table mw_flow_wiki_ref;
MariaDB [wikidb]> exit
category 판올림이 안될 경우
간혹은 판올림 후에 category가 판올림이 안되는 경우가 있습니다. 아래와 같이 강제로 판올림 할 수 있습니다.
- cd /var/www/html/w
- php maintenance/refreshLinks.php
어느 순간부터 아래와 같은 오류가 발생하면서 카테고리 판올림이 되지 않습니다.
- php maintenance/refreshLinks.php 1000
Refreshing redirects table.
Starting from page_id 1000 of 1026.
1000
Refreshing links tables.
Starting from page_id 1000 of 1026.
1000
A database query error has occurred.
Query: INSERT IGNORE INTO `mw_categorylinks` (cl_from,cl_to,cl_sortkey,cl_timestamp,cl_sortkey_prefix,cl_collation,cl_type) VALUES ('1025','Hardware','XIAOMI MI5S','20161211170042','','uppercase','page')
Function: LinksUpdate::incrTableUpdate
Error: 1305 PROCEDURE wikidb.do_insert_category_closure_catlinks does not exist (localhost)
이 오류는 IntraACL 확장 관련해서 발생하는 것으로 보입니다.
- 해당 트리거를 삽입하기 위해서 이전에 사용하던 미디어위키에서 트리거를 백업해서 가져왔지만 같은 오류가 발생했습니다.
- 카테고리가 판올림되는 데이터베이스에서 트리거를 백업했더니 해당 트리거가 존재하지 않습니다. 결국 해당 트리거를 콜하는 트리거를 제거해 줌으로써 해결이 되었습니다.
아래와 같이 트리거를 제거합니다.
- sudo mysql -u root -p
MariaDB [wikidb]> use wikidb;
MariaDB [wikidb]> show triggers where `table`='mw_categorylinks';
MariaDB [wikidb]> drop trigger insert_category_closure_catlinks;
MariaDB [wikidb]> drop trigger update_category_closure_catlinks;
MariaDB [wikidb]> drop trigger delete_category_closure_catlinks;
SMW data repair and update
미디어위키의 주판이 판올림되고 나서 데이터를 강제로 새롭게 판올림하고 싶을 때에는 아래와 같이 처리해 줍니다.
- cd /var/www/html/w
- php maintenance/runJobs.php
Php 7.2
2017년 11월 30일 7.2.0 판이 출시가 되었습니다. 해당 판을 설치해서 미디어위키가 제대로 동작하는지 확인해 보겠습니다.
- sudo apt install php7.2-fpm
- sudo apt install php7.2-gd php7.2-mysql php7.2-mbstring php7.2-xml php7.2-intl
libmcrypt를 기반으로 작성된 php7.2-mcrypt가 없어진다고 합니다. 대신에 openssl extension을 사용하도록 권고하고 있습니다. 미디어위키 확장중에 BetaFeatures에서 문제가 발생합니다. 아래와 같이 extensions/BetaFeatures/includes/HTMLFeatureField.php 파일을 수정해 줍니다.
}
function getInputHTML( $value, $attr = NULL ) {
$html = '';
$divClasses = [
'mw-ui-feature-field',
];
별다른 이상증상없이 동작중입니다.
CleanChanges extension
- cd /var/www/html/w
- php maintenance/refreshLinks.php
PHP Warning: Declaration of NCL::recentChangesLine(&$baseRC, $watched = false) should be compatible with EnhancedChangesList::recentChangesLine(&$rc, $watched = false, $linenumber = NULL) in /var/www/html/w/extensions/CleanChanges/CleanChanges_body.php on line 6
아래와 같이 extensions/CleanChanges/CleanChanges_body.php 파일을 수정합니다. 이미 패치가 되었습니다.
/**
* Format a line for enhanced recentchange (aka with JavaScript and block of lines).
* @param RecentChange $baseRC
* @param bool $watched
* @return string
*/
public function recentChangesLine( &$baseRC, $watched = false, $linenumber = null ) {
# Create a specialised object
$rc = RCCacheEntry::newFromParent( $baseRC );
SemanticMediaWiki
- cd /var/www/html/w
- php maintenance/refreshLinks.php
PHP Warning: count(): Parameter must be an array or an object that implements Countable in /var/www/html/w/extensions/SemanticMediaWiki/includes/query/SMW_QueryProcessor.php on line 296