タグ: php

MySQL動的に変化が多すぎるスキーマの管理方法を考える。

MySQL動的に変化が多すぎるスキーマの管理方法を考える。

最近小規模な独自の物流システムを設計しているところなのですが、商品のスキーマがいろいろ変化が多いのでどのように設計していくかを考えています。

作りたいのはこのようなテーブル

テーブルA

テーブルA

基本的な情報以外は’メタ情報’として外部へ分ける。

先程のテーブルAを次の図のテーブルB,Cように別に分ける。(WordPressの postsとposts_metaのような感じ縦持ちと呼ぶのは知らなかった。><)

テーブルBは基本的な情報のみ

テーブルB

テーブルB

テーブルCはメタ情報を記録

テーブルC

テーブルC

また情報が増えた場合は以下の用に増えても問題がない。

title

title

スキーマの管理をどうするか問題

もう一つの問題は、スキーマの変更をどうやって管理していくか。
勝手にデータを追加していっても良いのですが、データの正規化のためのバリデーションルールなどを管理画面から操作していくために。

productsテーブルにはどのようなメタデータがあるかを何処かで定義しないといけません。
幾つか思いつく方法としては、

  • A.Jsonなどでテキストで保存する。
  • B.モデルのプログラムに記載する。
  • C.scheme用の別テーブルに保存する。

などが思いつきましたが、Aの方法はバックアップなど、管理も大変なのでNG。
Bのモデルのプログラムに記載するは、隠蔽するということで良い面もありそうだけど今回は、運営の担当者レベルで、管理画面から動的に変更をしたいのでNG。
ということでCのスキーマ用のテーブルに保存する方法を考えて行きたいと思います。

スキーマ定義テーブルの設計

まずは最少な感じだとこんな感じ。(愛称:nicknameと説明:descriptionと追加)

schemes : A

schemes : A

もう少し考えるとお昼は提供可(day_menu)、夜はNG(night_menu)などの1 or 0 みたいな選択肢の場合はどうしよう。

schemes : B

schemes : B

と言った感じで表現できそう。なにか動的フォームの設計のようです。あとはセットメニューに配達範囲(プルダウンのような)の項目を追加をイメージして見ます。

schemes : C

schemes : C

関連するテーブル追加も考えたのですが、READで負荷がかかるところでないので(管理画面からの操作のみを想定)JSON文字列を突っ込んでます。
(DB正規化を尊重する場合は、scheme_select_optionsなどのテーブル追加なのかどうか?とかも)

今回の実装は以下の方向性で進めてみる。

まずはデータの全体のイメージはこれ

実際データのイメージ

実際データのイメージ

で、実際のテーブルは以下の通りに定義

tables

tables

とりあえず問題は無いと思うのですが、細かい部分をDBに定義するかプログラム部分に持ってくるかが今後ちょっと検討課題になってきそうです。

商品とセット商品の関連付け。(データベースの設計)

商品とセット商品の関連付け。(データベースの設計)

物流関連のシステム周りでセット商品の使いについて考えてみた。
以下の書籍を参考にして組んでいる。アプリケーションはPHP(CakePHP3)のMySQL

商品のセット情報をもつ関連テーブルを作る

商品のセット情報をもつ関連テーブルを作る

なにかもっとスマートな方法がありそうな気もするが、こっちの方があれか、
たしかに拡張性が高そうな気もした。多対多のような、セットをセットにしたファミリーセットとかもいけそうだし。

とりあえず、これで進めてみる。

nginxのPHPのアップロードファイルサイズの変更方法。

nginxのPHPのアップロードファイルサイズの変更方法。

WordPressで画像をアップした所画像がアップできませんでした。
結果を3行でいうと以下で解決。

  • nginxのclient_max_body_sizeを上げる。
  • php.iniで、upload_max_filesizeを上げる
  • php-fpmのrestartとnginxのreload

以下いくつか段階があったようなのでその解決方法の詳細

1、httpエラーがでる。

この場合はnginxが送信できるhttpのbodyサイズが不足していました。
私の環境の場合は、以下の設定ファイルを書き換えてnginxをreloadして解決しました。

ファイル : /etc/nginx/nginx.conf (共通の設定ファイルの最後当たりに追加)

