質問: $this->_config['mask']; if (!$mask) { return file_put_contents($pathname, $output, FILE_APPEND); } ``` ### 試したこと 解決法を探していると下記のリンクに似たような質問事項を見つけました。 (類似質問事項:) 上記URL内のやりとりによると、上記コード(return file_put_contents($pathname, $output, FILE_APPEND);)によるファイルの書き込み?がパーミッションエラーなのかなと判断しています。 また、回答に貼られているリンクを読むとパーミッションの変更にはchmod関数で行うとあり、今回のエラー解消にも これが使えるのではと考えているのですが、chmod関数を配置する場所がわからず止まっています。 ### 質問内容 ・現在自分が解決方法と考えている上記chmod関数の正しい使い方をご教示いただきたいです。 ・他に解決方法となるかもしれないという方法があれば記載いただきたいです。 ### 補足情報(FW/ツールのバージョンなど) mysql Ver 14.14 Distrib 5.6.44 Apache/2.4.6 (CentOS) PHP 5.6.40 よろしくお願いいたします。
回答: まずこのエラーは「二つ」のエラーが並んでいます。 一つ目 ``` Error: SQLSTATE[HY000] [14] unable to open database file If you are using SQL keywords as table column names, you can enable identifier quoting for your database connection in config/app.php. ``` 二つ目 ``` Warning(2):file_put_contents(/vagrant/test2/logs/error.log) [function.file-put-contents]: failed to open stream: Permission denied [CORE/src/Log/Engine/FileLog.php, line 133] ``` ですので、二つのエラーをそれぞれ別個に対処しなくてはなりません。 一つ目はデータベースファイルがオープンできない、といっているのですが、補足として 「もし SQL キーワードをそのままテーブルのカラム名に使ってたりするなら、クオートで囲むように config/app.php の中にある設定を変更してください」と言っています。 ※これは config/app.php 内の Datasources で、quoteIdentifiers に true を設定しろ、ということです。参考 二つ目は、一つ目で出たエラーをエラーログファイルに書こうとしたが書けなかった、という警告です。 ※つまり一つ目のエラーが出ていなければそもそも出ない これは**環境**の話なので、chmod 関数をソースに書く**のではなく**、環境をあらかじめ変更しておく必要があります。 具体的には /vagrant/test2/logs/error.log に書き込めるように、/vagrant/test2/logs のディレクトリに対して、実行ユーザーによる書き込みを許可する指定をする必要があります。