55495


## 前提・実現したいこと

PHP初学者です。  
cakephpを使ってアプリを作成しようとしています。  
下記の記事を参考に仮想環境に開発環境を構築しようとしています。

参考記事：  
[VagrantでLAMP環境構築 + Cakephp3.6 -
Qiita](https://qiita.com/kenta0629/items/574251c140387779b681)

参考記事の手順8)まで行いローカルサーバーへアクセスすると以下のようなエラーが表示されました。

## 発生している問題・メッセージ

[code]

    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) [<a href='https://secure.php.net/function.file-put-contents'>function.file-put-contents</a>]: failed to open stream: Permission denied [CORE/src/Log/Engine/FileLog.php, line 133]
    
[/code]

## 該当のソースコード

ログに表示されたファイルの133行目あたりを確認すると下記のようなコードの記述がありました。

[code]

    $pathname = $this->_path . $filename;
    $mask = $this->_config['mask'];
    
    if (!$mask) {
        return file_put_contents($pathname, $output, FILE_APPEND);
    }
    
[/code]

## 試したこと

他のサイトでも質問したところ回答をいただくことができたので下記を実行しましたが、  
再度アクセスしてもエラー状況が全く一緒のままでした。

① config/app.php 内の Datasources で、quoteIdentifiers に true を設定  
② `chmod 777 /vagrant/test2/logs` でlogsディレクトリへの書き込みを許可

②についてですが、実行前後で`ls -l`でパーミッションを確認したところいずれも以下のように表示されたので、設定が上手く行ってないのかなと考えています。

[code]

    drwxr-xr-x 1 vagrant vagrant 96 12月 24 17:43 logs
    
[/code]

## 質問内容

①「発生している問題・メッセージ」欄で記載しているエラーの解消方法を教えていただきたいです。  
②パーミッションの設定方法について正しい方法を教えていただきたいです。

何卒よろしくお願いいたします。


CC BY-SA 4.0
2019-06-03T07:07:17.400
55476
2019-06-04T01:46:12.633
2019-06-03T07:49:38.327
3060
34569
question
php mysql apache cakephp vagrant
cakephpを立ち上げようとするとError: SQLSTATE[HY000] [14]


`SQLSTATE[HY000] [14] unable to open database file` は SQLite のエラーかなと思います。  
DebugKitというプラグインが `APP/tmp/` (APP=アプリケーションディレクトリ)
にSQLiteのデータベースを作成するのですが、tmpディレクトリの書き込み権限がない場合エラーとなりますので、こちらもパーミッションの問題でしょう。

パーミッションについてですが、Vagrantではホストからマウントする共有ディレクトリのパーミッションは `Vagrantfile` で設定します。  
Vagrantfile ファイル内に以下のような行があるか確認してください。

[code]

    config.vm.synced_folder ".", "/vagrant", owner: 'vagrant', group: 'vagrant', mount_options: ['dmode=777', 'fmode=666']
    
[/code]

mount_options の dmodeがディレクトリのパーミッション、fmodeがファイルのパーミッションとなります。

参考: Basic Usage - Synced Folders - Vagrant by HashiCorp  
<https://www.vagrantup.com/docs/synced-folders/basic_usage.html>


CC BY-SA 4.0
2019-06-04T01:46:12.633
55495
2019-06-04T01:46:12.633
2668
55476
answer