windowsのphpでcURLが使えないエラー

windows10でPAY.JPのPHP SDK使ってみたら、下記のエラーが出ました。curlのSSL証明書の設定みたいなやつでした。

Fatal error: Uncaught exception ‘Payjp\Error\ApiConnection’ with message ‘ in D:\xampp\htdocs\payjp\vendor\payjp\payjp-php\lib\HttpClient\CurlClient.php on line 123
( ! ) Payjp\Error\ApiConnection: Unexpected error communicating with Payjp. If this problem persists, let us know at support@pay.jp. (Network error [errno 77]: error setting certificate verify locations: CAfile: D:\xampp\htdocs\payjp\vendor\payjp\payjp-php\lib\HttpClient/../../data/ca-certificates.crt CApath: none) in D:\xampp\htdocs\payjp\vendor\payjp\payjp-php\lib\HttpClient\CurlClient.php on line 123

ローカルテストの場合は、gitとかに入ってるやつを使えるようです。
参考:Windows版PHPのcurlの証明書

設定してapache再起動したら出来ました。

wordpressのEWWW Image Optimizerというプラグインでエラーがでる

EWWW Image Optimizerでエラーが出るようになりました。このプラグインは、画像ファイルを圧縮してファイルサイズを小さくしてくれます。アップロードしたら勝手に実行してくれます。最新版にアップデートしたことが原因なのかは分かりませんが、突然下記のエラーがでるようになりました。

出現したエラー

The EWWW Image Optimizer has detected excessive re-optimization of multiple images.
Please turn on the Debugging setting, wait for approximately 12 hours, 
and then visit the Dynamic Image Debugging page.
Reset Counters

解決策

結論的には、エラー文中のReset Countersという文字は実際はリンクが張られているのですが、これをクリックしたら直りました。

同じエラーが出た人が質問していて、このプラグインの作者さんが回答してくれてました。
[Resolved] EWWW Image Optimizer has detected excessive re-optimization of multiple images

I think yours are false positives. You can just hit the reset button, and move on. Looks like you’ve got the scheduled optimizer scanning the theme/plugin folders, so anytime one of those gets updated with unoptimized images, they get re-optimized, so no big deal.

とりあえずリセットボタンを押したら直りました。最初押したときエラー画面になった気がするのですが、もう一度押したらエラーが消えました。

ちなみに、上記英文のfalse positivesというのは、間違ってることを正しいと思ってる状態みたいな感じらしいです。ここに解説がのってました。クリックのことはhitというんですね。

wordpress – 子テーマをつくってスタイル変更する

テーマのスタイルを変更しても更新したら消えちゃうのでこまります。子テーマをつくるといいらしいです。

参考:WordPressテーマのカスタマイズで子テーマを使うべき理由、使い方など

wp-content/themeに子テーマ用folderをつくって、その中に、style.cssとfunctions.phpをつくって、style.cssに子テーマの情報(子テーマの名前と親テーマ)を書けばいいようです。

$ cd wp-content/theme
$ touch style.css
$ touch functions.php
$ vi style.css

style.cssの中身

/*
 Theme Name:   mh-newsdesk-lite-child
 Template:     mh-newsdesk-lite
*/

これで管理画面に反映しているはず。有効化して、スタイルシートをいじってみます。
親を呼び出さないといけないらしい。スタイルが全く適用されていない。functions.phpに書けばいいらしい。

$ vi functions.php

functions.php

<?php
add_action( 'wp_enqueue_scripts', 'theme_enqueue_styles' );
function theme_enqueue_styles() {
    wp_enqueue_style( 'parent-style', get_template_directory_uri() . '/style.css' );
}

これで親のスタイルが引き継がれるので、あとは、子テーマのstyle.cssを修正することでデザインを変更できます。

購買型クラウドファンディング構築システム『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万円(税別)です。

cakephp2 – database.phpの情報でmysqlのpdoで接続する

cakephp2で、database.phpの情報でmysqlのpdoで接続する方法。

