勉強したことのメモ

Webエンジニア / プログラマが勉強したことのメモ。

ブラウザ上でファイルのアップ・ダウンロードが可能なTiny File Managerの利用方法

   2024/04/07  PHP

ブラウザ上でファイルのアップ・ダウンロードが可能なファイルマネージャーを設置したかった。無料で良いのが無いか探したところ「Tiny File Manager」というプログラムがPHPファイル1枚で動作し、見た目的にも使えそう。以下に導入方法と各種設定方法をメモ。

 

Tiny File Manager

公式サイト

https://tinyfilemanager.github.io/

ドキュメント

https://github.com/prasathmani/tinyfilemanager/wiki

デモページ

https://tinyfilemanager.github.io/demo/

 

導入方法

ファイルのアップロード

公式ページよりtinyfilemanager.phpをダウンロードして適当なディレクトリにアップロードする。

ログイン

ブラウザから確認すると以下のようなログインページが表示される筈。

 

デフォルトで以下がアカウント情報になる。

  • Username -> admin
  • Password -> admin@123

ログインすると以下のようにファイル一覧が表示される筈。表示されない場合はパーミッション設定を見直すこと。

 

設定方法

ログインの有無

24行目付近の以下をfalseにすることでログイン不要になる。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$use_auth = true;
$use_auth = true;
$use_auth = true;

アカウント設定

