- 投稿日:2020-03-15T21:53:31+09:00
ローカル環境へのWordPressインストール方法
はじめに
ここでは、MAMPを使ってローカル環境にWordPressをインストールする方法について解説します。
Windows環境を想定しています。WordPress用データベースの作成
まず、WordPress用に、MySQLデータベースを作成します。
データベース名はWordPressインストール時に入力しますので、WordPress用のデータベースであることが分かりやすい名前にしておくと良いです。WordPressのインストール
WordPress公式ページにアクセスし、「Wordpressを入手」をクリックします。
すると、ダウンロードページに移ります。
ここで、WordPress X.X.Xをダウンロードをクリックすると、zipファイルがダウンロードされます。zipファイルを展開し、MAMPディレクトリのhtdocsディレクトリ下にコピーします(デフォルトの設定の場合)。
そして、「localhost:80/wordpress」にアクセスします(Macの場合はlocalhost:8888)。
すると、以下のような画面が出てくるので、「さあ始めましょう!」をクリックします。すると、データベースにアクセスするための情報の入力を求められるので、上で作成したデータベース名などを入力します。
「インストール実行」をクリックすると、WordPressがインストールされます。
その後、管理画面にログインするためのユーザー名やパスワードを作成すると、ローカル環境でWordPressを利用できるようになります。
まとめ
ここでは、ローカル環境にWordPressをインストールする方法について解説しました。
WordPressはレンタルサーバーにインストールすることが多いと思いますが、ローカル環境にもインストールしておくと、公開前のサイトの記事の下書きをストックしておいたりなどの使い方ができます。
- 投稿日:2020-03-15T15:52:15+09:00
laravelの学習のためにECサイトを作成した
- 投稿日:2020-03-15T13:52:19+09:00
LARAVEL/PHPでよく使うデバッグ方法
はじめに
当記事は筆者がLravel/PHPで開発している際によく使うデバッグ方法のまとめです。
dump()
dump.php$array = array(1,2,3,'いち','に','さん'); dump($array);dump.phparray:6 [▼ 0 => 1 1 => 2 2 => 3 3 => "いち" 4 => "に" 5 => "さん" ]dump()はシンプルに中の情報を表示するだけですね。
なお、処理は止まらずに死にません。verdump()
verdump.php$array = array(1,2,3,'いち','に','さん'); var_dump($array);verdump.phparray (size=6) 0 => int 1 1 => int 2 2 => int 3 3 => string 'いち' (length=6) 4 => string 'に' (length=3) 5 => string 'さん' (length=6)ver_dump()はdump()と違って
型が出力
されます。
なお、こちらも処理は止まらず死にません。dd()
dd.php$array = array(1,2,3,'いち','に','さん'); dd($array);dd.phparray:6 [▼ 0 => 1 1 => 2 2 => 3 3 => "いち" 4 => "に" 5 => "さん" ]一見dump()と似ていますが、dd()は処理の実行が止まって死んでいます。
要するにdd()関数がある行以降の処理は行われません。下記の例でいうと、2行目で処理が止まっているため、三行目が実行されることはありません。
dd.php$array = array(1,2,3,'いち','に','さん'); dd($array); array_push($array, 'よん');//←実行されない。dd()とはdump and die の略です。
Debugbar
実務でもよく使うのがDebugbarだと思います。
特にAJAXなどを利用して内部のAPIを使う場合はdump()やdd()が使えないので重宝します。導入に関しては下記記事を参照してください。
Laravel5.7: Laravel Debugbarを使う
Debugbar.phppublic function store(Request $request) { $like = new Like; \Debugbar::info(1); $like->user_id = $request->user; \Debugbar::info(2); $like->post_id = $request->post; \Debugbar::info(3); \Debugbar::info($like); $like->save(); return; }info 1 info 2 info 3 info App\Like {#322 ▶}1,2,3は処理がどこまで実行されているか確認するためのtipsです。
4つ目のinfoで$likeの情報が取得できましたね。viewはどうしたらいいの?
Viewに関してはテンプレートエンジンの仕様を確かめてみてください。
筆者が利用しているBladeではphpディレクティブ(@php)が利用できました。debug.php@php Debugbar::info(1); dump(1); ver_dump(1); dd(1); @endphp終わりに
この四つさえ知っとけば、デバッグ作業で困ることはないと思います(多分)。
- 投稿日:2020-03-15T13:19:04+09:00
strpos()の挙動に気をつける
TL;DR
- 第二引数には文字列を渡すこと
- 扱うPHPのバージョンによって挙動に差異があるので、自身が扱うPHPのバージョンを把握すること
前提
- PHP ver:7.3.13
- strposの第一引数をhaystack、第二引数をneedleと以降では記載する
- 検証環境は、CakePHPのconsoleを利用する
概要
- strpos()の挙動について注意点を紹介する
- 主に文字列と数値を渡した場合の挙動について紹介する
- その他の値を渡した場合の挙動は紹介しない
※ strpos()については下記の引用を参考に
strpos
(PHP 4, PHP 5, PHP 7)strpos — 文字列内の部分文字列が最初に現れる場所を見つける
パラメータ ¶
haystack
検索を行う文字列。needle
needle が文字列でない場合、 数値に変換され、文字の通常の値として扱われます。 この振る舞いは PHP 7.3.0 以降では推奨されないので、 この機能を使用しないことを強く推奨します。 意図した動作に依存する場合、 needle を string に明示的にキャストするか、 明示的に chr() 関数を呼び出すべきでしょう。offset
指定すると、文字列内での検索開始位置がその位置になります。 負の数を指定すると、文字列の末尾からこの数だけ戻った場所から検索を開始します。返り値 ¶
needle が見つかった位置を、 haystack 文字列の先頭 (offset の値とは無関係) からの相対位置で返します。 文字列の開始位置は 0 であり、1 ではないことに注意しましょう。needle が見つからない場合は FALSE を返します。
引用元:https://www.php.net/manual/ja/function.strpos.php
検証
1. haystack ・ needleに "文字列" を渡す
>>> $haystack = '100'; => "100" >>> $needle = '100'; => "100" >>> strpos($haystack, $needle) => 0
- strpos()の実行結果が0を返してるので、needleが見つかった事が確認できる
2. haystackは "文字列" 、needleは "数値" を渡す
>>> $haystack = '100'; => "100" >>> $needle = 100; => 100 >>> strpos($haystack, $needle) PHP Deprecated: strpos(): Non-string needles will be interpreted as strings in the future. Use an explicit chr() call to preserve the current behavior in /var/www/hoge.jpeval()'d code on line 1 => false
- strpos()の実行結果がFALSEを返してるため、needleが見つからなかった事が確認できる
- また、PHP Deprecatedというエラーが表示されている
- needleに対して文字列ではない値を渡している事によるエラー
- PHPドキュメントに記載されてるように、PHP 7.3以降では、needleに渡された値を文字列に変換するという処理は行われない
3. haystackは "数値" 、needleは "文字列" を渡す
>>> $haystack = 100; => 100 >>> $needle = '100'; => "100" >>> strpos($haystack, $needle) => 0 >>>
- strpos()の実行結果が0を返してるので、needleが見つかった事が確認できる
所感
- この検証を実施するきっかけとなったのが、検証2が発生したからなんだが、そもそもstrpos()がそこまで型に厳格な関数だと初めて知った(PHPという言語自体そこまで型に厳格な言語ではないという認識もあったので)
- また、PHPドキュメントを見る限りhaystackには文字列を渡さなければならない感があるんだが、検証3にあるように、文字列以外の値(今回でいうと数値)を許容してるのは何故なのか・・・?
- 言語という大枠で見るべきか、関数という枠で見るべきなのか、ちょっとわからないが、型に対して厳格さと寛容さの狭間にあるこの状態に気持ち悪さを感じるのは致し方ない事なのか・・・?
以上
- 投稿日:2020-03-15T07:46:14+09:00
商用環境でも使っている Laravel 用 php-fpm イメージの Dockerfile レシピ
これは何
Laravel 用 php-fpm イメージの Dockerfile。
(多少はフォーマット変わろうとも)色んなところでずっと使いまわししそうなのでメモ。完全に個人の秘伝のタレ化するよりは情報公開したほうが自社にとっても利益があるだろうと判断(笑)
異論は無限に受け付けるので改善点などあればコメントください。レシピ
FROM golang:1.13 as HTTP2FCGI_BUILD # http2fcgi のビルド RUN apt update -y \ && go get -v -ldflags '-w -s' github.com/alash3al/http2fcgi/... FROM php:7.4-fpm-alpine # Goバイナリが実行できるようにする # https://stackoverflow.com/questions/34729748/installed-go-binary-not-found-in-path-on-alpine-linux-docker RUN mkdir /lib64 \ && ln -s /lib/libc.musl-x86_64.so.1 /lib64/ld-linux-x86-64.so.2 # http2fcgi のインストール COPY --from=HTTP2FCGI_BUILD /go/bin/http2fcgi /bin/http2fcgi # Git のインストール RUN apk add --update --no-cache git # Composer のインストール RUN set -eux \ && curl -sS https://getcomposer.org/installer | php -- --install-dir=/usr/local/bin --filename=composer \ && composer global require hirak/prestissimo \ && composer config -g repos.packagist composer https://packagist.jp # PHP 拡張のインストール RUN set -eux \ && apk add --update --no-cache autoconf g++ libtool make libzip-dev libpng-dev libjpeg-turbo-dev freetype-dev \ && pecl install redis \ && docker-php-ext-configure gd --with-jpeg=/usr \ && docker-php-ext-configure opcache --enable-opcache \ && docker-php-ext-install opcache bcmath pdo_mysql gd exif zip \ && docker-php-ext-enable redis \ && apk del autoconf g++ libtool make \ && rm -rf /tmp/* # ビルド引数 ARG DEPLOY ARG PHP_COVERAGE_DRIVER="" # カバレッジ計測およびデバッグ用 PHP 拡張のインストール # - ローカルでは xdebug を入れる # - CI では pcov を入れる # - プロダクションでは何も入れない RUN set -eux \ && apk add --update --no-cache autoconf g++ libtool make \ && if [ "$DEPLOY" = "local" -a "$PHP_COVERAGE_DRIVER" = "pcov" ]; then \ pecl install pcov; \ docker-php-ext-enable pcov; \ echo "pcov.directory = /code/app" >> $PHP_INI_DIR/conf.d/docker-php-ext-pcov.ini; \ elif [ "$DEPLOY" = "local" ]; then \ pecl install xdebug; \ docker-php-ext-enable xdebug; \ fi \ && apk del autoconf g++ libtool make \ && rm -rf /tmp/* # php.ini のコピー(ビルド引数によって分岐) COPY docker/php-fpm/conf.d/$DEPLOY.ini /usr/local/etc/php/conf.d/custom.ini # Composer 依存パッケージ定義のコピー COPY composer.json /code/composer.json COPY composer.lock /code/composer.lock # Composer 依存パッケージをアプリケーションから分離して先にインストール(ビルド時間短縮のため) ARG GITHUB_TOKEN="xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx" RUN set -eux \ && mkdir -p ~/.composer \ && printf '{"github-oauth":{"github.com":"%s"}}' $GITHUB_TOKEN > ~/.composer/auth.json \ && cd /code \ && composer install --no-scripts --no-autoloader \ && rm ~/.composer/auth.json # アプリケーションのコードをコピー(.dockerignore で vendor や .git は除外されている) COPY . /code # オートロードファイルの生成 # (ローカルではキャッシュを生成しない) RUN set -eux \ && cd /code \ && composer dump-autoload -o \ && if [ "$DEPLOY" != "local" ] ; then \ php artisan config:cache; \ php artisan route:cache; \ fi \ && chown -R www-data:www-data storage USER www-data WORKDIR /code # php-fpm と http2fcgi を起動 # (プリロードを導入したら opcache:compile は消す) CMD ["sh", "-c", "\ { \ sleep 5 && \ http2fcgi --fcgi tcp://localhost:9000 \ --http localhost:8000 \ --root /code/public & \ sleep 10 && \ ./artisan opcache:compile & \ } & \ exec php-fpm"]ポイント
- ビルド引数としてデプロイ先環境を表す
DEPLOY
が必要。ローカルおよび CI のテスト実行用ビルドではlocal
を指定する。- ビルド高速化のため,パッケージインストールは
composer.json
composer.lock
に変更があった場合にしか走らないように工夫している。
composer.json
とcomposer.lock
をコンテナ内にコピーcomposer install --no-scripts --no-autoloader
で,スクリプト実行無しおよびオートローダ作成無しにして,vendor
ディレクトリへのファイル投入だけを目的として実行。- アプリケーションのコードをマウント。この際
vendor
ディレクトリは除外されている。composer dump-autoload -o
で後からオートローダを作成。- パッケージインストール高速化のため, Composer の並列インストールプラグイン hirak/prestissimo および日本国内ミラー Packagist.JP を使用している。
- 但し, Circle CI などでのビルドを考慮する場合はミラーではなく本家を参照したほうがいいかもしれない。
ARG
で分岐の余地あり。- GitHub のプライベートリポジトリからパッケージをインストールできるように, 会社の共用アカウントで発行したこの目的専用の
GITHUB_TOKEN
をARG
のデフォルト値としてハードコーディング。- エクステンションとして,さまざまな PHP アプリケーションで頻繁に必要になりそうな
opcache
bcmath
pdo_mysql
gd
exif
zip
あたりをカバー。必要に応じて追加と削除の余地あり。- カバレッジドライバとして krakjoe/pcov を採用。 CI の高速化のため,
xdebug
はローカルのみインストール対象にし, CI ではpcov
でカバレッジを取るようにしている。- OPCache のコントロールユーティリティ appstract/laravel-opcache および Golang 製の軽量 FastCGI リバースプロキシ alash3al/http2fcgi を採用。
- PHP 7.4 のプリロード対応が入った後は不要になるが,現状 Laravel ではまともに動かない。
- 起動時にキャッシュを温めている。但し若干 php-fpm が準備完了状態になるまで時間差があるため,適当な時間
sleep
を入れている。- Golang バイナリのビルドのためにマルチステージビルドを使用している。
その他注意点
DEPLOY
はあくまでビルド用に存在する環境変数であり,コンテナ実行時には存在しない。ところがビルド時にconfig:cache
を呼ぶタイミングでは存在しているため,設定ファイルにenv('DEPLOY')
とか書いてしまうとそれが拾われてキャッシュされてしまい,キャッシュしないと動かないという歪んだ状態に陥ってしまうので注意する。この変数はアプリケーションからは参照してはいけない。
- 投稿日:2020-03-15T03:26:14+09:00
CakePHPハマったの対策
はじめに
解決が根本的なものか定かではありません。
少し前に進む手助けとなると思って書いてます。少しずつ増やしていきそうです!
ちょっとメモ的なので絵文字とかそんな多くないです。(。・ω・。)そこ?そこなのか!???早速
Argument 1 passed to Cake\Http\Session::_overwrite() must be of the type array, null given, called in /var/www/html/vendor/cakephp/cakephp/src/Http/Session.php on line
内容:overwriteの関数、配列入れるじゃないとダメなんですが、、、nullあたえとるやろ!(。・ω・。)お怒りのようですね、、、
対策:ファイル権限の問題のようでした。
$ chmod 777 /Users/****/Docker/cakePHP/apach/html/tmp/cache/models/myapp_cake_model_default_articles_tags※/Users/****/Docker/cakePHP/apach/html/は適宜変更
※myapp_cake_model_default_articles_tagsは適宜変更を打つと左図から右図のようになります。
あ、なっていないのは全部やってください。SQLSTATE[42S02]: Base table or view not found: 1146 Table 'mydb01.user_sessions' doesn't exist
内容:user_sessionsっていう感じのtabelやviewありません!!(。・ω・。)ふ〜〜〜ん
対策:user_sessionsのテーブルないならそこを探さないようにしました。強行突破!
'handler' => [ 'engine' => 'DatabaseSession', 'model' => 'UserSessions' // DB table name is user_sessions ],のような記述場所あるので以下のようにコメントアウト
'handler' => [ //'engine' => 'DatabaseSession', //'model' => 'UserSessions' // DB table name is user_sessions ],https://book.cakephp.org/4/ja/development/sessions.html
は読んでおいた方が良さそう、、、SQLSTATE[HY000]: General error: 8 attempt to write a readonly database
エラー内容あっているか少し不安
内容:書き込みたいのに読み取り専用になってる!どないしよ!(。・ω・。)どないしよ!
対策:書き込みできるように権限を与える
$ chmod -R 777 /Users/***/Docker/cakePHP/apach/html/sample/tmp$ chmod -R 777 /Users/***/Docker/cakePHP/apach/html/sample/logs※/Users/***/Docker/cakePHP/apach/html/sample/は適宜変更
ちなみにDockerにあるからとDockerコンテナ中で行っているかもですが私の場合macにフォルダがあるのでmacの方から権限変更しないとダメでした。確か、、、
さらにちなみにこれ公式にも書いてあります以下
https://book.cakephp.org/4/ja/installation.html#id8CakePHP は、幾つかの操作のために tmp ディレクトリーを使用します。 モデルの定義や、ビューのキャッシュ、セッション情報などです。 logs ディレクトリーは、デフォルトの FileLog エンジンがログファイルを 出力するために使われます。
そのため、 CakePHP をインストールしたら logs, tmp ディレクトリーと その全てのサブディレクトリーに、ウェブサーバーの実行ユーザーによる書き込み権限があることを 必ず確認してください。
まだ色々できていないけど、、、現状況
一から自分でやってみないと本当に何も見えてこない(/ω\)大変ですがお互い頑張りましょうね!!(/ω\)
ちなみにDockerでやってます。終わりに
あとなんでCakePHPでlaravelとかでないかって???
CakePHPという名前の方が断然私とあうと思ったから。ケーキ!ケーキ!
と言うのとCakePHPの方がドキュメント多そうって。
っと思ったけどってなったので自分で記事をあげるといったやつです(o*。_。)o
というかPythonのDiangoとCakePHPで悩んでいて、もし誰かと何かやるってなった時CakePHPの方がなんか色々な面で良さそうかなと。自分の将来的な価値?より誰かとやりやすそうな方を優先しました。一緒にやってくれる人がいたらの話ですが、、、。
- 投稿日:2020-03-15T02:28:59+09:00
【MacOS】Laravelの環境構築 ~公式サイトコピペでうまくできんかった~
きっかけ
普段はフロントエンドを勉強しているのですが、
ど深夜に急に
「Laravelやってみたい」
と思い公式サイトとcomposerで環境づくりしてました。
そして見事にハマり、時間取られた...その後、どうやって解消したのかをサクッと紹介したいと思います。
超シンプルに書きます。環境
macOS Mojave
10.14.6やりかた
Homebrew → Composer → Laravel
の順でインストールしていきます!Homebrew
↓まずはHomebrewのサイトでインストールのスクリプト部分をコピーします。
https://brew.sh/index_ja執筆時のスクリプト./bin/bash -c "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install.sh)"これをターミナルで実行。
途中でエンター押すように促されるので、押しましょう。
しばらく待機し、完了したらHomeBrewインストール終了。composer
先ほどインストールしたHomebrewを使ってインストールします。
以下コマンドを実行。ターミナル.brew install homebrew/core/composerこれもしばらく待機し、完了したらcomposeインストール完了。
試しにターミナルで「composer」と打ち込んで
kitaken$ composer ______ / ____/___ ____ ___ ____ ____ ________ _____ / / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/ / /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ / \____/\____/_/ /_/ /_/ .___/\____/____/\___/_/ /_/と出れば成功。(実行した後、ターミナルで上に戻るとあります。)
Laravel
最後にcomposerでLaravelをインストールします!
Laravelを構築したいファイル下に移動した後、
composer create-project --prefer-dist laravel/laravel プロジェクト名
でLaravelの基盤が作れる。
プロジェクト名は何でもOK。
今回「MyLaravel」とするとターミナル.composer create-project --prefer-dist laravel/laravel MyLaravelを実行し、しばらく待つと最後に「Application key set successfully.」
と出れば成功です!プロジェクト作りたいときは、毎回このコマンドを使います!
なぜできなかったのか
Homebrewを使わないやり方をしようとしていた...?
使わないやり方が上手くできませんでした...そして最初からやり直したことで、うまくいきました。
もしそれでもできないという方は、やり直してみたり、下記参考記事をみてみてください。
参考記事
https://tektektech.com/laravel-make-environment/22/
- 投稿日:2020-03-15T00:35:00+09:00
Wordpress5 カスタムフィールの作成とテンプレートでの表示方法
Wordpress5のカスタムフィールドの作り方
Wordpress5からカスタムフィールドは右上の設定アイコンから表示できるようになった。チェックを入れ、「有効化してリロード」ボタンを押せば表示されるようになる。
カスタムフィールドは投稿画面の下で作成する。フィールド名を記入し、値を入れるだけでOK。
次からは選択フォームに以前作成したカスタムフィールドが表示されるので、それを選択する。
カスタムフィールドの値を表示する方法
一覧ページや記事ページの表示したい場所にコードを追加するだけ。
echo get_post_meta($post->ID, 'key', true);テンプレートに追記する場合はこんな感じ。
<div class="entry-meta"> <ul class="nav"> <li>投稿日: <?php echo get_the_date('Y-m-d'); ?></li> <li>サイズ: <?php echo get_post_meta($post->ID, 'size', true); ?></li> </ul> </div><!-- .entry-meta -->1つのカスタムフィールドで複数の値を入力した場合の表示方法
1つのカスタムフィールド名(キー)に対して複数の値を入れる場合は、必要な分だけキーを追加して1つづつ値を入れていく。
値の表示方法は配列の表示と同じ。
<?php $colors = get_post_meta($post->ID, 'color', false); if( count( $colors ) != 0 ) { ?> <ul> <?php foreach($colors as $color) { echo '<li>'.$color.'</li>'; } ?> </ul> <?php } ?>