Tiny File Manager V2.5.3を導入

 Edgeブラウザでは社内共有のfile://リンクへの有効化にhttps化やグループポリシー設定などの手間が必要制限ありとのことで、別のアプローチとしてフォルダー内のファイルの一覧表示やファイルのコピーは、ブラウザで動くサーバーサイドのファイルマネージャーを導入すれば解決しそう。いちから作らなくても誰かが作ってくれてそう。とのことで調べると自分になじみのPHPで動作するものだけでも結構あります。中でも検索結果上位で最近でも更新されているTiny File Managerがよさそうと、うちの環境に導入してみました。
 こちらがドキュメントになりますが、README.mdファイルを参考に十分はじめられます。
 PHPは5.5.0以上に対応。強く推奨される必要な拡張機能として

fileinfo、iconv、zip、tar、mbstring

があげられています。うちのUbuntu 22.04環境では、fileinfoとiconvはデフォルトで有効。tarはソースを見るとPhar拡張を利用とのことでこれもデフォルトで有効。あとはphp-zipとphp-mbstringのパッケージが別途インストール必要となっていました。
 次にファイルの置き方ですが、最小限必要なのはtinyfilemanger.phpのみです。英語以外で表示するには同じディレクトリ内にtranslation.jsonも配置します。もちろん日本語にも対応ですが後述する設定が必要です。
 またtinyfilemanger.phpを実行するのにCSSやJSファイルをインターネット経由で利用するのが通常なのですが、インターネットに接続できない、うちのような社内環境で使う用途向けにofflineブランチも用意されています。こちらはオフライン用に改変されたtinyfilemanger.phpとassetsディレクトリを同じ場所にコピーして使います。
 各種設定はtinyfilemanger.phpファイル冒頭の変数を直接変更してもいいのですが、推奨するやり方としては、同じディレクトリにconfig.phpというファイルを作成して、そこに変数を記入する方法です。config.phpサンプルはこちらから。
 実際にはひとつのサーバーで複数のファイル操作ページを立ち上げるため、その数のぶんconfig.phpと格納するディレクトリーをDOCUMENT_ROOT以下に作って、それぞれのディレクトリ、例えば/var/www/html/filemanager/に

  • assets
  • config.php
  • tinyfilemanger.php
  • translation.json

を配置しています。ここでtinyfilemanger.phpをindex.phpに名前変更してもいいですね。config.php以外は重複するのですが、全部で3.5MBもないぐらいのサイズですので、このサーバーでファイルマネージャーが必要なぶん、ディレクトリを複製してconfig.phpを個別に編集してページを開設しています。
 うちの環境では、社内システムでユーザー認証なし、ファイルは一覧するのみとしてconfig.phpは以下のような感じとなりました。

<?php
$CONFIG = '{"lang":"ja","error_reporting":false,"show_hidden":false,"hide_Cols":true,"theme":"light"}';
$use_auth = false;
$global_readonly = true;
$use_highlightjs = false;
$edit_files = false;
$default_timezone = 'Asia/Tokyo';
$root_path = '/mnt/share/files';
$datetime_format = 'Y/m/d H:i';
$favicon_path = '/icon/favicon.png';
$online_viewer = false;
define('FM_ROOT_URL', 'file://shareserver/files');

 まずは$CONFIGの内容で、"lang"を"ja"にすることで表記が日本語になります。デフォルトの"en"のままでしたら、translation.jsonファイルは不要。"hide_Cols"をtrueにして、一覧表示時にファイルのパーミッションと所有者、グループの列を表示をしない設定としています。
 $root_pathがサーバー上のどのディレクトリを一覧表示するかの設定です。
 ここでは指定してないですが$root_urlと$http_hostで、ファイル一覧で表示されるリンクでURLを適用して指定できるようになっています。しかしほかのサーバーへのリンクや、httpやhttps以外プロトコルは設定できません。そこで裏技的な方法ですが、最終行のdefineのように、FM_ROOT_URLを強制的に指定可能です。ここではfileプロトコルとして共有フォルダーを指示して、file:// URLが可能なマシンではリンクが有効になるようにしています。ソースを見るとFM_ROOT_URLは別途設定しても大丈夫になっていますので、ドキュメントに明記されていない裏設定だと思います。
 また、$http_hostを別のホスト名にするとファイルマネージャーの操作で一部おかしくなりますので、あくまでもこの値はTiny File Managerのサーバー名で、$_SERVER['HTTP_HOST']と異なるときだけに指定すべきです。
 あとはお好みとなりますが、$favicon_pathはPNG形式のみ対応ですのでご注意を。最初SVGにしてたら有効化されませんでした。というかHTMLソース的に

<link rel="icon" href="/icon/favicon.svg" type="image/png">

となり、typeの記述と矛盾してブラウザ側で無視される感じです。
 上記設定例で、$global_readonly = true;を削除、デフォルトでfalseにするとファイルのアップロードや削除などの操作が可能です。アップロードページは直接のURL指定で

https://server/filemanager/tinyfilemanger.php?p=&upload

のようになります。
 アップロードが許容される最大サイズは $max_upload_size_bytes にて設定可能で、デフォルトでは約5GB。コメントでは同時にphp.iniのmemory_limit、upload_max_filesize、post_max_sizeを増やせとありますが、試したところ変更なしに5GBのファイルがアップロードできました。JavaScriptライブラリーのDropzoneの設定としてこの値が指定されていて、あとはDropzoneがうまいことやってくれているのでしょう。
 ユーザー認証など使っていない機能も多いのですが、以上の導入設定でほしい機能は完ぺきに使えるようになりました。このような完成度の高いファイルマネージャーを公開していただき作者さんや協力者の皆様には感謝です。