【Basercms5】プラグインの新規追加について

・baserCMSのバージョン:5.0.15
・レンタルサーバー名:XAMPP8.2.4
・データベース:SQLite
・使用テーマ:自作テーマ
・PHPスキル(自己評価):E
・インストールディレクトリ D:\xampp\htdocs\basercms5
・URL https://localhost/basercms5/
※サブフォルダにインストール

「プラグイン管理」のプラグインアップロード「新規追加」から
プラグインのZIPファイルを追加すると
「/plugins」フォルダではなく、「/tmp」フォルダに解凍されてしまいます。
※「/tmp」内に解凍されたプラグインのフォルダを「/plugins」フォルダに移動させたら、プラグイン一覧に表示されインストールできました。

公式ガイドでは

「プラグインのインストールは簡単です。次のフォルダにダウンロードしたZipファイルを解凍してできたフォルダを設置してください。
/plugins/
上記フォルダ内に設置されたプラグインは、管理画面のプラグイン管理で自動的に認識されます。将来的に、管理システム内で直接ダウンロードできる仕組みを検討中ですが、現在は、手動での設置が必要です。(2023/03/29 現在)」

とありましたが、「新規追加」からプラグインを追加する機能は
まだ、使用できない機能なのでしょうか?

@ciao-h

プラグイン追加機能は動作しておりますが、書き込み権限の問題が発生している可能性があります。
アップロードの際は、一旦、/tmp に解凍してから、/plugins に移す動作となっています。
そのため、/plugins に書き込み権限がない場合は、移動に失敗する可能性があります。

混乱を招かないよう、 /plugins の書き込み権限チェック機能を追加しておきました。

@ryuring さん 対応ありがとうございます。
プラグインを追加する際は/pluginsの書き込み権限の変更が必要だったのですね。

/plugins の書き込み権限が原因ではとのことでしたので、
ローカル環境(xampp)のため、フォルダのプロパティから「読み取り専用」の設定を解除して、プラグインzipファイルを再度アップロードを試してみたのですが、
権限を変更しても、/tmp で解凍されたまま、自動的に /plugins には移動しませんでした。

ちなみに、テーマの新規追加も試してみましたところ、テーマのzipファイルも同様に/tmpで解凍されたままでした。

@ciao-h そうだったんですね、windows環境の問題のような気がしますね。
また時間見つけて調査してみます。

@ryuring さん お手数おかけします。

先の方法で、BeserCMS5をインストールする際 /composer.lock ファイル、 /tmp 、 /logs 、 /config 、/composer 、 /vendor フォルダの書き込み権限を解除していたり、
BcUploaderプラグイン有効化の際も/webroot/filesの書き込み権限を変更して動作しているのでxamppでの書き込み権限の変更方法は問題ないはずなんですが・・・

しばらくは解凍したプラグイン・テーマファイルを手動で/pluginsに移動させて対応します。

@ciao-h ちなみにお伺いしたいのですが、zipファイルの名称と、解凍後のフォルダ名の名称を教えて頂けますか?

@ryuring さん プラグインはbaserMarketから取得した「Banner-5.0.0.zip」で、解凍後は「Banner」になります。
また、マーケットで取得できるvev5用の他のプラグインも試しましたが、同様に/tmpで解凍されて、移動はされませんでした。

@ciao-h 情報ありがとうございます。
どうやら、プラグインファイルの解凍前と解凍後に名前が変更となる場合にうまくいかないということがわかりました。
こちらのコミットで解消しております。情報協力ありがとうございました。

「いいね!」 1

@ryuring さん 対応ありがとうございます。
ZIPファイル名が解凍後のフォルダと違う名前なのが原因ということでしたので、
zipファイル名を解凍後と同じ名前に変更して新規追加したところ反映されました。

「Banner-5.0.0.zip」→ 「Banner.zip」
「BlogTagGroup-5.0.0.zip」→「BlogTagGroup.zip」
「BurgerEditorLE.zip」→「BurgerEditor.zip」
「SitemapXml-5.0.0.zip」→「SitemapXml.zip」
※「BcAddonMigrator.zip」「BcDbMigrator.zip」はファイル名変更しなくとも、反映されました。

リンク先のファイル「PluginsService.php」を差し替えてみたのですが、こちらの環境(Basercms5.0.18)ではうまく動作しませんでした・・・
また、プラグイン追加した後の表示も変わってしまいました。

@ciao-h お陰様で問題のアタリは付きましたが、こちらですぐにWindowsの環境を準備できないため、もしよろしければ、あと少しだけお付き合いください。

  1. ログファイルを初期化
    /logs/debug.log を空にするまたは、削除する
  2. ログ出力を仕込む
    plugins/baser-core/src/Utility/BcZip.php の126行目あたりにログ出力を仕込む