下記で、database.phpで設定している内容を取得できる。

include_once APP.'Config'.DS.'database.php';
if(class_exists('DATABASE_CONFIG'))
{
    $this->db_config = new DATABASE_CONFIG();
}

下記で、dbに接続できる。

private function connect_db()
{
    try
    {
        $this->pdo = new PDO('mysql:host='.$this->db_config->default['host'].';dbname='.
                             $this->db_config->default['database'].';charset=utf8',
                             $this->db_config->default['login'], $this->db_config->default['password']);
    }
    catch(PDOException $e)
    {
        exit('データベース接続失敗。'.$e->getMessage());
    }
}

下記で、データベースに存在するテーブルをすべて削除できる。

private function drop_tables()
{
    try
    {
        $stmt = $this->pdo->query('SHOW TABLES');
        $tables = $stmt->fetchAll();
        foreach($tables as $tbl)
        {
            $this->pdo->exec('drop table if exists '.$tbl[0]);
        }
    }
    catch(PDOException $e)
    {
        exit('テーブル削除失敗。'.$e->getMessage());
    }
}

下記で、データベースにsqlをインポートできる。

private function import_sql()
{
    $sql = $this->get_sql();
    try
    {
        return $this->pdo->exec($sql);
    }
    catch(PDOException $e)
    {
        exit('sqlインポート失敗。'.$e->getMessage());
    }
}
private function get_sql()
{
    try
    {
        return file_get_contents($this->sql_path);
    }
    catch(Exception $e)
    {
        exit('sqlファイル取得失敗。'.$e->getMessage());
    }
}

Xampp windows10 PHP sendmail 設定 (gmailを使う)

php.iniの設定と、sendmail.iniの設定をして、stunnelをインストールして、stunnel.confを設定する。

php.iniの設定

php.iniの場所は、xampp/php/php.ini
[mail function]という箇所を下記のようにする。

[mail function]
SMTP=localhost
smtp_port=465
sendmail_path = "D:\xampp\sendmail\sendmail.exe -t"
mail.add_x_header=On

sendamil.iniの設定

sendmail.iniの場所は、xampp/sendmail/sendmaill.ini

[sendmail]
smtp_server=localhost
smtp_port=25
smtp_ssl=none
auth_username=hogehoge@gmail.com
auth_password=hoge

stunnelのインストール

stunnel: Downloads

stunnel.confの設定

stunnel.confのバックアップをとっておき、中身を下記のようにする。

[gmail-smtp]
client = yes
accept = 127.0.0.1:25
connect = smtp.gmail.com:465
verify = 2
CAfile = ca-certs.pem
checkHost = smtp.gmail.com
OCSPaia = yes

[ssmtp]
accept  = 465
connect = 25
cert = stunnel.pem

最後にXamppコントローラでApacheを再起動する。

phpStorm windowsショートカット

ファイル名から検索
ctrl + shift + n

クラス名から検索
ctrl + n

行削除
ctrl + x

行複製
ctrl + d

単語選択
ctrl + w

ブロックの自動作成
ctrl + shift + Enter

開いたファイル履歴表示
ctrl + e

指定行にジャンプ
ctrl + g

コードの自動成型
ctrl + alt + l

ライブテンプレート
ctrl + j

タブを閉じる
ctrl + F4 (使いづらいけど変更方法がわからない)

vimでphpを使う

参考:VimでのPHP開発環境

PHP開発に便利なプラグイン

NeoBundleでプラグインを入れられるようになったので、上記を参考に、PHP開発に有用そうなプラグインを入れてみます。

Shougo/neocomplete.vim 関数名とか補完してくれるやつ。
Shougo/neosnippet.vim スニペット登録できるやつ。Shougo/neosnippet-snippetsも入れる必要があるらしい。
thinca/vim-ref PHPのマニュアルをvimで見られるやつ。テキストブラウザが必要らしい。
tomtom/tcomment_vim ファイルの種類に合わせて、適切なコメントアウトをしてくれるやつ。
AndrewRadev/splitjoin.vim 展開したり、1行にまとめたりできるやつ。
osyo-manga/vim-watchdogs 構文チェックしてくれるやつ。

