mirror of
https://framagit.org/hubzilla/core.git
synced 2026-06-21 00:52:33 -04:00
162 lines
4.4 KiB
PHP
Executable File
162 lines
4.4 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();
|
|
|
|
use Zotlabs\Lib\Hashpath;
|
|
|
|
if($argc == 1) {
|
|
usage();
|
|
killme();
|
|
}
|
|
|
|
if($argc == 2) {
|
|
|
|
$storage = (intval(get_config('system','photo_storage_type', 1)) > 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 AND imgscale = 0");
|
|
echo 'Local images: ' . $x[0]['qty'] . PHP_EOL;
|
|
$x = q("SELECT COUNT(resource_id) AS qty FROM photo WHERE photo_usage = 0 AND imgscale > 0");
|
|
echo 'Image thumbnails: ' . $x[0]['qty'] . PHP_EOL;
|
|
$xx = intval($x[0]['qty']);
|
|
$x = q("SELECT COUNT(resource_id) AS qty FROM photo WHERE photo_usage IN (1, 2)");
|
|
echo 'Imported profiles thumbnails: ' . $x[0]['qty'] . PHP_EOL;
|
|
$xx += intval($x[0]['qty']);
|
|
echo 'Thumbnails total: ' . $xx . PHP_EOL;
|
|
$x = q("SELECT COUNT(id) AS qty FROM photo WHERE 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.photo_storage_type to 1 before move thumbnails to filesystem storage' . PHP_EOL;
|
|
break;
|
|
}
|
|
|
|
$cur_id = 0;
|
|
$i = 0;
|
|
|
|
$r = dbq("SELECT COUNT(id) AS max_num FROM photo WHERE os_storage = 0 AND imgscale > 0");
|
|
$max_num = $r[0]['max_num'];
|
|
|
|
while ($i < $max_num) {
|
|
|
|
$x = q("SELECT id, uid, resource_id, content, imgscale FROM photo WHERE id > %d AND os_storage = 0 AND imgscale > 0 ORDER BY id LIMIT 10",
|
|
intval($cur_id)
|
|
);
|
|
|
|
if($x) {
|
|
foreach($x as $xx) {
|
|
|
|
if ($xx['uid'] == 0 || in_array($xx['imgscale'], [4, 5, 6]))
|
|
$filename = Hashpath::path($xx['resource_id'], 'store/[data]/[xchan]', 2, 1) . '-' . $xx['imgscale'];
|
|
else {
|
|
$z = q("SELECT channel_address FROM channel WHERE channel_id = %d",
|
|
intval($xx['uid'])
|
|
);
|
|
$filename = 'store/' . $z[0]['channel_address'] . '/' . $xx['resource_id'] . '-' . $xx['imgscale'];
|
|
}
|
|
|
|
if(! file_put_contents($filename, dbunescbin($xx['content']))) {
|
|
echo PHP_EOL . 'Failed to save file ' . $filename . PHP_EOL;
|
|
continue;
|
|
}
|
|
|
|
$z = q("UPDATE photo SET content = '%s', os_storage = 1 WHERE id = %d",
|
|
dbescbin($filename),
|
|
intval($xx['id'])
|
|
);
|
|
if(! $z) {
|
|
@unlink($filename);
|
|
echo PHP_EOL . 'Failed to update metadata for saved file ' . $filename . PHP_EOL;
|
|
}
|
|
|
|
$cur_id = $xx['id'];
|
|
|
|
echo '.';
|
|
$i++;
|
|
}
|
|
}
|
|
echo ($i % 100 == 0 ? $i : '');
|
|
}
|
|
echo $i . PHP_EOL . 'Total thumbnails processed: ' . $i;
|
|
break;
|
|
|
|
case 'db':
|
|
if($storage == 1) {
|
|
echo 'Please set system.photo_storage_type to 0 before move thumbnails to SQL database storage' . PHP_EOL;
|
|
break;
|
|
}
|
|
|
|
$cur_id = 0;
|
|
$i = 0;
|
|
|
|
$r = dbq("SELECT COUNT(id) AS max_num FROM photo WHERE os_storage = 1 AND imgscale > 0");
|
|
$max_num = $r[0]['max_num'];
|
|
|
|
while ($i < $max_num) {
|
|
|
|
$x = q("SELECT id, uid, resource_id, content, imgscale FROM photo WHERE id > %d AND os_storage = 1 AND imgscale > 0 ORDER BY id LIMIT 10",
|
|
intval($cur_id)
|
|
);
|
|
|
|
if($x) {
|
|
foreach($x as $xx) {
|
|
|
|
$filename = dbunescbin($xx['content']);
|
|
|
|
$content = file_get_contents($filename);
|
|
if($content) {
|
|
|
|
$z = q("UPDATE photo SET content = '%s', os_storage = 0 WHERE id = %d",
|
|
dbescbin($content),
|
|
intval($xx['id'])
|
|
);
|
|
if(! $z) {
|
|
echo PHP_EOL . 'Failed to update stored file metadata ' . $filename . PHP_EOL;
|
|
continue;
|
|
}
|
|
|
|
@unlink($filename);
|
|
}
|
|
else
|
|
echo PHP_EOL . 'Can not read file contents ' . $filename . PHP_EOL;
|
|
|
|
$cur_id = $xx['id'];
|
|
|
|
echo '.';
|
|
$i++;
|
|
}
|
|
}
|
|
echo ($i % 100 == 0 ? $i : '');
|
|
}
|
|
echo $i . PHP_EOL . 'Total files processed: ' . $i;
|
|
break;
|
|
|
|
default:
|
|
usage();
|
|
return;
|
|
|
|
}
|
|
echo PHP_EOL;
|
|
}
|