exec($command, $return2);
// ↓この行を追加
\Cake\Log\Log::write(\Psr\Log\LogLevel::INFO, implode("\n", $return2));
if (!empty($return2[2])) {
  1. アップロードを実行
    ブラウザでアップロードを実行

  2. ログの内容をこのスレッドに貼る
    /logs/debug.log の中身をこのスレッドに貼ってください。

僕の環境では次のような感じになりました。

2024-06-15 16:09:50 info: Archive:  /var/www/html/tmp/Banner-5.0.0.zip
Made with MacWinZipper (https://tida.co.jp/macwinzipper)
  inflating: /var/www/html/tmp/Banner/config/Migrations/20230216170210_CreateBannerBreakpoints.php
  inflating: /var/www/html/tmp/Banner/config/Migrations/20230216170142_CreateBannerFiles.php
  inflating: /var/www/html/tmp/Banner/config/Migrations/20230216170113_CreateBannerAreas.php
  inflating: /var/www/html/tmp/Banner/config/setting.php
  inflating: /var/www/html/tmp/Banner/resources/locales/banner.pot
  inflating: /var/www/html/tmp/Banner/webroot/css/admin/banner_admin.css
  inflating: /var/www/html/tmp/Banner/README_API.md
  inflating: /var/www/html/tmp/Banner/config.php
  inflating: /var/www/html/tmp/Banner/README.md
  inflating: /var/www/html/tmp/Banner/templates/element/banner_block.php
  inflating: /var/www/html/tmp/Banner/templates/element/banner_block_img.php
  inflating: /var/www/html/tmp/Banner/templates/Admin/BannerFiles/add.php
  inflating: /var/www/html/tmp/Banner/templates/Admin/BannerFiles/index.php
  inflating: /var/www/html/tmp/Banner/templates/Admin/BannerFiles/edit.php
  inflating: /var/www/html/tmp/Banner/templates/Admin/element/BannerFiles/index_list.php
  inflating: /var/www/html/tmp/Banner/templates/Admin/element/BannerFiles/form.php
  inflating: /var/www/html/tmp/Banner/templates/Admin/element/BannerFiles/index_row.php
  inflating: /var/www/html/tmp/Banner/templates/Admin/element/search/banner_areas_index.php
  inflating: /var/www/html/tmp/Banner/templates/Admin/element/search/banner_files_index.php
  inflating: /var/www/html/tmp/Banner/templates/Admin/element/BannerAreas/index_list.php
  inflating: /var/www/html/tmp/Banner/templates/Admin/element/BannerAreas/form.php
  inflating: /var/www/html/tmp/Banner/templates/Admin/element/BannerAreas/index_row.php
  inflating: /var/www/html/tmp/Banner/templates/Admin/element/help/banner_files_form.php
  inflating: /var/www/html/tmp/Banner/templates/Admin/element/help/banners.php
  inflating: /var/www/html/tmp/Banner/templates/Admin/element/help/banner_areas_form.php
  inflating: /var/www/html/tmp/Banner/templates/Admin/element/help/banner_areas_index.php
  inflating: /var/www/html/tmp/Banner/templates/Admin/element/help/banner_files_index.php
  inflating: /var/www/html/tmp/Banner/templates/Admin/BannerAreas/add.php
  inflating: /var/www/html/tmp/Banner/templates/Admin/BannerAreas/index.php
  inflating: /var/www/html/tmp/Banner/templates/Admin/BannerAreas/edit.php
  inflating: /var/www/html/tmp/Banner/templates/Admin/Banner/config.php
  inflating: /var/www/html/tmp/Banner/VERSION.txt
  inflating: /var/www/html/tmp/Banner/LICENSE.txt
  inflating: /var/www/html/tmp/Banner/src/Plugin.php
  inflating: /var/www/html/tmp/Banner/src/Controller/Admin/BannerAdminAppController.php
  inflating: /var/www/html/tmp/Banner/src/Controller/Admin/BannerFilesController.php
  inflating: /var/www/html/tmp/Banner/src/Controller/Admin/BannerController.php
  inflating: /var/www/html/tmp/Banner/src/Controller/Admin/BannerAreasController.php
  inflating: /var/www/html/tmp/Banner/src/Controller/Api/Admin/BannerFilesController.php
  inflating: /var/www/html/tmp/Banner/src/Controller/Api/BannerFilesController.php
  inflating: /var/www/html/tmp/Banner/src/Model/Table/BannerAppTable.php
  inflating: /var/www/html/tmp/Banner/src/Model/Table/BannerAreasTable.php
  inflating: /var/www/html/tmp/Banner/src/Model/Table/BannerBreakpointsTable.php
  inflating: /var/www/html/tmp/Banner/src/Model/Table/BannerFilesTable.php
  inflating: /var/www/html/tmp/Banner/src/Model/Validation/BannerFileValidation.php
  inflating: /var/www/html/tmp/Banner/src/View/Helper/BannerHelper.php
  inflating: /var/www/html/tmp/Banner/src/Event/BannerControllerEventListener.php

この出力結果から、プラグインのトップディレクトリを取得しようとしているのですが、それがうまくいっていないのだと思います。

@ryuring さん こんにちは
/log/debug.logの内容を空にし、指定の記述をBcZip.phpに追加し後、下記の4通りで、「Banner-5.0.0.zip」ファイルをアップロードしてみましたが、こちらの環境ではdebug.logに何も書き込まれませんでした。
・PluginsService.php(差し替え前)・ノーマルモード
・PluginsService.php(差し替え前)・デバッグモード
・PluginsService.php(差し替え後)・ノーマルモード
・PluginsService.php(差し替え後)・デバッグモード

その代わりerror.logには下記の通り書き込まれていましたが、何か関係ありますでしょうか。

2024-06-16 13:31:17 warning: file_get_contents(D:\xampp\htdocs\bctest\config\jwt.pem): Failed to open stream: No such file or directory
Request URL: /baser/api/admin/baser-core/plugins/get_available_core_version_info.json
Referer URL: https://localhost/bctest/baser/admin/baser-core/plugins/index
Trace:
file_get_contents [internal], line ??
BaserCore\BaserCorePlugin::setupJwtAuth() D:\xampp\htdocs\bctest\vendor\baserproject\baser-core\src\BaserCorePlugin.php, line 457
BaserCore\BaserCorePlugin::getAuthenticationService() D:\xampp\htdocs\bctest\vendor\baserproject\baser-core\src\BaserCorePlugin.php, line 375
Authentication\Middleware\AuthenticationMiddleware::getAuthenticationService() D:\xampp\htdocs\bctest\vendor\cakephp\authentication\src\Middleware\AuthenticationMiddleware.php, line 154
Authentication\Middleware\AuthenticationMiddleware::process() D:\xampp\htdocs\bctest\vendor\cakephp\authentication\src\Middleware\AuthenticationMiddleware.php, line 102
Cake\Http\Runner::handle() D:\xampp\htdocs\bctest\vendor\cakephp\cakephp\src\Http\Runner.php, line 82
Cake\Http\Middleware\BodyParserMiddleware::process() D:\xampp\htdocs\bctest\vendor\cakephp\cakephp\src\Http\Middleware\BodyParserMiddleware.php, line 157
Cake\Http\Runner::handle() D:\xampp\htdocs\bctest\vendor\cakephp\cakephp\src\Http\Runner.php, line 82
Cake\Routing\Middleware\RoutingMiddleware::process() D:\xampp\htdocs\bctest\vendor\cakephp\cakephp\src\Routing\Middleware\RoutingMiddleware.php, line 187
Cake\Http\Runner::handle() D:\xampp\htdocs\bctest\vendor\cakephp\cakephp\src\Http\Runner.php, line 82
BaserCore\Middleware\BcRequestFilterMiddleware::process() D:\xampp\htdocs\bctest\vendor\baserproject\baser-core\src\Middleware\BcRequestFilterMiddleware.php, line 73
Cake\Http\Runner::handle() D:\xampp\htdocs\bctest\vendor\cakephp\cakephp\src\Http\Runner.php, line 82
Cake\Routing\Middleware\AssetMiddleware::process() D:\xampp\htdocs\bctest\vendor\cakephp\cakephp\src\Routing\Middleware\AssetMiddleware.php, line 77
Cake\Http\Runner::handle() D:\xampp\htdocs\bctest\vendor\cakephp\cakephp\src\Http\Runner.php, line 82
Cake\Error\Middleware\ErrorHandlerMiddleware::process() D:\xampp\htdocs\bctest\vendor\cakephp\cakephp\src\Error\Middleware\ErrorHandlerMiddleware.php, line 131
Cake\Http\Runner::handle() D:\xampp\htdocs\bctest\vendor\cakephp\cakephp\src\Http\Runner.php, line 82
Cake\Http\Runner::run() D:\xampp\htdocs\bctest\vendor\cakephp\cakephp\src\Http\Runner.php, line 67
Cake\Http\Server::run() D:\xampp\htdocs\bctest\vendor\cakephp\cakephp\src\Http\Server.php, line 90
[main] D:\xampp\htdocs\bctest\webroot\index.php, line 42

@ciao-h 情報ありがとうございます。
ログが出力されていないという事は、該当箇所を処理が通っていないということで、原因が絞り込めました。
再度、調整してみましたので確認してもらえますでしょうか?

※ 頂いたログは全く別の処理のログでした

「いいね!」 1

@ryuring さん 対応ありがとうございます。
送ったエラーは関係なかったのですね
以前のPluginsService.phpと今回のBcZip.phpを差し替えて、
「Banner-5.0.0.zip」をアップロードしたところ、解凍されたフォルダがtmpに残らず、pluginsフォルダに移動し、問題なくプラグイン一覧に表示されました。
他のプラグイン(「BlogTagGroup-5.0.0.zip」「BurgerEditorLE.zip」「SitemapXml-5.0.0.zip」)も試したところ問題ありませんでした。
解決済みとさせていただきます。

「いいね!」 1