NeoBundleでインストール

NeoBundleFetch 'Shougo/neobundle.vim'
NeoBundle 'Shougo/neocomplete.vim'
NeoBundle 'nanotech/jellybeans.vim'
NeoBundle 'Shougo/neosnippet.vim'
NeoBundle 'Shougo/neosnippet-snippets'
NeoBundle 'thinca/vim-ref'
NeoBundle 'tomtom/tcomment_vim'
NeoBundle 'AndrewRadev/splitjoin.vim'
NeoBundle 'osyo-manga/vim-watchdogs'

エラーなくインストールできた。
まだ他のサイトにも色々情報があり、全部調べて設定するのは結構大変そう。また今度やる。

参考:
VimでPHP開発環境を作成
vimのPHP開発環境

cakephp3 – Bake

composerでインストール

$ composer require --dev cakephp/bake:~1.0
./composer.json has been updated
Loading composer repositories with package information
Updating dependencies (including require-dev)
Nothing to install or update
Writing lock file
Generating autoload files
> Cake\Composer\Installer\PluginInstaller::postAutoloadDump

bake

下記のような感じでbakeできる。2と特段変わらない。

$bin/cake bake model users
$bin/cake bake controller users
$bin/cake bake template users

mac – El CapitanでcakePHP3を使う

Macの状態

  • macは、El Capitan 11.10.5です。
  • すでに、PHP7、MySQL、Nginxが入っています。composerもインストール済みです。
  • Nginxのドキュメントルートは、/usr/local/var/wwwです。

cakephp3のプロジェクトを作成する

ドキュメントルートに移動して、hogeプロジェクトを作成します。

$ cd /usr/local/var/www
$ composer self-update && composer create-project --prefer-dist cakephp/app hoge

php-fpmが変だったので直した

cakePHP3は、php5.5.9以上が必要で、php7もOKということで、php7をインストールしました。しかしphp-fpmのバージョンを確認すると、以前インストールされていたphp5.3のものでした。

php7のインストールは、 mac – phpを7.0にバージョンアップに記載の方法でやりました。php7のパスは、/usr/local/php5/binです。これに対応するphp-fpmは、/usr/local/php5/sbin/php-fpmです。なので、/usr/local/php5/sbinもパスに加えたらOKになりました。

.bash_profileを開く

$ vim ~/.bash_profile

下記を最後に追加する

#php7
PATH=/usr/local/php5/bin:$PATH
PATH=/usr/local/php5/sbin:$PATH

.bash_profileを読み込む

$ source ~/.bash_profile

php-fpmを起動

$ php-fpm

php-fpmのバージョン確認

$ php-fpm -v
PHP 7.0.6 (fpm-fcgi) (built: May 24 2016 23:07:56)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
    with Xdebug v2.4.0RC3, Copyright (c) 2002-2015, by Derick Rethans

Nginxの設定をcakephpに合わせて変更する

nginx.confを修正する

#user  nobody;
worker_processes  1;

events {
    worker_connections  1024;
}

http {
    include       mime.types;
    default_type  application/octet-stream;

    sendfile        on;

    keepalive_timeout  65;

    server {
        listen   8080;
        server_name www.localhost;
        rewrite ^(.*) http://localhost$1 permanent;
    }

    server {
        listen   8080;
        server_name localhost;

        # root directive should be global
        root   /usr/local/var/www/hoge/webroot/;
        index  index.php;

        access_log /usr/local/var/log/access.log;
        error_log /usr/local/var/log/error.log;

        location / {
            try_files $uri $uri/ /index.php?$args;
        }

        location ~ \.php$ {
            try_files $uri =404;
            include /usr/local/etc/nginx/fastcgi_params;
            fastcgi_pass    127.0.0.1:9000;
            fastcgi_index   index.php;
            fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
        }
    }
}

