aboutsummaryrefslogtreecommitdiffstats
path: root/util/storageconv
diff options
context:
space:
mode:
Diffstat (limited to 'util/storageconv')
-rwxr-xr-xutil/storageconv137
1 files changed, 137 insertions, 0 deletions
diff --git a/util/storageconv b/util/storageconv
new file mode 100755
index 000000000..594ec14fb
--- /dev/null
+++ b/util/storageconv
@@ -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;
+}
+