エス技研

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のFrozenDateで1ヵ月前、先月、今月1日、来月末の日付などを算出する方法
CakePHP4のcake cache clear_allでPermission deniedはパーミッションの変更が必要
CakePHP4のクリエビルダーを使用してOR条件をAND条件でつなぐSQL文を作る方法
CakePHP4のController内でViewテンプレート、レイアウトの変更設定を記述する方法
CakePHP4から外部のデータベースにアクセスする方法解説
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
CakePHP4でロギングスコープやログレベルを使用してログを出し分ける方法を解説
CakePHP2、CakePHP3、CakePHP4、CakePHP5のバージョンを調べる 2つの方法
Windows上のXAMPP環境のCakePHPのコマンド実行時に環境変数を指定する方法
CakePHP4で複数の引数(パラメータ)を付与してコマンドを実行する方法
 
その他の「CakePHP4」に関する記事一覧
 
 

 - CakePHP 3.x 4.x

GoogleAdwords

GoogleAdwords

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

Message

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

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

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

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

  関連記事

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

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

CakePHP3のForm Helperの使い方のまとめ

CakePHP3になりフォームヘルパーの使い方も大きく変わりましたので、使い方をまとめました。基本的な使い方からプラスアルファの便利な使い方まで紹介。

CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールする
CakePHP4のCSS、JavaScript、画像のブラウザへのキャッシュをコントロールする

CakePHP4、CakePHP3でブラウザにキャッシュさせる設定の解説。CSS、JavaScript、画像をブラウザにキャッシュさせるのか、定期的にリロードする設定にするのかの設定が可能。

CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない
CakePHP4の数値項目は「like %10%」の部分一致検索(find select)はできない

CakePHP4でテーブルの数値項目に対してlike句を使用した部分一致検索を実行するとエラーが発生する。クリエービルダーの不具合だと思われ対処方法が分からない。

CakePHP4のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説
CakePHP4のユーザ管理・ログイン認証プラグインCakeDC/Usersのインストール解説

CakePHP4のユーザ管理プラグイン Usersは、ユーザ登録、メール認証、ログイン認証、ユーザ管理、権限管理、reCAPTCHAなど会員制のサイトを簡単に実現可能。その導入方法、カスタマイズ方法を解説。

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

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

CakePHP3でDocumentRootやwebroot、imgフォルダのURLやドメイン、パスを取得
CakePHP3でDocumentRootやwebroot、imgフォルダのURLやドメイン、パスを取得

URLやドメイン、フォルダへのパスの取得は、ビューではUrlHelperを使い、コントローラーではRouterクラスを使います。第2引数の指定でURLを取得することも可能。

CakePHP3でレコードを追加、更新(Insert、Update)する複数の方法を紹介
CakePHP3でレコードを保存(追加、更新、Insert、Update)する複数の方法を紹介

CakePHP3でレコードを追加、更新(Insert、Update)する記述方法を解説。1件ずつ処理、全件をまとめて処理、条件に該当する複数件のレコードを処理方法をサンプルコードを用いて解説。

CakePHP3のCakeDC/Usersでログインユーザの所有レコードのみ更新、削除する権限管理の設定方法
CakePHP3のCakeDC/Usersでログインユーザの所有レコードのみ更新、削除する権限管理の設定方法

CakePHP3のユーザ管理、ログイン認証プラグイン「CakeDC/Users」の権限管理を行う方法やアクセスできるコントローラー、アクションを設定、所有権を持つレコードのみ更新できる設定方法を解説。

CakePHP4で定数の設定と呼び出し方法の解説(defineとConfigure)
CakePHP4で定数の設定と呼び出し方法の解説(defineとConfigure)

CakePHP4で定数を設定、使用する方法を解説。定数定義はdefineとConfigureを使用する方法を解説。また、bootstrap.phpに直接記述する方法と別のファイルにする方法を解説。