http {
    (中略)
    client_max_body_size 50M;
    include /etc/nginx/conf.d/*.conf;
}

(ドメインごとの設定ファイルなどで変更ができるように includeの前にいれました。)

2、PHPのファイルアップロード制限

しばらく大丈夫だったのですが、今度はWordPressでアップロードした場合に上限だとエラーメッセージがでました。

6000x4028-17M.jpg exceeds the maximum upload size for this site.

これはPHPの設定 ‘upload_max_filesize’ が原因でした。
まずサーバーで値を確認。

# php --info | less
//'upload_max_filesize'を検索。
upload_max_filesize => 2M => 2M
//と2MBにっているさらに'php.ini'で検索してphp.iniの場所を確認。
 Loaded Configuration File => /etc/php.ini

/etc/php.iniを編集します。

# vim /etc/php.ini
//以下の部分を元の 2Mから10Mへ変
upload_max_filesize = 10M
//保存して10Mになっていることを確認
# php --info
upload_max_filesize => 10M => 10M

そしてnginx再起動

# systemctl restart nginx

でアップロードすると、あれできない。。と少し悩む。
あーphp-fpmもかと。

# systemctl restart php-fpm.service

として解決

Macでcakephp3 の環境構築 bakeコマンドでエラー(php.iniと、MAMPのMySQLのソケットの場所が原因でした。)

Macでcakephp3 の環境構築 bakeコマンドでエラー(php.iniと、MAMPのMySQLのソケットの場所が原因でした。)

以前Cakephp3の環境をMacにつくってうまくいっていたのですが、bakeコマンドを使ったところでエラーが発生しました。
(結果を先にいうと、CLIのPHPのphp.iniのpdo_mysql.default_socketの値とMAMPのMySQLのsocketの位置が違ってました。)

以前の環境設定の記事
MacでCakePHP3をComposerを使ってセットアップ

エラーは次のようなエラー

 % bin/cake bake all users
Bake All
---------------------------------------------------------------
One moment while associations are detected.
Exception: SQLSTATE[HY000] [2002] No such file or directory in [/Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Database/Driver/PDODriverTrait.php, line 47]
2017-08-29 02:34:48 Error: [PDOException] SQLSTATE[HY000] [2002] No such file or directory in /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Database/Driver/PDODriverTrait.php on line 47
Stack Trace:
#0 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Database/Driver/PDODriverTrait.php(47): PDO->__construct('mysql:host=loca...', 'root', 'root', Array)
#1 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Database/Driver/Mysql.php(104): CakeDatabaseDriverMysql->_connect('mysql:host=loca...', Array)
#2 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Database/Schema/BaseSchema.php(45): CakeDatabaseDriverMysql->connect()
#3 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Database/Dialect/MysqlDialectTrait.php(63): CakeDatabaseSchemaBaseSchema->__construct(Object(CakeDatabaseDriverMysql))
#4 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Database/Schema/Collection.php(52): CakeDatabaseDriverMysql->schemaDialect()
#5 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Database/Schema/CachedCollection.php(42): CakeDatabaseSchemaCollection->__construct(Object(CakeDatabaseConnection))
#6 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Database/Connection.php(368): CakeDatabaseSchemaCachedCollection->__construct(Object(CakeDatabaseConnection), true)
#7 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Database/Connection.php(387): CakeDatabaseConnection->getSchemaCollection()
#8 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/bake/src/Shell/Task/ModelTask.php(1016): CakeDatabaseConnection->schemaCollection()
#9 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/bake/src/Shell/Task/ModelTask.php(968): BakeShellTaskModelTask->_getAllTables()
#10 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/bake/src/Shell/Task/ModelTask.php(209): BakeShellTaskModelTask->listAll()
#11 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/bake/src/Shell/Task/ModelTask.php(127): BakeShellTaskModelTask->getAssociations(Object(CakeORMTable))
#12 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/bake/src/Shell/Task/ModelTask.php(110): BakeShellTaskModelTask->getTableContext(Object(CakeORMTable), 'users', 'Users')
#13 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/bake/src/Shell/Task/ModelTask.php(97): BakeShellTaskModelTask->bake('Users')
#14 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/bake/src/Shell/BakeShell.php(257): BakeShellTaskModelTask->main('Users')
#15 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Collection/CollectionTrait.php(51): BakeShellBakeShell->BakeShell{closure}('Users', 0)
#16 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/bake/src/Shell/BakeShell.php(258): CakeCollectionCollection->each(Object(Closure))
#17 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Console/Shell.php(494): BakeShellBakeShell->all('users')
#18 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Console/CommandRunner.php(140): CakeConsoleShell->runCommand(Array, true)
#19 /Users/taka/htdocs/_template/php/cakephp3/bookmarker/bin/cake.php(12): CakeConsoleCommandRunner->run(Array)
#20 {main}

エラーを読んでいきます。

Exception: SQLSTATE[HY000] [2002] No such file or directory in [/Users/taka/htdocs/_template/php/cakephp3/bookmarker/vendor/cakephp/cakephp/src/Database/Driver/PDODriverTrait.php, line 47]

PDOのドライバーのクラスでファイルが見つからないらしい。該当箇所を見る。

$connection = new PDO(
            $dsn,
            $config['username'],
            $config['password'],
            $config['flags']
        );

PDOをnewしているところでエラーなのでPDO自体がまずいのか。
phpinfoのPDOを探ってみる。

% php --info | less
//で、PDO部分を検索
PDO

PDO support => enabled
PDO drivers => mysql, odbc, sqlite

pdo_mysql

PDO Driver for MySQL => enabled
Client API version => mysqlnd 5.0.12-dev - 20150407 - $Id: b396954eeb2d1d9ed7902b8bae237b287f21ad9e $

Directive => Local Value => Master Value
pdo_mysql.default_socket => /tmp/mysql.sock => /tmp/mysql.sock

PDO_ODBC

PDO Driver for ODBC (unixODBC) => enabled
ODBC Connection Pooling => Enabled, strict matching

pdo_sqlite

PDO Driver for SQLite 3.x => enabled
SQLite Library => 3.15.1

あー、たしかMAMPのmysqlのソケットの場所が違ったはず。と思い出す。
シンボリックリンク作成

% ln -s /Applications/MAMP/tmp/mysql/mysql.sock /tmp/mysql.sock

気を取り直してもう一いっかいで、うまくいきました。

% bin/cake bake all users
Bake All
---------------------------------------------------------------
One moment while associations are detected.

Baking table class for Users...

Creating file /Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Model/Table/UsersTable.php
Wrote `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Model/Table/UsersTable.php`
Deleted `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Model/Table/empty`

Baking entity class for User...

Creating file /Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Model/Entity/User.php
Wrote `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Model/Entity/User.php`
Deleted `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Model/Entity/empty`

Baking test fixture for Users...

Creating file /Users/taka/htdocs/_template/php/cakephp3/bookmarker/tests/Fixture/UsersFixture.php
Wrote `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/tests/Fixture/UsersFixture.php`
Deleted `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/tests/Fixture/empty`
Bake is detecting possible fixtures...

Baking test case for AppModelTableUsersTable ...

Creating file /Users/taka/htdocs/_template/php/cakephp3/bookmarker/tests/TestCase/Model/Table/UsersTableTest.php
Wrote `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/tests/TestCase/Model/Table/UsersTableTest.php`

Baking controller class for Users...

Creating file /Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Controller/UsersController.php
Wrote `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Controller/UsersController.php`
Bake is detecting possible fixtures...

Baking test case for AppControllerUsersController ...

Creating file /Users/taka/htdocs/_template/php/cakephp3/bookmarker/tests/TestCase/Controller/UsersControllerTest.php
Wrote `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/tests/TestCase/Controller/UsersControllerTest.php`

Baking `index` view template file...

Creating file /Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Template/Users/index.ctp
Wrote `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Template/Users/index.ctp`

Baking `view` view template file...

Creating file /Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Template/Users/view.ctp
Wrote `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Template/Users/view.ctp`

Baking `add` view template file...

Creating file /Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Template/Users/add.ctp
Wrote `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Template/Users/add.ctp`

Baking `edit` view template file...

Creating file /Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Template/Users/edit.ctp
Wrote `/Users/taka/htdocs/_template/php/cakephp3/bookmarker/src/Template/Users/edit.ctp`
Bake All complete.

MacでCakePHP3をComposerを使ってセットアップ

MacでCakePHP3をComposerを使ってセットアップ

title

title

まずMacにHomebrew版のPHPをインストール。

参考 : MacのPHPをphp7へ変更(HomeBrewでPHP71のインストール)

PHP拡張のintlをインストール

CakePHPではIntl(国際化用拡張モジュール ICUのラッパー)が使われるので先にインストール

(参考サイト)
http://php.net/manual/ja/intro.intl.php
https://book.cakephp.org/3.0/ja/installation.html

brewを検索

$ brew search intl
homebrew/php/php53-intl     homebrew/php/php54-intl     homebrew/php/php55-intl     homebrew/php/php56-intl     homebrew/php/php70-intl     homebrew/php/php71-intl     homebrew/php/php72-intl     intltool

インストール

$ brew install php71-intl 
==> Installing php71-intl from homebrew/php
==> Downloading https://homebrew.bintray.com/bottles-php/php71-intl-7.1.8_18.sierra.bottle.tar.gz
######################################################################## 100.0%
==> Pouring php71-intl-7.1.8_18.sierra.bottle.tar.gz
==> Caveats
To finish installing intl for PHP 7.1:
  * /usr/local/etc/php/7.1/conf.d/ext-intl.ini was created,
    do not forget to remove it upon extension removal.
  * Validate installation via one of the following methods:
  *
  * Using PHP from a webserver:
  * - Restart your webserver.
  * - Write a PHP page that calls "phpinfo();"
  * - Load it in a browser and look for the info on the intl module.
  * - If you see it, you have been successful!
  *
  * Using PHP from the command line:
  * - Run `php -i "(command-line 'phpinfo()')"`
  * - Look for the info on the intl module.
  * - If you see it, you have been successful!
==> Summary
🍺  /usr/local/Cellar/php71-intl/7.1.8_18: 7 files, 552.6KB

プロジェクトをつくってみる

公式サイトを参考にcomposerのcreate-projectでプロジェクトを作ってみる。

(参考)
インストール | Cakephp
Composerのcreate-projectが何をやっているのか調べてみた

以下実行ろぐ。
composer self-updateは実行済で、途中で パーミッション設定する?(Set Folder Permissions ? (Default to Y) [Y,n]? y)と聞かれるのでyと答えた。

$ composer create-project --prefer-dist cakephp/app my_app_name
Installing cakephp/app (3.5.0)
  - Installing cakephp/app (3.5.0): Loading from cache
Created project in my_app_name
Loading composer repositories with package information
Updating dependencies (including require-dev)
Package operations: 39 installs, 0 updates, 0 removals
  - Installing cakephp/plugin-installer (1.0.0): Downloading (100%)         
  - Installing aura/intl (3.0.0): Downloading (100%)         
  - Installing mobiledetect/mobiledetectlib (2.8.25): Downloading (100%)         
  - Installing psr/http-message (1.0.1): Downloading (100%)         
  - Installing zendframework/zend-diactoros (1.4.1): Downloading (100%)         
  - Installing psr/log (1.0.2): Downloading (100%)         
  - Installing cakephp/chronos (1.1.2): Downloading (100%)         
  - Installing cakephp/cakephp (3.5.0): Downloading (100%)         
  - Installing symfony/polyfill-mbstring (v1.5.0): Downloading (100%)         
  - Installing symfony/yaml (v3.3.6): Downloading (100%)         
  - Installing symfony/debug (v3.3.6): Downloading (100%)         
  - Installing symfony/console (v3.3.6): Downloading (100%)         
  - Installing symfony/filesystem (v3.3.6): Downloading (100%)         
  - Installing symfony/config (v3.3.6): Downloading (100%)         
  - Installing robmorgan/phinx (v0.8.1): Downloading (100%)         
  - Installing cakephp/migrations (1.7.1): Downloading (100%)         
  - Installing m1/env (2.1.0): Downloading (100%)         
  - Installing josegonzalez/dotenv (2.1.0): 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 (v3.1.0): Downloading (100%)         
  - Installing symfony/var-dumper (v3.3.6): Downloading (100%)         
  - Installing psy/psysh (v0.8.11): Downloading (100%)         
  - Installing jdorn/sql-formatter (v1.2.17): Downloading (100%)         
  - Installing symfony/process (v3.3.6): Downloading (100%)         
  - Installing symfony/finder (v3.3.6): Downloading (100%)         
  - Installing seld/phar-utils (1.0.1): Downloading (100%)         
  - Installing seld/jsonlint (1.6.1): Downloading (100%)         
  - Installing seld/cli-prompt (1.0.3): Downloading (100%)         
  - Installing justinrainbow/json-schema (5.2.1): Downloading (100%)         
  - Installing composer/spdx-licenses (1.1.6): Downloading (100%)         
  - Installing composer/semver (1.4.2): Downloading (100%)         
  - Installing composer/ca-bundle (1.0.7): Downloading (100%)         
  - Installing composer/composer (1.5.1): Downloading (100%)         
  - Installing cakephp/debug_kit (3.11.0): Downloading (100%)         
  - Installing cakephp/bake (1.4.1): Downloading (100%)         
  - Installing squizlabs/php_codesniffer (3.0.2): Downloading (100%)         
  - Installing cakephp/cakephp-codesniffer (3.0.1): Downloading (100%)         
cakephp/app suggests installing markstory/asset_compress (An asset compression plugin which provides file concatenation and a flexible filter system for preprocessing and minification.)
cakephp/app suggests installing dereuromark/cakephp-ide-helper (After baking your code, this keeps your annotations in sync with the code evolving from there on for maximum IDE and PHPStan compatibility.)
cakephp/app suggests installing phpunit/phpunit (Allows automated tests to be run without system-wide install.)
cakephp/cakephp suggests installing lib-ICU (The intl PHP library, to use Text::transliterate() or Text::slug())
symfony/console suggests installing symfony/event-dispatcher ()
m1/env suggests installing m1/vars (For loading of configs)
symfony/var-dumper suggests installing ext-symfony_debug ()
psy/psysh suggests installing ext-pdo-sqlite (The doc command requires SQLite to work.)
psy/psysh suggests installing hoa/console (A pure PHP readline implementation. You'll want this if your PHP install doesn't already support readline or libedit.)
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
> CakeComposerInstallerPluginInstaller::postAutoloadDump
> AppConsoleInstaller::postInstall
Created `config/app.php` file
Set Folder Permissions ? (Default to Y) [Y,n]? y
Permissions set on /Users/taka/htdocs/my_app_name/tmp/cache
Permissions set on /Users/taka/htdocs/my_app_name/tmp/cache/models
Permissions set on /Users/taka/htdocs/my_app_name/tmp/cache/persistent
Permissions set on /Users/taka/htdocs/my_app_name/tmp/cache/views
Permissions set on /Users/taka/htdocs/my_app_name/tmp/sessions
Permissions set on /Users/taka/htdocs/my_app_name/tmp/tests
Permissions set on /Users/taka/htdocs/my_app_name/tmp
Permissions set on /Users/taka/htdocs/my_app_name/logs
Updated Security.salt value in config/app.php

ローカルサーバーを起動して確認

ローカルのApacheを起動して webrootをドキュメントルートに指定してアクセス。
うまく行った模様あとはDBとかsaltとか設定すれば大丈夫そう。パーミッションとか自動でやってくれるのは助かる。DBの設定とか、saltの設定などまとめて行うシェルスクリプトとか書いておくともっと楽にプロジェクト作れそうだけど、そこまで頻度ないか。

title

title

MacのPHPをphp7へ変更(HomeBrewでPHP71のインストール)

MacのPHPをphp7へ変更

MacBookPro Sierra version 10.12.6を利用中phpのMacデフォルトのバージョンが5.6系でいろいろ支障がでるようになってきたので、バージョンを7.xへ上げることにしました。

まずもとのPHPのバージョンとコマンドの場所を確認

$ php -v
PHP 5.6.30 (cli) (built: Feb  7 2017 16:18:37) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies
$ which php
/usr/bin/php

HomeBrewでPHPのインストール

HomeBrewのアップデート

$ brew update

tapでリポジトリの追加

//追加
$ brew tap homebrew/dupes
$ brew tap homebrew/versions
$ brew tap homebrew/homebrew-php
//確認
$ brew tap
homebrew/core
homebrew/dupes
homebrew/php
homebrew/versions

phpのインストール(2017.08時点での最新7.1)

インストール

$ brew install php71

エラーがでる。(マニュアル書き込み権限がないみたい。

Error: The `brew link` step did not complete successfully
The formula built, but is not symlinked into /usr/local
Could not symlink share/man/man8/php-fpm.8
/usr/local/share/man/man8 is not writable.

権限(オーナー)を変更して一度アンインストールして再インストール(>>エラーでずOK

$ sudo chown ユーザ名 /usr/local/share/man/man8
$ brew install php71

確認 >> あれ5.6になっている。

$ php -v
PHP 5.6.30 (cli) (built: Feb  7 2017 16:18:37) 
Copyright (c) 1997-2016 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2016 Zend Technologies

PHPの場所確認(macのデフォルトを見ている

$ which php
/usr/bin/php

パスの確認(brewのコマンドが入る/usr/local/binが優先になっているかどうか

$ echo $PATH
/usr/local/share/npm/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/Applications/MAMP/Library/bin
(パスは大丈夫)

/usr/local/binにコマンドがあるか確認 >>ない。

$ ls -la /usr/local/bin/ | grep 'php'

php自体インストールできているか確認 >> ある。

$ ls -la /usr/local/Cellar/ | grep 'php'
drwxr-xr-x   3 taka  admin  102  8 21 04:53 php71

ちょくせつ叩いてみる。 >>大丈夫(パスが単に通って無いだけみたい)

$ /usr/local/Cellar/php71/7.1.8_20/bin/php -v
PHP 7.1.8 (cli) (built: Aug  7 2017 15:02:45) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies

brewで入れたPHPへパスを通す

ログ確認するとCLI(コマンドラインインターフェース)で使うPHPをswapするならパスを追加してとあります。

✩✩✩✩ 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/php71)/bin:$PATH"

zshをつかっているので.zshrcに
export PATH=“$(brew –prefix homebrew/php/php71)/bin:$PATH”
を追記して編集内容を再度読み込み

$ vim ~/.zshrc
$ source ~/.zshrc

パスの確認>>OK

$ echo $PATH
/usr/local/opt/php71/bin:/usr/local/share/npm/bin:/usr/local/bin:/usr/local/sbin:/usr/bin:/usr/sbin:/bin:/sbin:/Applications/MAMP/Library/bin

PHP確認

$ php -v
PHP 7.1.8 (cli) (built: Aug  7 2017 15:02:45) ( NTS )
Copyright (c) 1997-2017 The PHP Group
Zend Engine v3.1.0, Copyright (c) 1998-2017 Zend Technologies

参考サイト

MacOSXでbrew install phpをVersion7.1へ

nginxでのワードプレスのパーマリンク設定

nginxでのワードプレスのパーマリンク設定

すこしはまったのでnginxでのwordpressのパーマリンク設定のメモ

ポイントとしては、“try_files $uri @wordpress;”と try_filesディクレティブでURLが見つからないファイルはすべて location @wordpress { ~ } ブロックに回す。
@wordpress { ~ } ブロックでは、リクエストのURIにかかわらずすべて index.phpを実行する設定とする。
以下設定全部。

server {
    #ポート80番をlisten
    listen       80;
    #マルチドメインのサーバー名
    server_name  cycling-course.okinawa;
    #ドキュメントルート
    root   /usr/share/nginx/html/cycling-course.okinawa;
    # ApacheでいうDirectoryIndex
    index  index.php index.html;
    # ロケーションドメイン/に適用ブロック
    location / {
        # 左側からマッチするかチェックしていく 
        # http://cycling-course.okinawa/2017/10/ だったら、$urlは、2017/10/
        # チェック1 '2017/10/' があるか
        # チェック2 '2017/10//' があるか
        # 適合がないので、@wordpressブロックを適用する
        try_files $uri $uri/ @wordpress;
    }
    # 拡張子が .phpにマッチした場合に適用されるブロック
    location ~ .php$ {
        # 前のブロック同様にマッチしなければ @wordpressブロックを適用する指定
        try_files $uri @wordpress;
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+.php)(.*)$;
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        # 先に include しておかないと次の$fastcgi_script_nameが無効になって
        include  fastcgi_params;
        fastcgi_param  SCRIPT_FILENAME  $document_root$fastcgi_script_name;
    }
    # ファイルがマッチしない場合に適用する@wordpressブロック
    location @wordpress {
        fastcgi_index index.php;
        fastcgi_split_path_info ^(.+.php)(.*)$;
        fastcgi_pass   unix:/var/run/php-fpm/php-fpm.sock;
        include  fastcgi_params;
        # ※ここがミソ。リクエストに関係なくすべて、index.phpを実行する
        fastcgi_param  SCRIPT_FILENAME  $document_root/index.php;
    }
}

参考サイト

http://qiita.com/egnr-in–6matroom/items/a08f4851bf16d0131e60

http://qiita.com/kotarella1110/items/f1ad0bb40b84567cea66

Powered by WordPress & Theme by Anders Norén