streams/util/storageconv
2021-12-03 10:02:31 +11:00

134 lines
3.5 KiB
PHP
Executable file

#!/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', 1));
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 AND imgscale = 0');
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 resource_id, content FROM photo WHERE photo_usage = 0 AND os_storage = 1 AND imgscale = 0');
if($x) {
foreach($x as $xx) {
$n = q("SELECT id, imgscale, content FROM photo WHERE resource_id = '%s' AND os_storage != %d AND imgscale > 0",
dbesc($xx['resource_id']),
intval($storage)
);
$img_path = dbunescbin($xx['content']);
foreach($n as $nn) {
echo '.';
$filename = $img_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 resource_id FROM photo WHERE photo_usage = 0 AND os_storage = 1 AND imgscale = 0');
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']),
intval($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;
}