Nginxを再起動する

$ nginx -s reload

mac – phpを7.0にバージョンアップ

macは、10.11.5、El Capitanです。

現在のバージョンを確認

$ php -v
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/extensions/no-debug-non-zts-20121212/php_mysql.dll' - dlopen(/usr/lib/php/extensions/no-debug-non-zts-20121212/php_mysql.dll, 9): image not found in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/extensions/no-debug-non-zts-20121212/php_mysqli.dll' - dlopen(/usr/lib/php/extensions/no-debug-non-zts-20121212/php_mysqli.dll, 9): image not found in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/extensions/no-debug-non-zts-20121212/php_pdo_mysql.dll' - dlopen(/usr/lib/php/extensions/no-debug-non-zts-20121212/php_pdo_mysql.dll, 9): image not found in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/extensions/no-debug-non-zts-20121212/php_pdo_sqlite.dll' - dlopen(/usr/lib/php/extensions/no-debug-non-zts-20121212/php_pdo_sqlite.dll, 9): image not found in Unknown on line 0
PHP Warning:  PHP Startup: Unable to load dynamic library '/usr/lib/php/extensions/no-debug-non-zts-20121212/php_sqlite3.dll' - dlopen(/usr/lib/php/extensions/no-debug-non-zts-20121212/php_sqlite3.dll, 9): image not found in Unknown on line 0
PHP 5.5.34 (cli) (built: Apr 22 2016 19:16:58) 
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.5.0, Copyright (c) 1998-2015 Zend Technologies

なんかWarningがたくさん出ている。

PHP7.0をインストール

$ curl -s http://php-osx.liip.ch/install.sh | bash -s 7.0

インストール成功した。

PATH設定

$ export PATH=/usr/local/php5/bin:$PATH

PHPバージョン確認

$ php -v
PHP 7.0.6 (cli) (built: May 24 2016 23:07:51) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2016, by Zend Technologies
    with Xdebug v2.4.0RC3, Copyright (c) 2002-2015, by Derick Rethans

PHP 7.0.6になった。

————————
追記:

brewでphp7をインストールする

上記のPHPを削除する

$ sudo rm -rf /usr/local/bin/php5
$ sudo rm -rf /usr/local/bin/php5-7.0.6-20160524-231014/

.bash_profileを修正する

$ vim ~/.bash_profile

下記を削除する

#php7
PATH=/usr/local/php5/bin:$PATH
PATH=/usr/local/php5/sbin:$PATH

修正を反映する

$ source ~/.bash_profile

brewのリポジトリを追加する

$ brew tap homebrew/dupes
$ brew tap homebrew/php

php7をインストールする

$ brew install php70

〜
中略
〜

The php.ini file can be found in:
    /usr/local/etc/php/7.0/php.ini

✩✩✩✩ Extensions ✩✩✩✩

If you are having issues with custom extension compiling, ensure that
you are using the brew version, by placing /usr/local/bin before /usr/sbin in your PATH:

      PATH="/usr/local/bin:$PATH"

PHP70 Extensions will always be compiled against this PHP. Please install them
using --without-homebrew-php to enable compiling against system PHP.

✩✩✩✩ PHP CLI ✩✩✩✩

If you wish to swap the PHP you use on the command line, you should add the following to ~/.bashrc,
~/.zshrc, ~/.profile or your shell's equivalent configuration file:

      export PATH="$(brew --prefix homebrew/php/php70)/bin:$PATH"

✩✩✩✩ FPM ✩✩✩✩

To launch php-fpm on startup:
    mkdir -p ~/Library/LaunchAgents
    cp /usr/local/opt/php70/homebrew.mxcl.php70.plist ~/Library/LaunchAgents/
    launchctl load -w ~/Library/LaunchAgents/homebrew.mxcl.php70.plist

The control script is located at /usr/local/opt/php70/sbin/php70-fpm

