MediaWiki REL1_32
checkImages.php
Go to the documentation of this file.
1<?php
23require_once __DIR__ . '/Maintenance.php';
24
30class CheckImages extends Maintenance {
31
32 public function __construct() {
33 parent::__construct();
34 $this->addDescription( 'Check images to see if they exist, are readable, etc' );
35 $this->setBatchSize( 1000 );
36 }
37
38 public function execute() {
39 $start = '';
40 $dbr = $this->getDB( DB_REPLICA );
41
42 $numImages = 0;
43 $numGood = 0;
44
45 $repo = RepoGroup::singleton()->getLocalRepo();
46 $fileQuery = LocalFile::getQueryInfo();
47 do {
48 $res = $dbr->select( $fileQuery['tables'], $fileQuery['fields'],
49 [ 'img_name > ' . $dbr->addQuotes( $start ) ],
50 __METHOD__, [ 'LIMIT' => $this->getBatchSize() ], $fileQuery['joins'] );
51 foreach ( $res as $row ) {
52 $numImages++;
53 $start = $row->img_name;
54 $file = $repo->newFileFromRow( $row );
55 $path = $file->getPath();
56 if ( !$path ) {
57 $this->output( "{$row->img_name}: not locally accessible\n" );
58 continue;
59 }
60 $size = $repo->getFileSize( $file->getPath() );
61 if ( $size === false ) {
62 $this->output( "{$row->img_name}: missing\n" );
63 continue;
64 }
65
66 if ( $size == 0 && $row->img_size != 0 ) {
67 $this->output( "{$row->img_name}: truncated, was {$row->img_size}\n" );
68 continue;
69 }
70
71 if ( $size != $row->img_size ) {
72 $this->output( "{$row->img_name}: size mismatch DB={$row->img_size}, "
73 . "actual={$size}\n" );
74 continue;
75 }
76
77 $numGood++;
78 }
79 } while ( $res->numRows() );
80
81 $this->output( "Good images: $numGood/$numImages\n" );
82 }
83}
84
85$maintClass = CheckImages::class;
86require_once RUN_MAINTENANCE_IF_MAIN;
$maintClass
Maintenance script to check images to see if they exist, are readable, etc.
__construct()
Default constructor.
execute()
Do the actual work.
static getQueryInfo(array $options=[])
Return the tables, fields, and join conditions to be selected to create a new localfile object.
Abstract maintenance class for quickly writing and churning out maintenance scripts with minimal effo...
output( $out, $channel=null)
Throw some output to the user.
getDB( $db, $groups=[], $wiki=false)
Returns a database to be used by current maintenance script.
addDescription( $text)
Set the description text.
setBatchSize( $s=0)
Set the batch size.
static singleton()
Get a RepoGroup instance.
Definition RepoGroup.php:59
$res
Definition database.txt:21
require_once RUN_MAINTENANCE_IF_MAIN
const DB_REPLICA
Definition defines.php:25