MediaWiki master
checkImages.php
Go to the documentation of this file.
1<?php
26
27// @codeCoverageIgnoreStart
28require_once __DIR__ . '/Maintenance.php';
29// @codeCoverageIgnoreEnd
30
36class CheckImages extends Maintenance {
37
38 public function __construct() {
39 parent::__construct();
40 $this->addDescription( 'Check images to see if they exist, are readable, etc' );
41 $this->setBatchSize( 1000 );
42 }
43
44 public function execute() {
45 $start = '';
46 $dbr = $this->getReplicaDB();
47
48 $numImages = 0;
49 $numGood = 0;
50
51 $repo = $this->getServiceContainer()->getRepoGroup()->getLocalRepo();
52 do {
53 $queryBuilder = FileSelectQueryBuilder::newForFile( $dbr );
54
55 $res = $queryBuilder->where( $dbr->expr( 'img_name', '>', $start ) )
56 ->limit( $this->getBatchSize() )
57 ->caller( __METHOD__ )->fetchResultSet();
58 foreach ( $res as $row ) {
59 $numImages++;
60 $start = $row->img_name;
61 $file = $repo->newFileFromRow( $row );
62 $path = $file->getPath();
63 if ( !$path ) {
64 $this->output( "{$row->img_name}: not locally accessible\n" );
65 continue;
66 }
67 $size = $repo->getFileSize( $file->getPath() );
68 if ( $size === false ) {
69 $this->output( "{$row->img_name}: missing\n" );
70 continue;
71 }
72
73 if ( $size == 0 && $row->img_size != 0 ) {
74 $this->output( "{$row->img_name}: truncated, was {$row->img_size}\n" );
75 continue;
76 }
77
78 if ( $size != $row->img_size ) {
79 $this->output( "{$row->img_name}: size mismatch DB={$row->img_size}, "
80 . "actual={$size}\n" );
81 continue;
82 }
83
84 $numGood++;
85 }
86 } while ( $res->numRows() );
87
88 $this->output( "Good images: $numGood/$numImages\n" );
89 }
90}
91
92// @codeCoverageIgnoreStart
93$maintClass = CheckImages::class;
94require_once RUN_MAINTENANCE_IF_MAIN;
95// @codeCoverageIgnoreEnd
$maintClass
Maintenance script to check images to see if they exist, are readable, etc.
__construct()
Default constructor.
execute()
Do the actual work.
Abstract maintenance class for quickly writing and churning out maintenance scripts with minimal effo...
getBatchSize()
Returns batch size.
output( $out, $channel=null)
Throw some output to the user.
getServiceContainer()
Returns the main service container.
addDescription( $text)
Set the description text.