OS X 10.8 and newer come with php-fpm pre-installed, to ensure you are using the brew version you need to make sure /usr/local/sbin is before /usr/sbin in your PATH:

  PATH="/usr/local/sbin:$PATH"

You may also need to edit the plist to use the correct "UserName".

Please note that the plist was called 'homebrew-php.josegonzalez.php70.plist' in old versions
of this formula.

To have launchd start homebrew/php/php70 now and restart at login:
  brew services start homebrew/php/php70
==> Summary
🍺  /usr/local/Cellar/php70/7.0.6: 332 files, 49.2M

.bash_profileを修正する

下記を最後に追加する。

PATH="/usr/local/sbin:$PATH"

バージョン確認

$ php -v
PHP 7.0.6 (cli) (built: Apr 29 2016 04:21:39) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

$ php-fpm -v
PHP 7.0.6 (fpm-fcgi) (built: Apr 29 2016 04:21:42)
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2016 Zend Technologies

cloud9でcakephp3・MySQLを使う

cloud9プロジェクトの作成

cloud9でPHPを選択してプロジェクトを作ります。

MySQLの起動

$ mysql-ctl start
Installing MySQL
 * Stopping MySQL database server mysqld
   ...done.
 * Starting MySQL database server mysqld
   ...done.
 * Checking for tables which need an upgrade, are corrupt or were 
not closed cleanly.

MySQL 5.5 database added.  Please make note of these credentials:

       Root User: hgoe
   Database Name: hoge

 * Starting MySQL database server mysqld
   ...done.

phpMyAdminのインストール

$ phpmyadmin-ctl install
Starting installation
Starting MySQL
 * Starting MySQL database server mysqld
   ...done.
Configuring database
Starting apache
 * Restarting web server apache2
   ...done.
PHPMyAdmin Installation complete. You can log in at: https://hoge-hoge.c9users.io/phpmyadmin with the following username (and blank password):

       Username: hoge

上記URLにアクセスしたらphpMyAdminが表示される。初期ではusernameと、パスワード空で入れる。root以外のユーザを作成したりする。

composerのインストール

$ curl -sS https://getcomposer.org/installer | php
Downloading 1.1.1...

Composer successfully installed to: /home/ubuntu/workspace/composer.phar
Use it: php composer.phar
Some settings on your machine may cause stability issues with Composer.
If you encounter issues, try to change the following:

The xdebug extension is loaded, this can slow down Composer a little.
Disabling it when using Composer is recommended.

composerを移動する

$ sudo mv composer.phar /usr/local/bin/composer

cakeプロジェクトの作成

$ composer create-project cakephp/app caketest
You are running composer with xdebug enabled. This has a major impact on runtime performance. See https://getcomposer.org/xdebug

Installing cakephp/app (3.2.6)
  - Installing cakephp/app (3.2.6)
    Downloading: 100%         

Created project in caketest
Loading composer repositories with package information
Updating dependencies (including require-dev)
  - Installing aura/installer-default (1.0.0)
    Downloading: 100%         

  - Installing cakephp/plugin-installer (0.0.15)
    Downloading: 100%         

  - Installing psr/log (1.0.0)
    Downloading: 100%         

  - Installing mobiledetect/mobiledetectlib (2.8.22)
    Downloading: 100%         

  - Installing aura/intl (1.1.1)
    Downloading: 100%         

  - Installing cakephp/chronos (0.4.9)
    Downloading: 100%         

  - Installing cakephp/cakephp (3.2.9)
    Downloading: 100%         

  - Installing symfony/yaml (v3.0.6)
    Downloading: 100%         

  - Installing symfony/filesystem (v3.0.6)
    Downloading: 100%         

  - Installing symfony/config (v3.0.6)
    Downloading: 100%         

  - Installing symfony/polyfill-mbstring (v1.2.0)
    Downloading: 100%         

  - Installing symfony/console (v3.0.6)
    Downloading: 100%         

  - Installing robmorgan/phinx (v0.5.3)
    Downloading: 100%         

  - Installing cakephp/migrations (1.6.1)
    Downloading: 100%         

  - Installing jakub-onderka/php-console-color (0.1)
    Downloading: 100%         

  - Installing jakub-onderka/php-console-highlighter (v0.3.2)
    Downloading: 100%         

  - Installing dnoegel/php-xdg-base-dir (0.1)
    Downloading: 100%         

  - Installing nikic/php-parser (v2.1.0)
    Downloading: 100%         

  - Installing symfony/var-dumper (v3.0.6)
    Downloading: 100%         

  - Installing psy/psysh (v0.7.2)
    Downloading: 100%         

  - Installing jdorn/sql-formatter (v1.2.17)
    Downloading: 100%         

  - Installing cakephp/debug_kit (3.2.8)
    Downloading: 100%         

  - Installing cakephp/bake (1.2.4)
    Downloading: 100%         

