Add command line tool for thumbnails storage convertion
This commit is contained in:
parent
9c8cb4dea3
commit
4cb5efc277
137
util/storageconv
Executable file
137
util/storageconv
Executable file
@ -0,0 +1,137 @@
|
||||
#!/usr/bin/env php
|
||||
<?php
|
||||
|
||||
// Hubzilla thumbnails storage convertor
|
||||
function usage() {
|
||||
echo <<< EOT
|
||||
Hubzilla thumbnails storage convertor
|
||||
|
||||
Usage:
|
||||
util/storageconv stats # show current stats
|
||||
util/storageconv fs # move thumbnails from SQL to filesystem
|
||||
util/storageconv db # move thumbnails from filesystem to SQL
|
||||
|
||||
EOT;
|
||||
}
|
||||
|
||||
require_once('include/cli_startup.php');
|
||||
|
||||
cli_startup();
|
||||
|
||||
if($argc == 1) {
|
||||
usage();
|
||||
killme();
|
||||
}
|
||||
|
||||
if($argc == 2) {
|
||||
|
||||
$storage = (intval(get_config('system','filesystem_storage_thumbnails', 0)) > 0 ? 1 : 0);
|
||||
echo 'Current storage set to: ' . ($storage ? 'filesystem' : 'SQL database') . PHP_EOL;
|
||||
switch($argv[1]) {
|
||||
case 'stats':
|
||||
$x = q("SELECT COUNT(resource_id) AS qty FROM photo WHERE photo_usage = 0 and os_storage = 1");
|
||||
echo 'Local images: ' . $x[0]['qty'] . PHP_EOL;
|
||||
$x = q("SELECT COUNT(id) AS qty FROM photo WHERE resource_id IN (SELECT DISTINCT resource_id FROM photo WHERE photo_usage = 0 and os_storage = 1) AND imgscale > 0");
|
||||
echo 'Thumbnails total: ' . $x[0]['qty'] . PHP_EOL;
|
||||
$x = q("SELECT COUNT(id) AS qty FROM photo WHERE resource_id IN (SELECT DISTINCT resource_id FROM photo WHERE photo_usage = 0 and os_storage = 1) AND os_storage != %d AND imgscale > 0",
|
||||
$storage
|
||||
);
|
||||
echo 'Thumbnails to convert: ' . $x[0]['qty'] . PHP_EOL;
|
||||
break;
|
||||
|
||||
case 'fs':
|
||||
if($storage == 0) {
|
||||
echo 'Please set system.filesystem_storage_thumbnails to 1 before move thumbnails to filesystem storage' . PHP_EOL;
|
||||
break;
|
||||
}
|
||||
|
||||
$x = q("SELECT DISTINCT uid, resource_id FROM photo WHERE photo_usage = 0 and os_storage = 1");
|
||||
|
||||
if($x) {
|
||||
foreach($x as $xx) {
|
||||
|
||||
$r = q("SELECT channel_address FROM channel WHERE channel_id = %d",
|
||||
intval($xx['uid'])
|
||||
);
|
||||
|
||||
$n = q("SELECT id, imgscale, content, os_path FROM photo WHERE resource_id = '%s' AND os_storage != %d AND imgscale > 0",
|
||||
dbesc($xx['resource_id']),
|
||||
$storage
|
||||
);
|
||||
|
||||
echo count($n) . PHP_EOL;
|
||||
foreach($n as $nn) {
|
||||
|
||||
echo '.';
|
||||
|
||||
$filename = 'store/' . $r[0]['channel_address'] . '/' . $nn['os_path'] . '-' . $nn['imgscale'];
|
||||
if(! file_put_contents($filename, dbunescbin($nn['content']))) {
|
||||
echo 'Failed to save file ' . $filename . PHP_EOL;
|
||||
continue;
|
||||
}
|
||||
|
||||
$z = q("UPDATE photo SET content = '%s', os_storage = 1 WHERE id = %d",
|
||||
dbescbin($filename),
|
||||
intval($nn['id'])
|
||||
);
|
||||
if(! $z) {
|
||||
@unlink($filename);
|
||||
echo 'Failed to update metadata for saved file ' . $filename . PHP_EOL;
|
||||
}
|
||||
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
case 'db':
|
||||
if($storage == 1) {
|
||||
echo 'Please set system.filesystem_storage_thumbnails to 0 before move thumbnails to SQL database storage' . PHP_EOL;
|
||||
break;
|
||||
}
|
||||
|
||||
$x = q("SELECT DISTINCT resource_id FROM photo WHERE photo_usage = 0 and os_storage = 1");
|
||||
|
||||
if($x) {
|
||||
foreach($x as $xx) {
|
||||
|
||||
$n = q("SELECT id, content FROM photo WHERE resource_id = '%s' AND os_storage != %d AND imgscale > 0",
|
||||
dbesc($xx['resource_id']),
|
||||
$storage
|
||||
);
|
||||
|
||||
foreach($n as $nn) {
|
||||
|
||||
echo '.';
|
||||
|
||||
$filename = dbunescbin($nn['content']);
|
||||
$content = file_get_contents($filename);
|
||||
if($content) {
|
||||
|
||||
$z = q("UPDATE photo SET content = '%s', os_storage = 0 WHERE id = %d",
|
||||
dbescbin($content),
|
||||
intval($nn['id'])
|
||||
);
|
||||
if(! $z) {
|
||||
echo 'Failed to update stored file metadata ' . $filename . PHP_EOL;
|
||||
continue;
|
||||
}
|
||||
|
||||
@unlink($filename);
|
||||
}
|
||||
else
|
||||
echo 'Can not read file contents ' . $filename . PHP_EOL;
|
||||
}
|
||||
}
|
||||
}
|
||||
break;
|
||||
|
||||
default:
|
||||
usage();
|
||||
return;
|
||||
|
||||
}
|
||||
|
||||
echo PHP_EOL;
|
||||
}
|
||||
|
Reference in New Issue
Block a user