CakePHP2 – Pingサーバを構築してブログの更新通知を受け取る

XML-RPCという仕組みが使われていて、大体weblogUpdates.extendedPingか、weblogUpdates.pingというメソッド名が使われる。IXR_Library.phpというライブラリがあるのでこれを使って作る。飛んでくる情報の最小単位はブログ名とブログURLなので、ブログURLからRSSのURLを取得して、RSSから最新記事のURLとタイトルを取得する。WordPressがweblogUpdates.extendedPingで、アメブロとライブドアが、weblogUpdates.pingだった。wordpressは、array(ブログ名、ブログURL、RSS_URL)できた。RSS URLを取得するのにphpQuery使おうと思ったけど、どうもライブドアだとエラーになるから使うのやめた。あとアメブロのRSSは、新規投稿が1分後くらいにしか反映されないから、CRONで5分後に再チェックするようにした。

参考:
更新Pingの送信
Pingを送信する!
Google ブログ検索の更新通知 API について
CakePHP + 更新Ping送信で更新情報サービスを利用する方法
IXRライブラリの使い方
utils/Model/Behavior/PingbackableBehavior.php
How-to-create-an-XML-RPC-server-with-CakePHP.rst
CakePHP-Wordpress-Datasource/Vendor/IXR_Library.php
[42-3] link rel=”alternate” で他言語サイトやモバイル版へ導こう

CakePHP2 – RSS取得

https://book.cakephp.org/2.0/ja/core-utility-libraries/xml.html

CakePHP2 – phpQueryを使う

phpQuery
Github:TobiaszCudnik/phpquery
Composer対応したやつ:zomberg/phpquery

使い方

CakePHP3 – Log出力にMonologを使う

Seldaek/monolog

$ composer require monolog/monolog

bootstrap.phpに下記を追加

config/logger.phpに下記を追加

こんな感じで使える。Slackとかに飛ばしたりしたいというときに役立ちそう。

cakeの標準機能でログ出力の調整をする場合は、app.phpのLog設定箇所を変更する。

CakePHPで作られたquickapps/cmsを使ってみる

quickapps/cmsは、CakePHPで作成されたCMSだそうです。ライセンスはGPL-3.0dだそうです。GitHubスターが150個くらい。試しにインストールしてみます。

インストール

$ composer create-project -s dev quickapps/website [website_name]

インストール画面


結構かっこいい。ワードプレスのようなインストール画面でインストール終わったらちゃんと表示された。

ホームページ


フォルダ構成が不思議な感じ。全部プラグイン内で動いてるみたいで、srcフォルダもない。

CakePHP3 – MinifyHtmlプラグイン

WyriHaximus/MinifyHtml

HTMLを圧縮して出力してくれるプラグイン。

インストール

$ composer require wyrihaximus/minify-html

bootstrap.phpに下記を追加。

設定

AppView.phpに下記を追加。

デバッグモードだと圧縮しない。本番モードなら上記だけで圧縮してくれる。

CakePHP3 – whoopsプラグイン

gourmet/whoops

whoopsという、かっこいいエラー画面にしてくれるプラグイン。

$ composer require gourmet/whoops:~1.0

bootstrap.phpの下記ErrorHandlerの箇所を修正する。

修正後

404の場合は変わらないけど、500の場合は、下記のエラー画面に変わった。確かにきれいでわかり易い。

CakePHP3用のよさそうなプラグイン

FriendsOfCake/awesome-cakephp

認証系

FriendsOfCake/Authenticate
CakeDC/users
dereuromark/cakephp-tinyauth
ivanamat/cakephp3-captcha
ADmad/cakephp-jwt-auth
ADmad/CakePHP-HybridAuth

認可系

ivanamat/cakephp3-aclmanager
JcPires/CakePhp3-AclManager
PilOop/cakephp3-auth-acl-bootstrap-adminlte

アップロード系

josegonzalez/cakephp-upload
jrbasso/MeioUpload
davidyell/CakePHP3-Proffer

管理画面系

FriendsOfCake/crud-view
prakashw3expert/cakephp3.0-admin
KarlJakober/CakeAutoAdmin

Bootstrap系

FriendsOfCake/bootstrap-ui

REST API系

CakeDC/cakephp-api
multidots/cakephp-rest-api
hantsy/angularjs-cakephp-sample
Wizehive/cakephp-api-utils
patarkf/cakephp3restapi

グラフ描画系

netusco/CakePhp3-ChartJs
scottharwell/GoogleCharts

ソーシャル系

webtechnick/CakePHP-Facebook-Plugin

画像系

burzum/cakephp-imagine-plugin

検索系

CakeDC/search
FriendsOfCake/search

色々入ってる系

dereuromark/cakephp-tools

