- 1. php7.0からの新機能null合体演算子の使い方
- 2. 20代エンジニア格付けチェックCODING ~定時後の勉強会スペシャル~ 開いてみた【社内勉強会・Paiza編】
- 3. LaravelのコアコードからMiddlewareとControllerの実行手順を理解する
- 4. Laravel Socialiteを使ってQiitaアカウントでログイン
- 5. AWS EC2にてwordpressを使うためのメモ
- 6. Laravel プロジェクト作成まで
- 7. Instagram Graph APIを使って「いいね数」などを集計する
- 8. 【PHP8.0】PHPでunion型が使えるようになる
- 9. アクション内のreturn箇所での記述
- 10. Fetch APIでPOSTしたJSONをPHPで受け取ってエコーするだけ
- 11. 【PHP】Laravel 学習メモ / 簡易アプリで流れを掴む1(表示まで)
- 12. 【2019年版】パーフェクトPHP解説その2 6章 Gitリポジトリ作成〜DB作成
- 13. AWS移行の全記録
- 14. AWS移行 – アプリケーション側の改修ポイント
- 15. AWS移行 – ネットワーク関連でやったこと
- 16. PHP の脆弱性が発表されています CVE-2019-11043
- 17. AtomでPHP学習を始めるときとりあえず入れといたパッケージたち
- 18. GAE/PHP72 CakePHP3のindex.php問題
- 19. 【Laravel】ディレクティブ一覧
- 20. 【PHP】Laravel学習メモ / 三項演算子
php7.0からの新機能null合体演算子の使い方
php7系は5.6からメジャーバージョンとして大幅に変更されていますが、
タイプヒンティングなど有意義なものが多いです。null合体演算子はその中でも便利な新機能です。
## null合体演算子
phpはissetやempty、is_nullなどの型判定がありますが
isset()と三項演算子を組み合わせたパターンはよくあると思います。“`php
$hoge = ‘a’;
$test = isset($hoge) ? $hoge : ‘other’;
var_dump($test);
“`これを
“`php
$hoge = ‘a’;
$test = $hoge ?? ‘other’;
var_dump($test);$hoge = null;
$test = $hoge ?? ‘other’;
var_dump($test);
“`と書くことができます。
“`
出力結果
ーーーーー
string(1) “a”
string(5) “other”
“`スッキリしたコードになるので地味にとても便利です。
20代エンジニア格付けチェックCODING ~定時後の勉強会スペシャル~ 開いてみた【社内勉強会・Paiza編】
前提
—自分の現在の所属はシステム開発部、既存パッケージの改修・保守を行っている部署です。
かなり息の長い自社パッケージ(LAMP構成)を2か月に一度改修しリリースするサイクルで活動しています。
開発部メンバーは、エンジニアとしての経験が深い方から、新卒入社の社員まで様々です。そんな中でPaizaを使って格付けチェックしてみたので、その報告と感想です。
なぜ勉強会をやろうと思ったか?
—* 自社パッケージの改修・保守に傾注しているため、スクラッチでコードを書く機会がない
* 中途社員はともかく、新卒社員が自社パッケージの言語以外に触れる機会がない
* メンバー間で各人の得意なスキルを知る機会がないやったこと
—20代の開発メンバー5~6人に声をかけて、だいたい週2回のペースで[Paiza](https://paiza.jp/)の問題を解きました。
Paizaとは、出された問題をオンライン実行環境でコーディングし、コーディング速度と実行速度を計測できるサイトです。
オンライン実行環境が準備されており、ソフトのインストール不要でだれでもすぐ参加できるため、
LaravelのコアコードからMiddlewareとControllerの実行手順を理解する
# 前提
Laravelでは、ミドルウェア(主にリクエスト時とかレスポンス時にフィルタリングとしての機能を書く)からコントローラー(実際のリクエストに対する処理を書く)の実行を、柔軟に変更するためにIlluminate\Pipeline\Pipelineを実装し対応しているPipelineは、実行前に個々の実装(ここではMiddleware)した処理を構成し実行することができる
多段のクロージャでタマネギみたいな構造を構成する
これでMiddlewareのオン、オフや優先度の変更が簡単にできるようになっているLaravelはリクエストのハンドリングの際Pipelineで、適応するミドルウェアのスタックが走るように設計されている
App\Http\Kernelでミドルウェアスタックを管理している“`php:App\Http\Kernel
Laravel Socialiteを使ってQiitaアカウントでログイン
[Crieit – プログラマー、クリエイターが何でも気軽に書けるコミュニティ](https://crieit.net) というQiitaのようなサービスを運用しています。今回Qiitaアカウントで自分のサービスにログインできるようにしてみました。やり方とかを書いておきます。
![](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/136506/0badb1b3-48a4-96c7-46e8-cc9207e2dc83.png)
## Laravel Socialite
CrieitというサービスはLaravelで作られています。LaravelにはLaravel Socialiteという外部サービスのOAuth認証を使って簡単にログイン機能を実装することが出来るパッケージがあります。今回それを利用しました。
Socialiteには、また別に様々なプロバイダ用の追加パッケージが用意されています。それらと連携させることで色々なサービスのアカウントでログインするための機能を簡単に作ることが出来るようになっています。
AWS EC2にてwordpressを使うためのメモ
##はじめに
AWS EC2インスタンスでwordpressのインストールをしようとしたら少し手間取ったためその時のメモです。##環境
– サーバ:Amazon EC2(Amazon Linux 2)
– インストールしたもの:httpd(Apache), php, php-mysql, php-mbstring, php-gd, MariaDB##事象1
Wordpressをダウンロードしてブラウザからインストールページに移動したところ以下のエラーが出ていました。“`:インストールページ
Your server is running PHP version 5.4.16 but WordPress 5.2.2 requires at least 5.6.20.
“`
###原因
[Updating the Minimum PHP Version](https://make.wordpress.org/core/2018/12/08/updating-the-minimum-php-version/)
PHPバージョンは5.6.20が必須となったようです。AWSの
Laravel プロジェクト作成まで
# PHP のインストール
“`bash
brew install composer
“`# composer のインストール
“`bash
brew install composer
“`# githubでプライベート・アクセス・トークンを作成
* github.com にログイン
* Setting > Developer settings に移動
* New Personal access tokens
* read:packages をチェック
* 作成されてプライベート・アクセス・トークンをコピー# composer にプライベート・アクセス・トークンを設定
“`bash
composer config –global github-oauth.github.com ${プライベート・アクセス・トークン}
“`# Laravel プロジェクト作成
“`bash
composer create-project –prefer-dist laravel/laravel ${プロジェクト名}
“`# 参考文献
* [Laravel 6.0
Instagram Graph APIを使って「いいね数」などを集計する
# 概要
InstagramGraphAPIを使って、自分のInstagramアカウントの投稿の「いいね数」「コメント数」「フォロワー数」などを取得し、それらを集計してcsvファイルに書き出してみます。# 最終の書き出し例
“`csv
2019/10/28 13:25, フォロワー数:54, いいね累計数:545, コメント累計数:20
“`# 全体の流れ
1. GraphAPIでデータ取得
1-1. インスタのアカウントをビジネスアカウントに
1-2. Facebookアカウントを用意して1-1のアカウントと連携
1-3. アクセストークン(APIを表示するのに必要な文字列)を取得
1-3-1. facebook for developerでアプリを作成
1-3-2. 1個目のアクセストークンを取得
1-3-3. 2個目のアクセストークンを取得
1-3-4. 3個目のアクセストークンを取得
1-3-5. トークンの内容をチェッ
【PHP8.0】PHPでunion型が使えるようになる
[Union Types 2.0](https://wiki.php.net/rfc/union_types_v2)というRFCが投票中です。
提案者はまたまたのNikita。
2019/10/25開始、2019/11/08終了で、受理には2/3+1の賛成が必要です。
2019/11/04時点で賛成55反対5であり、ほぼ導入確定です。PHPのunion型って何かというと、[TypeScriptのunion型](https://qiita.com/uhyo/items/e2fdef2d3236b9bfe74a#union%E5%9E%8B%E5%90%88%E4%BD%B5%E5%9E%8B)とだいたい同じです。
`int|string $a`と書いたら`$a`は`int型`もしくは`string型`ですよ、ということです。ちなみに別途RFCをGitHubで管理しようという実験が進行中で、このRFCの詳細は[GitHub上に存在します](https://github.com/nikic/php-rfcs/blob/union-types/rfcs/0000-union-types
アクション内のreturn箇所での記述
## はじめに
【個人メモ】
コントローラでのアクションにて、returnに記述するViewやredirectを使用してたら、混乱してきたので整理した。## viewの場合
パターンは大きく3つ。1. view関数の第二引数
2. compact関数
3. withメソッド### 1.view関数の第二引数
`return view(‘hoge.show’, [‘test’ => $test ])`
### 2.compact関数
`return view(‘hoge.show’, compact(‘test’));`### 3.withメソッド
`return view(‘hoge.show’)->with(‘test’, $test);`
`return view(‘hoge.show’)->with([‘test’ => $test]);`
`return view(‘hoge.show’)->with([‘test’ => input(‘test’)]);`※ 上記は、全てbladeで `$test` で受け取る/使用可能。
## redirect
Fetch APIでPOSTしたJSONをPHPで受け取ってエコーするだけ
フロントエンドもままならないまま最近PHPに入門して、いろいろ戸惑ったのでメモです。
## 知見
– 非同期でやりたいので画面の遷移をキャンセルするための`preventDefault()`をしたいが、これだと``なフォームを未入力のまま`submit`しようとした際にフォームに表示されてほしいエラーメッセージが表示されない。これを`checkValidity()`で解決
– fetchでPOSTしても`$_POST`で受け取れない。`file_get_contents(“php://input”)`で受け取る
– `file_get_contents(“php://input”)`で受け取ってもJSONではなく文字列になってる。`json_decode` をかませてパースする
– `json_decode`するときは第2引数に`true`しとくとうれしい
– `json_encode`するときは第2引数に`JSON_UNESCAPED_UNICODE|JSON_UNESCAPED_SLASHES`しとくとうれしい### html
“`html
【PHP】Laravel 学習メモ / 簡易アプリで流れを掴む1(表示まで)
###〜簡易アプリで流れを掴む1(表示まで)〜
PHPのフレームワークであるLaravelの流れを掴むために簡単なアプリを開発してみます。
##目標アプリ
数字を入力したら計算してくれるというアプリ##開発環境:
PHP 7.1.23
Laravel Framework 5.8.35
Composer version 1.9.0開発環境が一通り終わっているという状態からのスタートとします。
###公式ドキュメント
https://readouble.com/laravel/##今回の目標
以下の画面まで表示させる
#プロジェクトの開始
cal_numberというプロジェクトファイルを作ります(名前は適当につけました
【2019年版】パーフェクトPHP解説その2 6章 Gitリポジトリ作成〜DB作成
IT学習75日目!
[前回](https://qiita.com/untrustworth/items/b58aa252c8245e45a3c5)に続いて、環境構築から始めます。
# 2 Gitリポジトリ作成
gitはすでにインストールされていますので、バージョンを確認しておきます。“`
$ git –version
git version 2.14.5
“`少々古いのですが、今回はこれで良いことにします。
Gitの仕組み、設定やGitHubの登録などについてはこちらの過去記事を参照してください。
[ローカルリポジトリ編](https://qiita.com/untrustworth/items/71ff1f37d5b158c2d523)
[リモートリポジトリ編](
https://qiita.com/untrustworth/items/74abfbd527d5df301482)## 2.1 ユーザ登録
“`
$ git config –global user.name “perfect-php”
$ git config –global user.ema
AWS移行の全記録
#■概要
以前、オンプレで動いていたWEBサービスをAWSへ移行したのでその内容です。
AWS環境は存在しなかったため、アカウント作成からはじめました。
コンサル会社と契約し、なるべく良い形で進めました。##11サービスを一気に移行しました。
※サイト規模として、PVは75000/1h。DBのデータ量は100GB。
各サービスが乗っているサーバーは絡み合っていたため1つ1つ移行することが難しく、一気に移行しました。|変更項目|移行前 | 移行後|
|:—————–|:—————–|:——————|
|環境 |オンプレミス |AWS |
|php |php5.2 |php5.3 |
|DB |mysql 5.1, PostgreSQL9.1.11 |mysql 5.5, PostgreSQL9.5.18 |
|APサーバー
AWS移行 – アプリケーション側の改修ポイント
#概要
以前、オンプレからAWSへWEBアプリを移行した際に行ったことです。##ELBを挟んだ
以前はCDN(Akamai)からWebサーバーを直接見るようにしていましたが、間にELBをはさみました以前: Akamai -> Apache -> アプリ(php)
今 : Akamai -> ELB -> Apache -> アプリ(php)SSL証明書は、ApacheからELBに移しました。
##ELBが挟まったことによる影響
通信がSSLかそうでないかを判断している部分に影響がありました。
インターネットからELBの間はSSL通信ですが、
ELBからEC2の間は80番での通信なので、下記のようなコードだと正常に動作しません。“`php:ssl通信かどうか
if($_SERVER[“SERVER_PORT”] == 443){
echo “SSL通信です”;
}
“`同じような判別をするなら下記のようなコードを記述する必要があります。
“`php:ssl通信かどうか。ELB経由
if($_SERVER[“HTTP_X_FORWARDED_PORT
AWS移行 – ネットワーク関連でやったこと
ネットワーク関連の設定メモ。
AWSになったことによる影響等を書いていきます。#セキュリティグループ設計
セキュリティグループはサーバー、ELB、RDS..ごとに設定し、そのセキュリティグループを許可するような設計になっています。
直接IPアドレスを記述するのは最小限になります。※下記はイメージ
列が各リソース
行がセキュリティグループ名です
○が付いているところには、そのセキュリティグループの許可(インバウンド許可設定)されていることになります。
そのセキュリティグループに所属しているものも許可します。
たとえば下記の「prd-web01」というEC2は、「prd-app-web-sg」というセキュリティグループを許可していますが、
「prd-app-web-sg」の中身は「prd-front-main-sg」の80番を許可しています。
これは「prd-front-main-sg」が設定されている「prd-main-alb」からの80番アクセスを許可するという意味になります。| ELB | prd-main-alb |
PHP の脆弱性が発表されています CVE-2019-11043
[こちらのサイト](https://www.cisecurity.org/advisory/multiple-vulnerabilities-in-php-could-allow-for-arbitrary-code-execution_2019-116/?fbclid=IwAR26HHpJfFxysIIWhAFYvQkgpUsA_asxz3gogFKiHYM6VdIjz2zA0nDshwE) を参考にしています。
[CVE-2019-11043](https://nvd.nist.gov/vuln/detail/CVE-2019-11043) となります。
やるべきこと:
* __適切なテストを実行したのちに、最新の PHP バージョンに今すぐアップグレードする__
* __パッチを適用する前に、認証なしにシステムの変更が行われていないかを検証する__
* __全てのシステムとサービスにおいて、最小特権の原則を適用する__
* __知られてない又は信頼されないソースによる web サイトを訪問する、あるいは、リンクをフォローする、ことを避けるようにユーザに徹底する__これら
AtomでPHP学習を始めるときとりあえず入れといたパッケージたち
# はじめに
最近何かとWordPressをいじることが多くなってきたので、真面目にPHPを勉強しようと思い立ちました。
目標はテーマを自分でカスタマイズできるようになることです。とりあえず簡単なPHPの開発ができれば良いので、Atomで動作チェックができるような環境を作ろうと思います。
# インストールしたパッケージ
今後増えていくとは思いますが、インストールしたのは下記のパッケージです。
* php-server
Atom上からPHPサーバを呼び出して、エディタ下部にログを表示してくれるパッケージ。* browser-refresh-on-save
いちいちブラウザをリフレッシュするのは面倒なのでサーブするごとに自動更新してくれるパッケージ# 最後に
随時更新していきます。
GAE/PHP72 CakePHP3のindex.php問題
GAE/PHP72にCakePHP3インストールすると、リンクとフォームのアクションURLの先頭にindex.phpが付いてしまう問題。
app.phpのApp.baseを”にする。
“`php:app.php
return [
‘App’ => [
‘base’ => ”,
“`
【Laravel】ディレクティブ一覧
LaravelのBladeには「ディレクティブ」という機能があります。
これは言語における構文のような役割を果たします。
基本的に「@ディレクティブ名」という形で記述して
「@endディレクティブ名」で終了します。# @ifディレクティブ(条件分岐1)
**条件分岐(if文)**に相当するディレクティブです。
「@if」はその後に条件を設定します。
それ以降、〜@endifまでの部分を表示します。**■条件がtrueの時に表示する**
“`php
@if (条件)
・・・・出力内容・・・・
@endif
“`**■条件によって異なる表示をする**
“`php
@if (条件)
・・・・出力内容・・・・
@else (条件)
・・・・出力内容・・・・
@endif
“`**■複数の条件を設定する**
“`php
@if (条件)
・・・・出力内容・・・・
@elseif (条件)
・・・・出力内容・・・・
@else (条件)
・・・・出力内容・・・・
@endif
“`「@if」には「@elseif」と「@else」という
ディレクティブがオプシ
【PHP】Laravel学習メモ / 三項演算子
#三項演算子
三項演算子では条件式を1文で書けます。
“`
条件式 ? 式1 : 式2TRUEの場合 : 式1実行
FALSEの場合 : 式2実行
“`if文の場合
“`
“`
↓
三項演算子を使った場合“`
“`