Apache-2.2

上傳某些 PDF 文件時出現 mediawiki 數據庫錯誤

  • August 31, 2011

我在一個帶有 Apache、PHP 和 Postgresql-9.0 的 Gentoo Linux 機器上執行一個私有的 mediawiki 伺服器。有時,當我們中的一個人嘗試上傳 PDF 文件(這也是我見過的唯一類型)時,我們會收到錯誤消息:

MediaWiki 內部錯誤。

原始異常:異常“DBUnexpectedError”,消息“發生數據庫錯誤”查詢:UPDATE image SET img_size = ‘1129473’,img_width = ‘1287’,img_height = ‘1789’,img_bits = ‘0’,img_media_type = ‘OFFICE’, img_major_mime = ‘應用程序’,img_minor_mime = ‘pdf’,img_timestamp = ‘2011-08-31 16:39:11 GMT’,img_description = ‘’,img_user = ‘1’,img_user_text = ‘動態’,img_metadata = ‘a: 15:{s:5:“標題”;s:0:"";s:7:“主題”;s:0:"";s:8:“關鍵詞”;s:0:"";s: 6:“Author”;s:0:"";s:8:“Producer”;s:20:“Pdf-It 版本 1.410”;s:12:“CreationDate”;s:24:“Thu Jul 27 10 :10:25 2000”;s:7:“ModDate”;s:24:“2001 年 4 月 24 日星期二 06:38:25”;s:6:“Tagged”;s:2:“no”;s:5:“Pages”;s:2:“12”;s:9:“Encrypted” ;s:2:“no”;s:5:“pages”;a:12:{i:1;a:1:{s:9:“頁面大小”;s:13:“618 x 859 pts” ;}i:2;a:1:{s:9:“頁面大小”;s:13:“618 x 859 pts”;}i:3;a:1:{s:9:“頁面大小”; s:13:“619 x 859 pts”;}i:4;a:1:{s:9:“頁面大小”;s:13:“619 x 859 pts”;}i:5;a:1: {s:9:“頁面大小”;s:13:“616 x 859 pts”;}i:6;a:1:{s:9:“頁面大小”;s:13:“616 x 859 pts” ;}i:7;a:1:{s:9:“頁面大小”;s:13:“615 x 859 pts”;}i:8;a:1:{s:9:“頁面大小”; s:13:“615 x 859 pts”;}i:9;a:1:{s:9:“頁面大小”;s:13:“616 x 859 pts”;}i:10;a:1: {s:9:“頁面大小”;s:13:“615 x 859 點”;}i:11;a:1:{s:9:“頁面大小”;s:13:“617 x 859 點”;}i:12;a:1:{s:9: “頁面大小”;s:13:“617 x 859 pts”;}}s:9:“文件大小”;s:13:“1129473 字節”;s:9:“優化”;s:2:“否”;s:11:“PDF 版本”;s:3:“1.3”;s:4:“文本”;a:13:{i:0;s:3527:“論文

我要上傳的論文全文在這裡

“;i:12;s:0:””;}}’,img_sha1 = ‘5y3nidgq6von7yjlalvi776tjs8pjbz’ WHERE img_name = ’title of paper.pdf’ 功能:LocalFile::recordUpload2 錯誤:1 錯誤:bytea LINE 類型的輸入語法無效1: …‘1’,img_user_text = ‘Dynamphorous’,img_metadata = ‘a:15:{s:5… ^’ 在 /var/www/localhost/htdocs/includes/db/DatabasePostgres.php:1122堆棧跟踪:0 /var/www/localhost/htdocs/includes/db/Database.php(538): DatabasePostgres->reportQueryError(‘ERROR: invalid…’, 1, ‘UPDATE image S…’, ’ LocalFile::reco…’, false) 1 /var/www/localhost/htdocs/includes/db/Database.php(1212): DatabaseBase->query(‘UPDATE image S…’, ‘LocalFile:: reco…’) 2 /var/www/localhost/htdocs/includes/filerepo/LocalFile.php(891): DatabaseBase->update(‘image’, Array, Array, ‘LocalFile::reco…’) 3 /var/www/localhost/htdocs/includes/filerepo/LocalFile.php(758): LocalFile->recordUpload2(‘20110831170017!. ..’, ‘’, ‘’, 數組, false, Object(User)) 4 /var/www/localhost/htdocs/includes/upload/UploadBase.php(391): LocalFile->upload(’/tmp/phpMxnvZ5 ‘, ‘’, ‘’, 1, Array, false, Object(User)) 5 /var/www/localhost/htdocs/includes/specials/SpecialUpload.php(426): UploadBase->performUpload(’’, ’’ , false, Object(User)) 6 /var/www/localhost/htdocs/includes/specials/SpecialUpload.php(167): SpecialUpload->processUpload() 7 /var/www/localhost/htdocs/includes/SpecialPage.php (559): SpecialUpload->execute(NULL) 8 /var/www/localhost/htdocs/includes/Wiki.php(254): SpecialPage::執行路徑(對象(標題))9 /var/www/localhost/htdocs/includes/Wiki.php(64):MediaWiki->handleSpecialCases(對象(標題),對象(OutputPage),對象(WebRequest))10 /var/ www/localhost/htdocs/index.php(117): MediaWiki->performRequestForTitle(Object(Title), NULL, Object(OutputPage), Object(User), Object(WebRequest)) 11 {main}

異常處理程序中擷取的異常:異常 ‘DBUnexpectedError’ 並在 /var/www/localhost/htdocs/includes/db/DatabasePostgres.php:624 中顯示消息“SQL 錯誤:錯誤:目前事務被中止,命令被忽略,直到事務塊結束”堆棧跟踪:

0 /var/www/localhost/htdocs/includes/Interwiki.php(153):DatabasePostgres->fetchRow(false) 1 /var/www/localhost/htdocs/includes/Interwiki.php(57):Interwiki::load( ‘工程’) 2 /var/www/localhost/htdocs/includes/Interwiki.php(34): Interwiki::fetch(‘Engineering’) 3 /var/www/localhost/htdocs/includes/Title.php(2325) : Interwiki::isValidInterwiki(‘Engineering’) 4 /var/www/localhost/htdocs/includes/Title.php(131): Title->secureAndSplit() 5 /var/www/localhost/htdocs/includes/Skin.php (2132): Title::newFromText(‘Engineering: E​​l…’) 6 /var/www/localhost/htdocs/includes/Skin.php(2085): Skin->addToSidebar(Array, ‘sidebar’) 7 / var/www/localhost/htdocs/includes/SkinTemplate.php(493): 皮膚->buildSidebar() 8 /var/www/localhost/htdocs/includes/OutputPage.php(1615):SkinTemplate->outputPage(Object(OutputPage)) 9 /var/www/localhost/htdocs/includes/Exception.php(164): OutputPage->output() 10 /var/www/localhost/htdocs/includes/Exception.php (191): MWException->reportHTML() 11 /var/www/localhost/htdocs/includes/Exception.php(289): MWException->report() 12 /var/www/localhost/htdocs/includes/Exception.php (348):wfReportException(對象(DBUnexpectedError))13

$$ internal function $$: wfExceptionHandler(Object(DBUnexpectedError)) 14 {main}

然後它繼續提供 PDF 中的所有元數據。(通常是文件的全文)

我知道這不是幾件事:不是 MIME 文件類型黑名單問題,我們一直在上傳 PDF。這也不是 PHP 上傳大小限制(現在引發此錯誤的 PDF 僅為 1.1MB,甚至在此之前上傳了相當大的文件)

有誰知道這裡的問題可能是什麼?我不認為這是一個加密的 PDF 問題或任何類似的愚蠢問題。它似乎只發生在具有元數據的 PDF 上,例如完整的 OCR 文本。在此先感謝任何可以提供幫助的人。

如前所述,Mediawiki 僅將元數據儲存在數據庫中(作為序列化數組),將文件內容寫入本地文件系統

這似乎是 Mediawiki 中的一個錯誤,導致它在處理太大的元數據時中斷,要麼是因為它錯誤地將整個文件內容解析為元數據,要麼是因為即使是“正確”的元數據也無法處理。我指望後者,因為您發布的錯誤包含 UPDATE 查詢中的整個 PDF 內容。

我建議在您目前的 MW 版本的全新安裝中嘗試相同的 PDF 文件,以確認您現有的配置設置或擴展是否可能是原因之一;然後在目前版本(或 1.18.0 beta)上再試一次,看看它是否仍然存在。

引用自:https://serverfault.com/questions/306908