cakephp/app suggests installing phpunit/phpunit (Allows automated tests to be run without system-wide install.)
cakephp/app suggests installing cakephp/cakephp-codesniffer (Allows to check the code against the coding standards used in CakePHP.)
symfony/console suggests installing symfony/event-dispatcher ()
symfony/console suggests installing symfony/process ()
symfony/var-dumper suggests installing ext-symfony_debug ()
psy/psysh suggests installing ext-pdo-sqlite (The doc command requires SQLite to work.)
cakephp/debug_kit suggests installing ext-sqlite (DebugKit needs to store panel data in a database. SQLite is simple and easy to use.)
Writing lock file
Generating autoload files
> Cake\Composer\Installer\PluginInstaller::postAutoloadDump
> App\Console\Installer::postInstall
Created `config/app.php` file
Set Folder Permissions ? (Default to Y) [Y,n]? Permissions set on /home/ubuntu/workspace/caketest/tmp/cache
Permissions set on /home/ubuntu/workspace/caketest/tmp/cache/models
Permissions set on /home/ubuntu/workspace/caketest/tmp/cache/persistent
Permissions set on /home/ubuntu/workspace/caketest/tmp/cache/views
Permissions set on /home/ubuntu/workspace/caketest/tmp/sessions
Permissions set on /home/ubuntu/workspace/caketest/tmp/tests
Permissions set on /home/ubuntu/workspace/caketest/tmp
Permissions set on /home/ubuntu/workspace/caketest/logs
Updated Security.salt value in config/app.php

プレビューを見る

cloud9のメニューのPreviewからプレビューを開く。database.phpの設定がまだだが、とりあえず初期画面が表示される。

cake3

database.phpの設定

config/app.phpの229行目に下記があるので、修正する。

'username' => 'hoge',
'password' => 'hoge',
'database' => 'hoge',
'encoding' => 'utf8',
'timezone' => 'UTC',
'flags' => [],
'cacheMetadata' => true,
'log' => false,

Zend_Pdfで作成されるPDFのファイルサイズを小さくする

Zend_Pdfで日本語が含まれるPDFを作成するとファイルサイズが5MB近くになる場合があります。日本語のフォントが全部PDFに含まれるからだそうです。

参考:http://framework.zend.com/manual/1.12/ja/zend.pdf.drawing.html

日本語フォントをセットする際に、Zend_Pdf_Font::EMBED_DONT_EMBEDというパラメタを設定することで、PDFにフォントが埋め込まれなくなります。

$font = Zend_Pdf_Font::fontWithPath(APPLICATION_PATH . '/../vendor/font/ipaexg.ttf', Zend_Pdf_Font::EMBED_DONT_EMBED);

4.4MBだったものが、Zend_Pdf_Font::EMBED_DONT_EMBEDを設定することで、300KB程度になりました。

追記:2016/5/15
これだと、フォントが端末にないと表示されませんでした。代替フォントを使ってくれるのかと思いましたが、自分の環境だとうまく表示されませんでした。なので、結局mbfpdfを使いました。

Amazon Linux – PostgreSQL・Nginx・FuelPHP


インストール

