エス技研

WordPress、CakePHP、PHP、baserCMSなどの Web系システムを中心に情報を提供します!


CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要

      2024/09/08

CakePHP4の cake cache clear_allで Permission deniedのエラーの時は cakeにパーミッションが不足している可能性大

 

パーミッション不足はキャッシュファイルではなくcakeコマンドの方

 
CakePHP4でキャッシュをクリアする「cake cache clear_all」コマンドを実行したとき、「-bash: bin/cake: Permission denied」のエラーが出るときは、「cake」にパーミッションが与えられていないために発生します。
 
このエラーが出たとき、コマンドを実行して削除するキャッシュファイルの方にパーミッションが正しく設定されていないのかと思っていましたが、そうではなく、「/bin/cake」のコマンドプログラムの方にパーミッションが足りていない状況でした。
 
 

「/bin/cake」に実行権限を付与する

 
というわけで、原因が分かれば対応は簡単です。
 
下記コマンドを実行して、「/bin/cake」に実行権限を付与します。
 

 
「cake」ファイルまでのパスや、「744」で指定しているパーミッションは、環境に応じて変更してください。
「744」のパーミッションは、ユーザのグループ設定の影響もありますので、「754」にする必要がある場合もあるかもしれません。
 
 
ちなみに、「cake cache clear_all」コマンドについては下記に記事を書いていますので、併せて参照してください。
CakePHP3、CakePHP4のキャッシュをクリアする方法「bin/cake cache clear_all」を使う
 
 

「/bin/cake」に実行権限が付与されない理由の一つ

 
何で「/bin/cake」に実行権限が付与されないのだろうか、と悩んでいました。
これまでそんな不具合なかったのになぁ、と。
 
この記事を読んでいる方、XAMPP環境で開発を行っていませんか?
そして、Linux系の本番環境にプログラムを移動させてからこの不具合が発生していませんか?
 
私は XAMPP環境で構築したプログラムを、そのまま Linux環境にアップロードしました。
そしたら、そこで発生するようになりました。
 
 
最初に、Linux環境で構築した CakePHPの「/bin/cake」には実行権限が付与されていたのではないか、と思います。
そこに、Windows上に構築した XAMPP環境で構築した CakePHPを Gitを経由して上書きしたのですが、Windows環境の「/bin/cake」には実行権限という概念がなく、一般的なファイルとしてそのまま上書きされたのだろうと思います。
 
そのため、「cakeコマンド」を実行しようとしたところ権限がないですよ、というエラーになったのだと考えています。
 
 

キャッシュファイルのパーミッションを設定する

 
前項で「/bin/cake」コマンドのキャッシュ設定について説明しましたが、それだけでは記事が短いので、キャッシュファイルのパーミッションを設定する方法も解説します。
 
 
CakePHP4のキャッシュファイルの設定は「/config/app.php」ファイルに記述されています。
 
バージョンなどによって多少違うと思いますが、97行目辺りに「'Cache' => [」という記述があるかと思います。
この辺りからキャッシュについての設定が記述されています。
 
これに対して、8行目の「'mask' => 0664,」を追記します。
 

 
上記は「_cake_core_」のキャッシュについての設定になりますが、同様の対応を「_cake_model_」「_cake_routes_」の設定情報にも追記します。
 
 
場合によっては 7行目の最後に「,(カンマ)」がない場合もあるかもしれませんので、ない場合はカンマも追記してください。
 
また、上記の設定では、キャッシュファイルのパーミッションを「664」にする設定にしていますが、環境によっては「666」の方がいい場合もあると思います。
 
 
今回の解説は、キャッシュについてでしたが、ログの出力方法、および、ログファイルのパーミッションなどの設定方法もキャッシュとよく似ています。
ログについては下記にまとめていますので、併せて参考にしてください。
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説
 
 

CakePHP4の関連記事

CakePHP4系でJSONレスポンスの処理ではwithStringBodyを使う。3との違い解説
CakePHP4、CakePHP5の「warning: DebugKit is disabling...」の対処方法
MySQL+CakePHPのdate型、datetime型項目は「2999-12-31」までしか扱えない
CakePHP4のFrozenDateで1ヵ月前、先月、今月1日、来月末の日付などを算出する方法
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4のクリエビルダーを使用してOR条件をAND条件でつなぐSQL文を作る方法
CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法
CakePHP4から外部のデータベースにアクセスする方法解説
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説
 
その他の「CakePHP4」に関する記事一覧
 
 

 - CakePHP 3.x 4.x 5.x

GoogleAdwords

GoogleAdwords

最後までお読みいただきましてありがとうございます。
この記事が参考になったと思いましたらソーシャルメディアで共有していただけると嬉しいです!

Message

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

下記の空欄を埋めてください。 * Time limit is exhausted. Please reload CAPTCHA.

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)

