質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

Q&A

解決済

1回答

6429閲覧

cakephpを立ち上げようとするとError: SQLSTATE[HY000] [14]

GenkiSugiyama

総合スコア86

MySQL

MySQL(マイエスキューエル)は、TCX DataKonsultAB社などが開発するRDBMS(リレーショナルデータベースの管理システム)です。世界で最も人気の高いシステムで、オープンソースで開発されています。MySQLデータベースサーバは、高速性と信頼性があり、Linux、UNIX、Windowsなどの複数のプラットフォームで動作することができます。

Apache

Apacheは、Apache HTTP Serverの略で、最も人気の高いWebサーバソフトウェアの一つです。安定性が高いオープンソースソフトウェアとして商用サイトから自宅サーバまで、多くのプラットフォーム向けに開発・配布されています。サーバーソフトウェアの不具合(NCSA httpd)を修正するパッチ(a patch)を集積、一つ独立したソフトウェアとして開発されました。

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

CakePHP

CakePHPは、PHPで書かれたWebアプリケーション開発用のフレームワークです。 Ruby on Railsの考え方を多く取り入れており、Railsの高速性とPHPの機動性を兼ね備えています。 MVCやORMなどを「規約優先の考え方」で利用するため、コードを書く手間を省くことができます。 外部のライブラリに依存しないので、単体での利用が可能です。

Vagrant

Vagrantは、VirtualBox上の仮想マシンを コマンドラインから作成してくれるソフトウェアです。 ビルド環境など容易に構築が可能です。

0グッド

0クリップ

投稿2019/06/03 05:14

前提・実現したいこと

ここに質問の内容を詳しく書いてください。
PHP初学者です。
cakephpを使ってアプリを作成しようとしています。
下記の記事を参考に仮想環境に開発環境を構築しようとしています。
(参考記事:https://qiita.com/kenta0629/items/574251c140387779b681)

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

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

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]

該当のソースコード

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

FileLog.php

1$pathname = $this->_path . $filename; 2 $mask = $this->_config['mask']; 3 if (!$mask) { 4 return file_put_contents($pathname, $output, FILE_APPEND); 5 }

試したこと

解決法を探していると下記のリンクに似たような質問事項を見つけました。
(類似質問事項:https://teratail.com/questions/155786)

上記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

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

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

まずこのエラーは「二つ」のエラーが並んでいます。

一つ目

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]

ですので、二つのエラーをそれぞれ別個に対処しなくてはなりません。
一つ目はデータベースファイルがオープンできない、といっているのですが、補足として
「もし SQL キーワードをそのままテーブルのカラム名に使ってたりするなら、クオートで囲むように config/app.php の中にある設定を変更してください」と言っています。
※これは config/app.php 内の Datasources で、quoteIdentifiers に true を設定しろ、ということです。参考

二つ目は、一つ目で出たエラーをエラーログファイルに書こうとしたが書けなかった、という警告です。
※つまり一つ目のエラーが出ていなければそもそも出ない
これは環境の話なので、chmod 関数をソースに書くのではなく、環境をあらかじめ変更しておく必要があります。
具体的には /vagrant/test2/logs/error.log に書き込めるように、/vagrant/test2/logs のディレクトリに対して、実行ユーザーによる書き込みを許可する指定をする必要があります。

投稿2019/06/03 05:24

tacsheaven

総合スコア13703

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

GenkiSugiyama

2019/06/03 06:43

早速ご回答いただきありがとうございます。 別々のエラーが2つ表示されていたのですね、、、ご丁寧に分けて解説いただき大変助かります。 ご指摘いただいた通りまず、app.phpファイル内のquoteIdentifiersをtrueに変更しました。 -app.php内 'Datasources' => [ 'default' => [     ・・・ /** * Set identifier quoting to true if you are using reserved words or * special characters in your table or column names. Enabling this * setting will result in queries built using the Query Builder having * identifiers quoted when creating SQL. It should be noted that this * decreases performance because each query needs to be traversed and * manipulated before being executed. */ 'quoteIdentifiers' => true, ←もともとfalseでした。     ・・・ さらに/vagrant/test2/logsへの書き込みを許可するためにターミナル上で ~$ chmod 777 /vagrant/test2/logs を実行しました。 その状態で再度アクセスし直しましたが、エラー情報が全く変わらずのまま表示されてしまいました。 DBに関するエラーが解消されていない理由としては何が考えられるでしょうか? また、ディレクトリへの書き込み許可を与えるコマンドも実行する前後で「ls -l」を使って確認したのですが 変化がありませんでした。こちらも設定方法として間違っているのでしょうか? 恐れ入りますが再度ご確認いただけると大変助かります。 よろしくお願いいたします。
tacsheaven

2019/06/03 09:47

クオートを付けても変わらないとすれば、そもそも Datasource が間違っている可能性もあります。 接続するデータベースは正しく設定されていますか? ディレクトリについては、vagrant を使っている状態なので、vagrant のユーザーで書き込み可能かどうか、が問題になります。通常 test2/logs は 0755 (所有ユーザーのみ書き込み可能、他は読み取りのみ可能)としているでしょうが、これで駄目なようであれば 0777(どのユーザでも書き込み可能)にして動かしてみるのも一つの手です。
GenkiSugiyama

2019/06/06 01:22

日を改めてオフラインで相談できる方に画面を見てもらった結果、質問内容に記載できていなかったエラーメッセージからSQLite周りのエラーと判断いただきました。 (MySQLに接続させようとしていたのにappのドライバーがSQLiteになってたようです、、、) エラーの読み込みが甘く、トンチンカンな質問になってしまいすみませんでした。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問