他のサーバからcakePHPデータを移動したときにやること

cakephpで作ったデータを移動させるときに行うことメモです。

パーミッションの変更

$ cd www
$ chmod -R 777 lib/Cake/Cache/
$ cd app
$ chmod -R 777 tmp/

データベース連携

$ chmod 775 Console/cake
$ Console/cake bake

レイアウトが崩れたらやること

$ chmod -R 777 webroot/css/
$ rm tmp/cache/_admin.less.cache

php省略形許可

時々、

<?php ?>

<? ?><?= ?>

にしていて、エラーが出ることがあります。に直した方がいいのですが、サーバとして省略形を可能にする方法もあります。
管理者権限で

# vi /etc/php.ini 

211行目をコメントアウト
f:id:harucharuru:20200320105945p:plain
サーバ再起動

# systemctl restart httpd.service 

で可能です。

参考サイト
PHP省略タグについて - 新しい日記
もういい加減覚えよう。php.iniはどこにあるのか - Qiita

Alexaとお友達になりたい①食事管理アプリ作成

Google Homeの次はアレクサです。

準備

Amazon開発者ポータルにアクセス
f:id:harucharuru:20200309113045p:plain

Alexaを選択。Alexaスキルの開発を始めるをクリック。
f:id:harucharuru:20200309113111p:plain

アカウントを持っていたらログイン、持っていなかったらAmazon開発者ポータルへの登録し、ログイン。

スキル開発準備

機能やアプリケーションをスキルと言っています。そこで新しいスキルを作成していきます。
f:id:harucharuru:20200309113502p:plain

今回は食事管理アプリを自由に作成していきたいので
スキル名:食事管理
言語:日本語
スキルに追加するモデルを選択:カスタム
スキルのバックエンドリソースをホスティングする方法を選択:Alexahostを利用します。
f:id:harucharuru:20200309113717p:plain

スキルに追加するテンプレートを選択では、cake wallを選択しました。
今回、DBとの連携を行いたいと考えているので。。。
f:id:harucharuru:20200311203404p:plain

f:id:harucharuru:20200311203433p:plain
こんな感じの画面が出てきました。
f:id:harucharuru:20200311203735p:plain

スキル開発

呼び出し名の設定

呼び出し名の設定は、呼び出し名 で変更できます。変更後は必ず[モデルをビルド]を押しましょう。
f:id:harucharuru:20200311203953p:plain

Alexシミュレータでの現状確認

メニューバーのテストを選択し、開いたページから非公開を開発中にします。これで、シミュレータでの現状確認ができます。
f:id:harucharuru:20200311204150p:plain

このように出てくればOK
f:id:harucharuru:20200311204348p:plain

初めと終わり、どんなことができるか聞かれた時の文章を日本語に変更

現在、シミュレータでの動作でも確認できたように、アレクサは英語で返答するようになっています。
そこをコードエディタから日本語に変更していきます。
f:id:harucharuru:20200311204913p:plain

初め

スキルが始まった時に動作するのが、LaunchRequestHandlerです。
以下のように変更しました。
f:id:harucharuru:20200311205343p:plain

どんなことができるのか?

どんなことができるのか聞かれた時に動作するのが、HelpIntentHandlerです。以下のように変更しました。
f:id:harucharuru:20200311205429p:plain

最後

終わる時に時に動作するのが、CancelOrStopIntentHandlerです。以下のように変更しました。
f:id:harucharuru:20200311205554p:plain

聞き取れなかった時

聞き取れなかった時に動作するのが、CatchAllExceptionHandlerです。以下のように変更しました。
f:id:harucharuru:20200311205718p:plain

以上の変更を保存して、もう一度シミュレータで試してみます。
日本語になりました。
f:id:harucharuru:20200311210014p:plain

Google Homeとお友達になりたい②おうむ返し会話作成

前回からの続きです。

会話イメージ

どんな会話にするか、イメージします。G:Google、P:人間とすると、
P:OKGoogle、おうむ返しにつないで
G:こんにちは。何か話してくれれば、そのままお返しします。
P:こんにちは
G:こんにちは ですね。
P:東京のど真ん中
G:東京のど真ん中 ですね。
P:もう終わりです。
G:また何かあったらお話ししてください。