CRUD系

FriendsOfCake/crud

カテゴリー・タグ・お気に入り・コメント・評価系

CakeDC/tags
CakeDC/categories
CakeDC/favorites
CakeDC/comments
CakeDC/ratings

CSV系

FriendsOfCake/CakePdf
FriendsOfCake/cakephp-csvview

PDF系

FriendsOfCake/CakePdf

Asset系

markstory/asset_compress

ストレージ系

burzum/cakephp-file-storage

キャッシュ系

ceeram/clear_cache

CMS系

croogo/croogo

チケット管理ツール系

yandod/candycane

Q&Aサイト系

Datawalke/Coordino

WYSIWYG系

CakeDC/TinyMCE

Markdown系

ivanamat/cakephp3-markdown

開発サポート系

josegonzalez/cakephp-mail-preview
ebrigham1/cakephp-error-email

その他

passbolt/passbolt_api
josegonzalez/cakephp-environments
josegonzalez/cakephp-queuesadilla
fheider/cakephp-datatables
scherersoftware/cake-notifications

cakephp3 – DB設定時のTime Zoneエラー

Windows10でXampp使ってcakephp3を動かすとき、DB設定のtimezoneをAsia/Tokyoにすると下記エラーがでた。
General error: 1298 Unknown or incorrect time zone: ‘Asia/Tokyo’

対処法は、ここのとおりやったらできた。

ここから、timezone_2017a_posix_sql.zipをダウンロード・展開して、出てきたsqlファイルをどこかに置く。

そして、下記のようにやる。
$ cd /d/xampp/mysql/bin
$ ./mysql -u root mysql -p < /e/timezone_posix.sql

GCPでUbuntu16・Nginx・PHP7・cakePHP3環境をつくる

Google Cloud Platform(GCP)はAWSのgoogle版です。ここにサービスの説明があります。

Compute Engine

まずプロジェクトを作成する。次に、Compute Engineのコンソールで、VMインスタンスを作成する。ゾーンを日本、マシンタイプをf1-micro、OSをUbuntu16.10で作成してみた。数十秒程度でインスタンスが作成完了し、ブラウザ上でssh接続、ターミナル操作がすぐ可能になった。

マシンタイプの変更方法

参考:vm instanceのMachine type変更方法
IPをスタティックにして、ディスクを削除しないようにしながら、VMインスタンスを削除して、新しくインスタンスをつくるらしい。この間サーバは止まってしまう。でもいずれにしても結構簡単に切替は可能。

ローカル環境でssh接続できるようにする

google cloud SDKをインストールする。インストール完了したら初期設定が動き出すので、ログインしたりゾーン選択したりする。
Compute EngineのVMインスタンスの画面にある、ssh接続用のgcloudコマンドを実行する。これでssh接続できた。

PHPとかNginxとかをインストールする

$ sudo apt-get update
$ sudo apt-get install php
$ php -v
PHP 7.0.15-0ubuntu0.16.10.4 (cli) ( NTS )
$ sudo apt-get install nginx
$ nginx -v
nginx version: nginx/1.10.1 (Ubuntu)
$ sudo apt-get install git vim composer

デフォルトでapache2が入っていて起動されているようだ。
$ sudo systemctl stop apache2
$ sudo systemctl start nginx

Cloud DNS

https://cloud.google.com/dns/quickstart
上記に従って、DNS APIを有効にして、DNSコンソールからドメインを追加する。記載されているネームサーバに合わせて、ドメインのネームサーバを変更して、必要な設定をすると反映される。

Cloud SQL

Google Cloud SQL ドキュメント
Cloud DNSと同様にAPIを有効にしてインスタンスを作成する。Compute Engineから接続するには、ネットワークの承認が必要。下記にやり方が書いてあった。
MySQL クライアントを Compute Engine から接続する

Compute Engineを設定してCakephp3を動かす

$ sudo vim /etc/nginx/sites-available/default

$ sudo systemctl restart nginx
$ cd /var/www/html
$ sudo apt-get install php-fpm php-intl php-mbstring php-zip
$ sudo composer create-project –prefer-dist cakephp/app hoge.com

Compute EngineをCloud SQLにつなぐ

phpmyadminを使う

$ sudo apt-get install mysql-client
$ sudo apt-get install phpmyadmin
$ sudo vim /etc/phpmyadmin/config-db.php

config-db.php

$dbnameがないとエラーになるけど、内容は適当でも大丈夫だった。

$ sudo echo “hoge:$(openssl passwd -apr1 hogepassword)” > /path/to/hogepath
$ sudo chmod 604 /path/to/hogepath
$ sudo vim /etc/nginx/sites-available/default

コマンドラインでmysqlにつなぐ

$ mysql –host=[INSTANCE_IP_ADDR] –user=root -p