参考:
Amazon Linux AMIにpostgresqlをインストールする
チュートリアル: Amazon Linux への LAMP ウェブサーバーのインストール

yumをアップデートして、phpとgitとvimとnginx入れた。アパッチとMySQLも入れた。

sudo yum update -y
$ sudo yum install -y httpd24 php56 mysql55-server php56-mysqlnd
$ sudo yum install -y git
$ sudo yum install -y vim
$ sudo yum install -y nginx

postgresql入れた。

$ sudo yum install -y postgresql
$ sudo yum install -y postgresql-server postgresql-libs php-pgsql

エラーでた

$ sudo yum install -y postgresql-server postgresql-libs php-pgsql                                                                   
読み込んだプラグイン:priorities, update-motd, upgrade-helper
パッケージ postgresql92-libs-9.2.15-1.57.amzn1.x86_64 はインストール済みか最新バージョンです
依存性の解決をしています
--> トランザクションの確認を実行しています。
---> パッケージ php-pgsql.x86_64 0:5.3.29-1.8.amzn1 を インストール
--> 依存性の処理をしています: php-pdo(x86-64) = 5.3.29-1.8.amzn1 のパッケージ: php-pgsql-5.3.29-1.8.amzn1.x86_64
---> パッケージ postgresql92-server-compat.x86_64 0:9.2.15-1.57.amzn1 を インストール
--> 依存性の処理をしています: postgresql92-server(x86-64) = 9.2.15-1.57.amzn1 のパッケージ: postgresql92-server-compat-9.2.15-1.57.amzn1.x86_64
--> トランザクションの確認を実行しています。
---> パッケージ php-pdo.x86_64 0:5.3.29-1.8.amzn1 を インストール
--> 依存性の処理をしています: php-common(x86-64) = 5.3.29-1.8.amzn1 のパッケージ: php-pdo-5.3.29-1.8.amzn1.x86_64
---> パッケージ postgresql92-server.x86_64 0:9.2.15-1.57.amzn1 を インストール
--> トランザクションの確認を実行しています。
---> パッケージ php-common.x86_64 0:5.3.29-1.8.amzn1 を インストール
--> 衝突を処理しています: php56-common-5.6.19-1.123.amzn1.x86_64 は php-common < 5.5.22-1.98 と衝突しています
--> 衝突を処理しています: php56-pdo-5.6.19-1.123.amzn1.x86_64 は php-pdo < 5.5.22-1.98 と衝突しています
--> 依存性解決を終了しました。
エラー: php56-pdo conflicts with php-pdo-5.3.29-1.8.amzn1.x86_64
エラー: php56-common conflicts with php-common-5.3.29-1.8.amzn1.x86_64
 問題を回避するために --skip-broken を用いることができます。
 これらを試行できます: rpm -Va --nofiles --nodigest

php56と指定しないといけないっぽい。

$ sudo yum install -y postgresql-server postgresql-libs php56-pgsql

これで必要なの入った。

postgreSQLの設定する

postgresユーザにパスワード設定

$ sudo passwd postgres

postgresユーザに切り替える

$ su - postgres

基本データベース生成とサービス開始

$ initdb --encoding=UTF8 --no-locale
$ pg_ctl start
$ exit
$ chkconfig postgresql on

データベース作成する

$ psql -U posgres
postgres=# create database hoge;

NginxでPHP使えるようにする

参考:nginxでphpを使う(CentOS6.5)

php-fpmをインストールする

$ sudo yum install -y php56-fpm

php-fpmの設定をする

下記のwww.confのuserとかgroupがapacheになっているので、nginxに変更します。

$ sudo vim /etc/php-fpm.d/www.conf

NginxでFuelphpが動くようにする

下記、nginx.confを修正していく。

$ sudo vim /etc/nginx/nginx.conf

下記箇所を、/usr/share/nginx/hoge/publicとかにする。

root         /usr/share/nginx/html

参考:http://fuelphp.jp/docs/1.8/installation/instructions.html
下記のように変更する。