ひどい、面白みのないアプリですね。まず、テストなのでいいでしょう。

会話の作成

初めの文章を設定

アプリを開いた時に初めに言われる文章(今回でいうと「G:こんにちは。何か話してくれれば、そのままお返しします。」)を設定します。
intentを追加します。そして、responsesをクリック
f:id:harucharuru:20200308163310p:plain

そして、初めの文章を入力してSave
f:id:harucharuru:20200308163536p:plain

最後の文章を設定

最後の文章もついでに設定していきます。intent追加から・・・
どんな文章が来たら終わるかtraining phrasesに入力
f:id:harucharuru:20200308165820p:plain
そして、どんな文章を返すか入力
f:id:harucharuru:20200308163632p:plain

おうむ返し設定

聞き取る内容の設定

次におうむ返しする部分を作成していきます。intentを追加
training phrasesに、聞き取る内容を入れていきます。すると、パラメータが自動判別され表示されたりします。
f:id:harucharuru:20200308164130p:plain

今回聞き取った内容をパラメータ@sys.any(任意の単語というパラメータ)とし、パラメータ名をwordにします。
f:id:harucharuru:20200308164547p:plain

聞き取った内容への返答の設定

ここでは返答する文章を入れていきます。$パラメータ名 で聞き取った内容にして返答します。
f:id:harucharuru:20200308164711p:plain

確認

try it nowの部分で入力してみましょう。Diagnostic infoを見ると、詳しい内容が表示されます。
f:id:harucharuru:20200308165159p:plain


See how it works in Google Assistant. を選択すると、より詳しく見えます。こっちの方がいいかもしれません。
f:id:harucharuru:20200308165929p:plain

できました。

Google Homeとお友達になりたい①おうむ返しするアプリ作成

Google Homeとお友達になり、いろんなアプリケーションを作りたいと思い、書きます。
他人に向けてではなく、本当に個人的なメモですのでご了承ください。

アプリケーションを登録:Google Assistant にアクセス

Google Assistant  |  Google Developersにアクセスして、右上のGo to Actions Consoleを選択。
これでアプリケーションを登録していきます。
f:id:harucharuru:20200308144529p:plain

Newprojectを選択
f:id:harucharuru:20200308144626p:plain

同意確認を聞いてきますので、Yes/No判断して選択
f:id:harucharuru:20200308144705p:plain

プロジェクト名(今回はReturnWord)、使用する言語・場所を入力
f:id:harucharuru:20200308144812p:plain

どのカテゴリに当てはまるか選択します。今回は遊びなので、Games&funを選択しました
f:id:harucharuru:20200308144917p:plain

どの方式か聞いてきたので、会話型を選択
f:id:harucharuru:20200308145208p:plain


プロジェクトが作成されました。quicksetupのところを選択します。
f:id:harucharuru:20200308145253p:plain

ディスプレイ表示名とどの声で話しかけるか聞いてきます。
私は、おうむ返し、声は女性1にしました。(なんとなく)そして、Save
f:id:harucharuru:20200308145419p:plain

Action作成

Action作を選択。GetStartをクリック
f:id:harucharuru:20200308145500p:plain

作り方を聞いてきますので、今回はcustom intentにしました。で、Bild
f:id:harucharuru:20200308145601p:plain

Dialogflowアカウント認証・連携がありますので、許可します。
f:id:harucharuru:20200308145711p:plain

Please review your account settingsが開かれますので、選択してaccept
f:id:harucharuru:20200308145842p:plain

こんな画面が表示されたらログインします。
f:id:harucharuru:20200308145936p:plain

ログインされたら、言語を日本語にしてcreate
f:id:harucharuru:20200308150046p:plain

intentを追加する画面が出てきたらOKです。
f:id:harucharuru:20200308150152p:plain


長くなってしまったので、今回はここで終了。

cakephp SQLでデータをfindする方法

自分用メモです。

こんなSQLcakePHPで実行して、データを取りたいときは