cakephp3でmysqlにつなぐ

$ sudo vim /var/www/html/hoge.com/config/app.php
hostをCloud SQLにする。

Let’s EncryptでSSL取得・設定

hoge.comとphpmyadminをhttps接続のみ可能にする。hoge.comにhttpアクセスした場合はhttpsにリダイレクトさせる。

$ sudo apt-get install letsencrypt
$ sudo systemctl stop nginx
$ sudo letsencrypt certonly –standalone -d hoge.com
$ sudo letsencrypt certonly –standalone -d hogehoge.com
$ sudo systemctl start nginx
$ sudo vim /etc/nginx/sites-available/default

$ sudo systemctl restart nginx

さくらVPSでcakephp3を動かす

環境

Ubuntu 16.04
PHP 7.0
Nginx 1.10

composerインストール+git clone

Nginx設定

$ vim /etc/nginx/sites-available/default

さくらレンタルサーバでcakephp3を動かす

すでにさくらサーバでgitが使えるようになっています。たしかデフォルトだと使えなかった気がする。マルチドメインで使います。
さくらサーバの管理画面の設定は抜かします。

composer installしたらエラーになりました。

デフォルトではintlがないらしい。

この参考記事のようにするとできるらしいけど、別のサーバ使うことにした。
参考:さくらのレンタルサーバでCakePHP3を使うためにintl extensionを導入する方法

cakephp3 – REST

AndroidからアクセスするAPIをつくりまっす。テストなのでセキュリティ等は適当にします。

参考:
http://book.cakephp.org/3.0/ja/development/rest.html
RESTful なルーティング

itemsテーブルを作成しておきます。
id, name, price, descriptionというフィールドを適当に作ります。

Bakeしてみます。

config/routes.phpの設定をします。

itemsのデータを2,3個追加します。

下記のようにアクセスすると、itemの一覧がjsonで取得できます。
localhost/hoge/items/index.json

config/routes.phpに、$routes->extensions([‘json’]);と書くだけでできました。

cakephp3のインストール

Version確認

PCはWindows10です。

composerでcakephp3のプロジェクト作成

エラーがでた。

intlがないといけないらしい。
php.iniの下記のコメントを外す。

インストール。

設定ファイルをコピー&編集

データベース設定とSECURITY_SALTを修正する。

参考:http://book.cakephp.org/3.0/ja/installation.html

購買型クラウドファンディング構築システム『Fundee Scratch』をつくりました

Fundee Scratchとは?

購買型のクラウドファンディングサイトを簡単に作成できるパッケージシステムです。https://fundee.inでASPとして運営していた実績を基に作成したので、安定しています。特に良質なプロジェクトを集められる方でしたら、手数料をご自分で決定できるパッケージはいいと好評いただいています。PHPで作成されており、フレームワークはcakePHPを使っています。ソースコードの難読化などはもちろんしていませんので、自由にカスタマイズしていただけます。

紹介サイト・デモサイト

紹介サイトは下記になります。
http://crowdfunding-system.biz/

デモサイトは下記です。
http://demo.crowdfunding-system.biz/

決済について

  • 決済は、購買型のAll or Nothing型のみ現在は対応しております。
  • クレジットカードのvisa、masterに対応しています。

決済代行会社について

決済はGMOペイメントを利用しておりますが、これには理由があります。

他の非常に安い決済サービスだと、仮売上(オーソリ)に十分対応していない。

  • webpayは、仮売上機能は、最大45日までです。つまり、プロジェクトの募集が最大45日までしかできません。
  • SPIKEは、月10万まで無料ということで面白いのですが、仮売上機能がそもそもありません。

プロジェクトの規模が制限される

  • paypalは、そもそもクラウドファンディングは慎重姿勢ということで、1件のプロジェクト当たり最大30万までと言われました。つまり大規模なプロジェクトは一切公開できません。

以上のように、それぞれ安くてよさそうな決済サービスもクラウドファンディングの利用には適していませんでした。一方GMOペイメントは、仮売上機能が最大90日(だったはず)まで使えるので、長期間のプロジェクトも公開可能ですし、大規模プロジェクトも問題なく公開可能です。デメリットは、初期費用は月額費用が上記のような決済代行会社と比べると必要になる点です。

もし、初期・月額を抑えたいということでしたら、さすがに、1プロジェクト30万までだと小さすぎるケースが多いと思うので、webpayの45日以内を前提に運営するといいかもしれないと思いました。決済手数料は、3.25%とかで、GMOペイメントと同じかちょっと安いくらいで、初期・月額無料ですので。webpayバージョンもつくってみようかなと思ってます。

金額

金額は、40万円ですが、今だけ半額提供中です。20万円(税別)です。