※入力いただいたコメントは管理者の承認後に掲載されます。

  関連記事

CakePHPのFlashエラーは出るが入力項目ごとのメッセージが出ないエラーの原因
CakePHPのFlashエラーは出るが入力項目ごとのメッセージが出ないエラーの原因

Bakeして自動生成した入力フォーム処理を元に少し処理を追加したら、入力エラーがあってもエラーメッセージが表示されなくなった。原因はリダイレクトの処理にあった。

CakePHP4、CakePHP5系の認証処理でログインの有無の確認、ユーザ情報の取得の方法
CakePHP4、CakePHP5系の認証処理でログインの有無の確認、ユーザ情報の取得の方法

CakePHP4系、5系のログイン認証の可否のチェック、および、ログインユーザの情報を取得する方法のまとめ。複数の方法があるが手続きが微妙に異なるためまとめてみた。

CakePHP 2.3で saveの便利な使い方・サンプルソース付き

CakePHPのレコードを保存、更新する際に使う Saveを詳細解説します。

CakePHP 2.3でファイルのアップロード処理を作る

CakePHPでプラグインを使わないファイルアップロード処理を解説します。簡単です。DBにファイルを格納する方法も。

CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説
CakePHP3でモデルなしフォームからCSVをアップロードしレコードを更新する方法解説

CakePHP3でCSVファイルをアップロードしレコードを追加、更新する処理の作成方法の解説。モデルとは直接関連しないフォームからCSVファイルをアップロードするため汎用的に使用可能。

CakePHP3のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)
CakePHP3のメッセージ日本語化の設定(国際化と地域化の機能の使い方の解説)

CakePHP3の英語のメッセージを日本語化(多言語化)する手順を解説。オリジナルのメッセージを作成する方法やプログラムで文言を追加する場合の対応なども解説。

CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説
CakePHP3にOGPをfetch、asignを利用してテンプレートごとに指定する方法を解説

CakePHP3でOGPを設定する方法を解説。fetch、assignを使用しレイアウトファイルに編集した変数にテンプレートファイルから値を指定する。これを利用してOGPを編集する。

CakePHP3のバージョンを指定してインストールする詳細な手順を解説
CakePHP3、CakePHP4、CakePHP5のバージョンを指定してインストールする詳細な手順を解説

CakePHP3のバージョンを指定してインストールする方法を詳細解説。CakePHP3のインストールはComposerを使うため設定もほぼ自動で完了。データベースの接続情報を記載すればアプリ開発のベースが整う。

CakePHP3の更新画面でUpload Plugin 3.0を使う方法、viewで使う方法解説・その3
CakePHP3の更新画面でUpload Plugin 3.0を使う方法、viewで使う方法解説・その3

CakePHP3でファイル、画像をアップロードするプラグイン、upload plugin 3を導入する手順を解説した記事。3部作のその3で記事を更新する際のファイルの取り回しなどについてを解説。

CakePHP4のフラッシュメッセージの表示場所、デザインを変更する方法を解説
CakePHP4のフラッシュメッセージの表示場所、デザインを変更する方法を解説

CakePHP4のエラーメッセージ、完了メッセージなどを表示するフラッシュ処理の解説。Controller、レイアウトファイル、テンプレートファイルでそれぞれ処理を指定する。