29行目付近の以下がアカウント設定になる。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
$auth_users = array(
'admin' => '$2y$10$/K.hjNr84lLNDt8fTXjoI.DBp6PpeyoJ.mGwrrLuCZfAwfSAGqhOW', //admin@123
'user' => '$2y$10$Fg6Dz8oH9fPoZ2jJan5tZuv6Z4Kp7avtQ9bDfrdRntXtPeiMAZyGO' //12345
);
$auth_users = array( 'admin' => '$2y$10$/K.hjNr84lLNDt8fTXjoI.DBp6PpeyoJ.mGwrrLuCZfAwfSAGqhOW', //admin@123 'user' => '$2y$10$Fg6Dz8oH9fPoZ2jJan5tZuv6Z4Kp7avtQ9bDfrdRntXtPeiMAZyGO' //12345 );
$auth_users = array(
    'admin' => '$2y$10$/K.hjNr84lLNDt8fTXjoI.DBp6PpeyoJ.mGwrrLuCZfAwfSAGqhOW', //admin@123
    'user' => '$2y$10$Fg6Dz8oH9fPoZ2jJan5tZuv6Z4Kp7avtQ9bDfrdRntXtPeiMAZyGO' //12345
);

keyがUsername、valueがPasswordに相当する。尚、パスワードの方はこちらのページでpassword_hash化した値を入力する。

ディレクトリ指定

指定したユーザーは指定したディレクトリ以下のみ閲覧可能にする設定。

45行目付近の以下を書き換える。ユーザ名に関しては上記のアカウント設定で作成したものを指定すること。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#変更前
$directories_users = array();
#変更後
$directories_users = array(
'user' => '/ドキュメントルート/指定ディレクトリ',
'guest' => '/ドキュメントルート/指定ディレクトリ'
);
#変更前 $directories_users = array(); #変更後 $directories_users = array( 'user' => '/ドキュメントルート/指定ディレクトリ', 'guest' => '/ドキュメントルート/指定ディレクトリ' );
#変更前
$directories_users = array();

#変更後
$directories_users = array(
    'user' => '/ドキュメントルート/指定ディレクトリ',
    'guest' => '/ドキュメントルート/指定ディレクトリ'
);

日時設定

59行目付近の以下を書き換える。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#変更前
$default_timezone = 'Etc/UTC';
#変更後
$default_timezone = 'Asia/Tokyo';
#変更前 $default_timezone = 'Etc/UTC'; #変更後 $default_timezone = 'Asia/Tokyo';
#変更前
$default_timezone = 'Etc/UTC';

#変更後
$default_timezone = 'Asia/Tokyo';

また、78行目付近の以下を書き換える。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#変更前
$datetime_format = 'm/d/Y g:i A';
#変更後
$datetime_format = 'Y-m-d H:i:s';
#変更前 $datetime_format = 'm/d/Y g:i A'; #変更後 $datetime_format = 'Y-m-d H:i:s';
#変更前
$datetime_format = 'm/d/Y g:i A';

#変更後
$datetime_format = 'Y-m-d H:i:s';

ここまで設定すればある程度使える筈(PHP8系で動作確認済み)。

 

その他

「Direct link」のURLが変

$directories_usersでディレクトリ設定を行った場合、「Direct link」のリンク先URLが変になる筈。

無理やりだけど以下部分を書き換える。

Plain text
Copy to clipboard
Open code in new window
EnlighterJS 3 Syntax Highlighter
#ソースコードの上の方で定義
define('CUSTOM_ROOT_URL', 'https://test.com/tinyfilemanager');
#2116行目 変更前
<a title="<?php echo lng('DirectLink')?>" href="<?php echo fm_enc(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f . '/') ?>" target="_blank"><i class="fa fa-link" aria-hidden="true"></i></a>
#変更後
<a title="<?php echo lng('DirectLink')?>" href="<?php echo CUSTOM_ROOT_URL . fm_enc($f) ?>" target="_blank"><i class="fa fa-link" aria-hidden="true"></i></a>
#2187行目 変更前
<a title="<?php echo lng('DirectLink') ?>" href="<?php echo fm_enc(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f) ?>" target="_blank"><i class="fa fa-link"></i></a>
#変更後
<a title="<?php echo lng('DirectLink') ?>" href="<?php echo CUSTOM_ROOT_URL . fm_enc($f) ?>" target="_blank"><i class="fa fa-link"></i></a>
#ソースコードの上の方で定義 define('CUSTOM_ROOT_URL', 'https://test.com/tinyfilemanager'); #2116行目 変更前 <a title="<?php echo lng('DirectLink')?>" href="<?php echo fm_enc(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f . '/') ?>" target="_blank"><i class="fa fa-link" aria-hidden="true"></i></a> #変更後 <a title="<?php echo lng('DirectLink')?>" href="<?php echo CUSTOM_ROOT_URL . fm_enc($f) ?>" target="_blank"><i class="fa fa-link" aria-hidden="true"></i></a> #2187行目 変更前 <a title="<?php echo lng('DirectLink') ?>" href="<?php echo fm_enc(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f) ?>" target="_blank"><i class="fa fa-link"></i></a> #変更後 <a title="<?php echo lng('DirectLink') ?>" href="<?php echo CUSTOM_ROOT_URL . fm_enc($f) ?>" target="_blank"><i class="fa fa-link"></i></a>
#ソースコードの上の方で定義
define('CUSTOM_ROOT_URL', 'https://test.com/tinyfilemanager');

#2116行目 変更前
<a title="<?php echo lng('DirectLink')?>" href="<?php echo fm_enc(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f . '/') ?>" target="_blank"><i class="fa fa-link" aria-hidden="true"></i></a>

#変更後
<a title="<?php echo lng('DirectLink')?>" href="<?php echo CUSTOM_ROOT_URL . fm_enc($f) ?>" target="_blank"><i class="fa fa-link" aria-hidden="true"></i></a>

#2187行目 変更前
<a title="<?php echo lng('DirectLink') ?>" href="<?php echo fm_enc(FM_ROOT_URL . (FM_PATH != '' ? '/' . FM_PATH : '') . '/' . $f) ?>" target="_blank"><i class="fa fa-link"></i></a>

#変更後
<a title="<?php echo lng('DirectLink') ?>" href="<?php echo CUSTOM_ROOT_URL . fm_enc($f) ?>" target="_blank"><i class="fa fa-link"></i></a>

これでディレクトリ設定を行っても「Direct link」でファイルが閲覧できるようになる筈。

 

所感

サイトの管理画面(ダッシュボード)にアップローダ的なものを実装する際、今までは素のPHPで組んでいたけど、このプログラムを組み込むというのもありかも。

 - PHP

  関連記事

PHPからDBX Platformを利用してDropbox内にディレクトリ(フォルダ)を作成する方法

PHPからDBX Platformを利用してDropbox内にディレクトリ(フォ ...

CodeIgniter4でCronを実行する方法

CodeIgniter4.4.4で特定の処理をCronで自動実行させたい。以下に ...

PHPのHTTPリクエストライブラリ「Requests for PHP」の利用方法

PHPで外部のAPI等にリクエストする際に可能であればfile_get_cont ...

PHPの配列でキーの最大値を取得

PHPの配列でキーの最大値を取得したかった。以下で対応する。 $test = a ...

PHPでメルマガを配信する方法(BCCで一括送信するパターン)

PHPでメールマガジンを配信したかった。宛先のメールアドレスはMySQLに保存さ ...

S