location / {
    index index.php;
    try_files $uri $uri/ /index.php$is_args$args;
}

location ~ \.php$ {
    include fastcgi_params;
    fastcgi_pass 127.0.0.1:9000;
    fastcgi_index index.php;
    fastcgi_param FUEL_ENV "production";
    fastcgi_param SCRIPT_FILENAME $document_root$fastcgi_script_name;
}

nginxとphp-fpmを再起動する

$ sudo service php-fpm restart
$ sudo service nginx restart

FuelPHPをcloneする

FuelPHPはローカルで作ってるやつをcloneする。

$ cd /usr/share/nginx/
$ sudo git clone https://hogehoge.git

FuelPHPのcomposer installする

$ cd /usr/share/nginx/hoge
$ ./composer.phar install

phpPgAdminインストール

参考:phpPgAdminのインストール – CentOS6.5(Vagrant)

とりあえず、ローカルで上記サイトに記載のURLから、ダウンロードして、展開して、gitリポジトリに追加して、pullした。常時使える必要はなかったので、nginxのrootを変更してちょっとだけ使った。

FFmpeg – mac・PHPで使う

macのバージョンは、10.11.4。El Capitan。

参考: Mac OS XでFFmpegのインストールとWebM動画の作り方

brewでインストールした。ここまで長いオプションは必要ないのかもしれない。

brew install automake celt faac fdk-aac git lame \
libass libtool libvorbis libvpx \
libvo-aacenc opencore-amr openjpeg \
opus sdl schroedinger shtool speex texi2html \
theora wget x264 xvid yasm

FFmpegとは?

FFmpeg(エフエフエムペグ)は動画と音声を変換することのできるUNIX系OS生まれのフリーソフトウェアであり、libavcodec(動画/音声のコーデックライブラリ)、libavformat(動画/音声のコンテナライブラリ)、libswscale(色空間・サイズ変換ライブラリ)、libavfilter(動画のフィルタリングライブラリ)などを含む。ライセンスはコンパイル時のオプションによりLGPLかGPLに決定される。コマンドラインから使用することができる。対応コーデックが多く、多彩なオプションを使用可能なため、幅広く利用されている。

引用:FFmpeg

PHP-FFMpegを使う

最初ffmpeg-phpを使おうとしたけど、エラーでインストールできなかった。2012年で開発終了しているらしい。

PHPでffmpegを利用するには、PHP-FFMpegがおすすめです。Composer対応のモダンなPHP実装なので、PHP5.3以上のコードベースではとても扱いやすいです。

ffmpeg-phpというPHP拡張もありますが、2012年で開発が止まっているのであまりおすすめしません。

引用:FFmpegによる動画エンコードの基本

PHP-FFMpegを使ってみる。

PHP-FFMpeg

上記のREADMEに詳しく書いてあった。composerに追加してupdateしたら下記のような感じで使えるようになる。

composer.json

{
    "require": {
        "php-ffmpeg/php-ffmpeg": "~0.5"
    }
}

fuelphpのコントローラ内でテスト。保存されている動画を取得して、jpgのサムネイル画像を作成して保存している。その後、fuelphpのImageクラスでリサイズして保存した。

//ffmpegテスト
$ffmpeg = FFMpeg\FFMpeg::create(array(
	'ffprobe.binaries' => '/usr/local/bin/ffprobe',
	'ffmpeg.binaries' => '/usr/local/bin/ffmpeg'
));
$video = $ffmpeg->open(DOCROOT.'assets/movie/'.$movie['file_name']);
//		$video
//			->filters()
//			->resize(new FFMpeg\Coordinate\Dimension(320, 180))
//			->synchronize();
$frame = $video->frame(FFMpeg\Coordinate\TimeCode::fromSeconds(15));
$img_path = DOCROOT.'assets/movie/thumb/'.$movie['id'].'.jpg';
$frame->save($img_path);

//画像のリサイズ
//ffmpegのリサイズが効かない為
Image::load($img_path)->resize(320, null, true, true)->save($img_path);