SELECT Q.facility_id as qfid, S.facility_id as sfid  FROM questions Q, questioninstitutions S WHERE Q.id = S.question_id
$sql = 'SELECT Q.facility_id as qfid, S.facility_id as sfid  FROM questions Q, questioninstitutions S WHERE Q.id = S.question_id';
$query = $this->Question->query($sql);

つまり、

$query = $this->モデル->query('******SQLコマンド******');

で取得できます。


参考サイト
【CakePHP】直接SQL(クエリ)を実行する | POPOTOO
【CakePHP入門】テーブルを結合(JOIN)して検索する方法 | 侍エンジニア塾ブログ(Samurai Blog) - プログラミング入門者向けサイト
[SQL] 9. ビュー 1 | TECHSCORE(テックスコア)
CakePHP2でModel->find()でjoinsを使ってみた · GitHub

サーバを立ち上げてからの手順④cakePHPの導入

cakePHPの導入方法について

cakePHP導入

cakePHP 2.8.6をダウンロード、展開
展開フォルダを公開ディレクトリ名にリネイム

インストール

$ wget https://github.com/cakephp/cakephp/archive/2.8.6.tar.gz
$ tar xzvf 2.8.6.tar.gz
$ mv cakephp-2.8.6/ www
$ cd www

cakePHP設定

パーミッションの変更とセキュリティソルト変更

$ chmod -R 777 lib/Cake/Cache/
$ cd app
$ chmod -R 777 tmp/
$ vi Config/core.php

228行目、233行目の文字列を変更する
f:id:harucharuru:20200226161417p:plain

アクセスして、以下のようなページが出ればOK
f:id:harucharuru:20200226161552p:plain

データベース接続

$ Console/cake bake

聞かれたことに対して答えていく

---------------------------------------------------------------
Database Configuration:
---------------------------------------------------------------
Name:  
[default] > 
Datasource: (Mysql/Postgres/Sqlite/Sqlserver) 
[Mysql] > 
Persistent Connection? (y/n) 
[n] > 
Database Host:  
[localhost] > 
Port?  
[n] > 
User:  
[root] > ユーザ名
Password:  
> パスワード
Database Name:  
[cake] > データベース名
Table Prefix?  
[n] > 
Table encoding?  
[n] > 文字エンコーディング(例:utf8)

で、サイトを見たら、以下のようになればOK
f:id:harucharuru:20200226161901p:plain

[参考]timezoneの変更

サイトを見たときに
Warning: strtotime(): It is not safe to rely on the system's timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those methods and you are still getting this warning, you most likely misspelled the timezone identifier. We selected the t....
と言ったwarningが出ていますが、これを解消するためには以下の方法を行います。
管理者権限でログインした状態で、

# vi /etc/php.ini 

878行目のtimezoneの部分のコメントアウトを外して、Asia/Tokyoと入力
f:id:harucharuru:20200226162157p:plain

webサーバを再起動

# systemctl restart httpd.service


すると、サイトの方のwarningが消えました。
f:id:harucharuru:20200226162327p:plain

サーバを立ち上げてからの手順③DB編

サーバを立ち上げてからの手順、DB編です

DB環境のインストール

リポジトリの利用

CentOS7のデフォルトDBはMariaDBですが、MySQLを利用していきます。

# yum -y install http://dev.mysql.com/get/mysql-community-release-el7-5.noarch.rpm

MySQLの利用

# yum install mysql-server

何か聞かれたら、基本的に全てyes

起動、自動起動設定

# systemctl start mysqld.service
# systemctl enable mysqld.service

phpMyAdminの利用

phpMyAdminの利用します。

リポジトリepel
# yum install epel-release

phpMyAdminのインストール

# yum --enablerepo=epel install phpMyAdmin php-mysql php-mcrypt

あとは、以下のサイトを参考に・・・
Cloud Computing System.lab: CentOS7 phpMyAdminのインストール

ユーザ作成

phpMyAdminでのユーザ作成
phpMyAdminでログイン後、User->Add user
f:id:harucharuru:20200226160633p:plain