PHP関連のことを調べてみた2021年12月14日

PHP関連のことを調べてみた2021年12月14日

【CodeIgniter3(コードイグナイター)】のテーブルヘルパー(クエリをテーブルにする)

“`PHP
$table = array(‘table_open’ => ‘

‘,);

$this->table->set_template($table);
$query = $this->db->query(‘SELECT * FROM M_sobi_data’);
echo $this->table->generate($query);

“`

#結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954863/bfac777f-0ebd-f15a-6584-c9eb3b388442.png)

【CodeIgniter3(コードイグナイター)】のテーブルヘルパー 空のセル埋める

“`PHP

$this->load->library(‘table’);

$table = array(
‘table_open’ => ‘

‘,
);

$table_data = array(
array( ‘会員ID’, ‘名前’, ‘年齢’),
array( ‘200001’, ‘山田 太郎’, ”),
array( ‘200002’, ‘鈴木 一郎’, NULL),
);
$this->table->set_empty(‘[不明]’);
echo $this->table->generate($table_data);

“`

#結果
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/954863/a10bdeac-4b41-ef0e-52f3-8d9d74561d17.png)

【CodeIgniter3(コードイグナイター)】のテーブルヘルパー(列数を統一して空白のtdを埋める)

“`PHP
$this->load->library(‘table’);

$table = array(
‘table_open’ => ‘

‘,
);
$th = array(‘会員ID’, ‘名前’, ‘年齢’);
$td = array(‘one’, ‘two’, ‘three’, ‘four’, ‘five’, ‘six’, ‘seven’, ‘eight’);
if(count($td)%3 > 0){
array_push($td, ‘調査中’);
if(count($td)%3 === 2){
array_push($td, ‘調査中’);}
}

$this->table->set_template($table);
$this->table->set_heading($th);
$new_list = $this->table->make_columns($td, 3);
echo $this->table->generate($new_list);

Laravel CarbonPeriod 期間を配列で取得

#### CarbonPeriodって?
* [公式ドキュメント](https://carbon.nesbot.com/docs/#api-period “CarbonPeriod”)
* **CarbonPeriod**
* Carbonのライブラリに含まれている期間を扱うためのクラス

#### 使いどころ
* 20XX年X月度日別アクセス数の集計するときとか…
* 年代別にユーザーを取得するときとか…

#### 前提条件
* Carbonのversionが1.29以降

#### よく利用する取得方法
* 秒単位

“`
$period = CarbonPeriod::create(‘2021-12-01 00:00:00’, ‘2021-12-01 00:01:00’)->seconds()->toArray();

// 2021-12-01 00:00:00, 2021-12-01 00:00:01, 2021-12-01 00:00:02…
“`
* 分単位

“`
$period = CarbonPeriod::create(‘2021-12-01 00:0

継承 〜魔法戦士への道〜

## 経緯
1年ほど前に上司にペアプロをしてもらった際に継承について知識があやふやだったため、有名なRPGの例えで説明してくれました。
この例え自体知ってはいたけど、上司の説明が一番個人的にわかりやすかったです。自分も部下に全く同じことを喋りたかったのでメモ帳に封印していたのですが、使う機会がないので投稿。

## 継承
1.一つのクラスは一つの親クラスを持っていて2つは持てない
ex.魔法使いクラスがあって、戦士クラスがあるとする

2.勇者タロウ(以降太郎)は魔法使いクラスを継承して太郎クラスになっているとする
= だから太郎は魔法が使える

けど、太郎は剣で戦うこともできるから剣の継承もしたい…
でも太郎は魔法使いを継承してるからできない…

**「だから、魔法使いと戦士をtraitにすればどちらも継承して魔法戦士太郎」**

つまり、多重継承がPHPだとできないからそれを実現しようとしている

共通の親がいないとした時にそれぞれの親を一箇所に書きたいときにはtrait使ってuseしちゃえば良い

array_flip

#なんか何度もググっちゃうarray_flip
よく「あれ、これなんだっけ」ってなるので、投稿。

## array_flip

array array_flip ( array $array )
array_flip() は、配列を反転して返す。 すなわち、array のキーが値となり、 array の値がキーとなる。

array の値は有効なキーを必要とすることに注意。 すなわち、キーは、integer または string である必要がある。
ある値が間違った型である場合、 警告が出力され、問題のこのキー/値の組は結果には含まれない。

ある値が複数回出現した場合、最後のキーがその値として使用され、 その他の値は失われる。

パラメータ
array
反転を行うキー/値の組。

返り値
成功した場合に反転した配列、失敗した場合に NULL を返す。

ちなみに、以前拝見したQiitaの記事でarray_keysとarray_flipだと、array_keysの方が処理速度が早いみたいです。
array_flipで同様の実装をしたことがあったので、次に似たようなケースがあればarr

[PHP 初学] 配列とオブジェクトの違いについて「完全に理解した」状態にする

この記事は [株式会社サイバー・バズ Advent calendar 2021](https://qiita.com/advent-calendar/2021/cyberbuzz) 13日目の記事です。

11日目の記事は [GoogleAppsScript(GAS)で効率化する時になんだかんだよく使うコードスニペット10選](https://qiita.com/kashira2339/items/d0e399a97bf586132ea1) 、
14日目の記事は [マイクロサービスアーキテクチャにおけるProtocolBuffers管理のGitHubActionsフローを実現した](https://qiita.com/Hirochon/items/1aab7ff0dab5a1159659) です。

**PHP 初学者向け**の記事です。

本記事では**「配列とオブジェクトを完全に理解した」状態**になるため必要な

– **PHP における配列とオブジェクト**がなんなのか
– それぞれの**値の取り出し方**

についてまとめました。

# 配列

**複数の値**を

HTML,CSSで作った静的サイトをデプロイしてみた話

今回ポートフォリオサイトを僭越ながら作成しデプロイまで行ったのでちょっと書きます。

#使用したモノ
・HTML
・CSS
・Heroku(今回のデプロイ先)←無料でいけるヨ

#1 そのままデプロイできない…
HTMLファイル、CSSファイルだけだとHerokuに認められなかったです。

そこで一番簡単そうな方法を調べると、PHPアプリに改造するのが良いみたいですのでそうします。

#2 PHPファイルに大変身(超簡単だぜ!)
ルートディレクトリにindex.phpファイルを作成し以下を記入

index.php

“`

“`
#3 Json氏をジョイン
package.jsonファイルをルートディレクトリに作成し以下を記入

“`
{}
“`
#4 GitHubにPush!!
githubにpushします。

こちらの方の記事が大変参考になるかと思いますのでわからない方はどうぞ。
https://qiita.com/Toshimatu/items/f71a935612a55d6e674e

#5 H

Laravelで自作のバリデーションのルール(Rule)を使う際に躓いた事

Laravelのバリデーションで、
独自のルールをrulesで利用する際に躓いた箇所が有ったのでその部分について書いています。

Laravelのバージョンは7です。

#ルールを作成する
作成するところまでは、以下の記事を参考にしました。
[Laravelでバリデーションのルール(Rule)を追加する!](https://codelikes.com/laravel-add-validation-rule/)

#今回躓いたところ
今回バリデーションで追加したruleを使う際に、既に他の作業者が以下の記法でrulesを作成していました。

“`php:Requests/SampleRequest.php
public function rules()
{
return [
‘column’ => ‘required|max:255|exists:table,condition’,
];
}
“`

記事を愚直に真似てみた感じです。。。
これだと上手く動かなかったです

“`php:Requests/

WSL2にdockerをインストールしてみた

# なんでわざわざWSL2に?

「[docker for windows](https://docs.docker.jp/docker-for-windows/install.html)があるのに、なんでまたWSL2使うのん?」という話。

確かに、**docker for windowsはGUIでコンテナやイメージが管理できる**というメリットがあります。。

ですが、**なにかと動作が重い**と感じたことありませんか? (私や周りの話だとよくある)

そこで、WSL2にdockerを入れてみることにしました!

## WSLのインストール

下記の手順を参考にしつつ、導入しましょう。
https://docs.microsoft.com/ja-jp/windows/wsl/install

* Windowsのコマンドプロンプトを管理者権限で開く

Windows10であれば、`cmd`で検索して、「コマンドプロンプトを」右クリックで「管理者として実行」しましょう。

![スクリーンショット (2).png](https://qiita-image-store.s3.ap-n

アプリの脆弱性もインフラの脆弱性もSnykで全部漏らさず対処しよう!

# はじめに

こちらの記事はアドベントカレンダー[Snykを使ってセキュリティにまつわる記事を投稿しよう!【PR】](https://qiita.com/advent-calendar/2021/snyk)の13日目の記事として投稿しています。

いきなりですが、日々アプリケーション開発に尽力されている開発者の皆様におかれましては、セキュリティに関して下記のような課題感をお持ちではないでしょうか?

– セキュリティに関する問題は**事業存続の危機に発展する可能性があるものの、その担保が暗黙的に開発担当者に任されている状況になっていて重い**
– コードレビュー時に脆弱性チェックもレビューポイントになっているが、それを指摘できるかどうかは**レビュワーのセキュリティ的知見に左右される**ので心もとない
– 自社のコード自体に問題がなくても、それに付随する**OSSのライブラリをアプリケーションレイヤーからインフラレイヤーまで把握しきれないほど使用している**ので、それらが孕んでいる脆弱性をどのように検出・対処すれば良いのか皆目検討がつかない
– 自社ではリソースがないので、外部のベン

SlackのAPIで遊んでみる

#はじめに
この記事はトラストバンクアドベントカレンダー13日目の記事です。

こんにちは!トラストバンクのテックリード 海塩(うしお)(@youhei_seasalt)と申します。
会社として初の試みであるアドベントカレンダーですが、毎日同僚の記事が提供されるというのはとても楽しいですね。

#なにをしたか
最近SlackのAPIを触ることがあったため、リアクションを集計して遊びました。
一番多く使われたリアクションや、一番多くリアクションを受けた人を集計できます。
Slack上でおもむろに↓こんな発言をしようとしています。
![reaction1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/124294/5e2488e9-8dac-505e-4a98-d085b94c18ff.png)
GASのほうが親和性が高く、ネット上のサンプルも多いですがPHPerなのであえてPHPでやってみます。

#APIを探す
公式のAPIページを漁ります。
このAPIでメッセージの履歴が取得できそうです。
https

細かすぎて伝わらないLaravel選手権8(laravel8)

Laraevl選手権8と言っていますが8回もやってません。versionに合わせました。

laravelのchangelogを眺めて、新しく追加された細かい機能を見ていこうぜ!っていうコーナーです

全部を網羅した訳ではなく、**Added**された中でも自分が気になるものをピックアップしました。

https://github.com/laravel/framework/blob/8.x/CHANGELOG-8.x.md

## paginationにlinksプロパティーが追加
– v8.0.3
– src/Illuminate/Pagination/LengthAwarePaginator.php

こんなふうにpaginateをjsonで返した場合にlinksプロパティーが追加されました。linksプロパティーの詳細は「laravel pagination カスタマイズ」で検索!

“`php
Route::get(‘/users’, function () {
return User::paginate();
});
“`

“`php
{
“to

いきなりフリーランスをやってヒヤッとしたときの話

@Earthfreedom さんからバトンを受け取りました、G’s Academy 東京LAB4卒の大森と申します。

アドベントカレンダーの予約でもしないと記事を書かないので、
ほぼ昨年ぶりにQiitaを書きます。

[面倒な水替えを自動化!RaspberryPiで自動水替えシステム作ってみた。WIP](https://qiita.com/Earthfreedom/items/e039de4ea29903649003)面白いですね。

IoTのツールはまだまだ感度の高い人しか身近に使えていない感じがするので、
IoT界隈の方々の活動を見るとついつい応援したくなります。

さて、僕はG’s卒業後いきなりフリーランスになったので、よく
「どうやって勉強してるの?」とか、「失敗したとき怖くない?」とか聞かれます。

正直に言うと、失敗はときどきしてます笑
一緒に働く方々の支えやご厚意があって、なんとかやっていけてる状態です。

今回は今までで一番ヒヤッとした体験をお送りします。

# 簡単に自己紹介
2018年4月に東京LAB4期を卒業後、事業家およびフリーランスエンジニアとして活動して

PKCE実装で使うcode_verifierとcode_challengeをPHPで実装する。

こちらは[エキサイトホールディングス Advent Calendar 2021](https://qiita.com/advent-calendar/2021/excite-hd)の13日目の記事です。今回はPKCE実装で使用するcode_verifierとcode_challengeをPHPを使って実装してみたいと思います。

## PKCE(ピクシー)とは?
PKCE(Proof Key for Code Exchange by OAuth Public Clients)とは[RFC7636](https://datatracker.ietf.org/doc/html/rfc7636#section-4.1)で定義されている、認可コード横取り攻撃の対策として提案された仕様です。 認可コード横取り攻撃とは、認可コードを不正に取得することによって、アクセストークンなどのトークンを不正に取得する攻撃です。

PKCEに関しては、下記2つの記事がわかりやすかったです。
[OAuth2.0拡張仕様のPKCE実装紹介 〜 Yahoo! ID連携に導入しました – Yahoo! JAPAN Te

コンストラクトインジェクションの多用は禁物

# はじめに
Laravelにはサービスコンテナと呼ばれるクラスの依存関係を管理し、依存注入を実行するための強力な仕組みが備わっています。
この仕組みを使うことによってクラスの見通しが良くなったり、テストが書きやすくなったりするという利点がありますが、注入の仕方によって負荷が違ってくるので記事にしたいと思います。

# 動作確認環境
– Windows10 Home
– Laravel8
– PHP8.0

# 計測結果
| 番号 | 内容 | 結果 |
| —- | —- | —- |
| 1 | クラスを生成する | 0.69594383239746 ms |
| 2 | makeでクラスを生成する | 86.152076721191 ms |
| 3 | コンストラクトインジェクションでクラスを生成する | 222.5170135498 ms |

# サンプル
“`sample1.php
public function sample1()
{
for ($i = 0; $i <= 10000; $i++) {

ニコニコで13年運用された決済システムが移行されてからのその後の改善

こんにちは。

プレミアム課金開発の @ingen084 です。
最近では [Google Play 支払いの対応](https://blog.nicovideo.jp/niconews/156795.html) に関わったりしていました。

## はじめに

昨年、弊チームでは [ニコニコで12年運用した決済システムを移行する上で必要だったこと](https://qiita.com/chiyoppy/items/2571e8e3ae675cc7a991)[^1] など大きな変化があった[^2]のですが、その後どのように分離されたものを改善できたかなどを書いていきたいと思います。

システム分離に比べ内容としてはごくごく普通なもの(のはず)ですので、あまり期待せずに見ていただけたらと思います。

## ローカル開発環境の作成

入社すぐだったのもあり、まずはコードや環境の把握も兼ね、ローカル開発環境を作成することとしました[^3]。

vagrant 上のVMで本番環境と同じ ansible-playbook を使用し、大体動く環境を作成しました。
あくまで ansible をそのまま

Laravel6.xでプロフィールの更新画面を作りたい!【シンボリックリンク】

#やっていること
Laravel6.2を使ってツイッターのクローンサイトを製作中です。
自分への備忘録。MAMP環境で構築しています。

#やりたいこと
今回はログインしているユーザーのプロフィールの編集画面を作りました。
編集画面に入ると、ユーザーネーム・メールアドレス・パスワード(変更する場合は変更後のパスワード、変更しない場合は今のパスワードを入力)・自己紹介・アイコンの編集ができるようにしたいです。

#実装
View

“`php:profile.blade.php
@csrf
@if ($errors->any())

    @foreach

ポリモーフィズム(多態性)とは

###ポリモーフィズム(多態性)とは

**・IT用語辞典**
>ポリモーフィズムとは、プログラミング言語の持つ性質の一つで、ある関数やメソッドなどが引数や返り値の数やデータ型などの異なる複数の実装を持ち、呼び出し時に使い分けるようにできること。

**・プログラマが知るべき97のこと** <カーク・ペパーディーン>
>プログラミングにおいてポリモーフィズムとは、同じクラスのオブジェクトやメソッドが、複数の形(form)を取り得るということを意味します。

~~ちょっと何ゆってるかわかんない。。。~~

とにかく納得して、理解できるように簡単にすると
**“「同じ名前のメソッドで、異なる処理を実現すること」“**になります。

では同じ名前のメソッドが異なる処理を実現するとは、どのように実装して、どんな時に使うのか?
ユーザーからのリクエストに対して(GETやPOST)処理を切り分ける、レスポンス処理クラスを使って具体例を見てみます。

・GETリクエスト時 -> ViewResponse
・POSTリクエスト時 -> RedirectResponse

これらのレスポンス処理ク

VS CodeでPHPのデバッグ環境を構築する(Xdebug導入)

#導入環境
php : 8.0.13
vscode : 1.63.0
xdebug : 3.1.2
XAMPP : 8.0.13
OS : Windows 10

#VSCodeの拡張機能「PHP Debug」をインストールする
複数あるが、Felix Becker氏の物をインストールする。
PHP DebugはXdebugとVSCodeを橋渡しするための拡張なので、次にXdebugをインストールする必要がある。

#PHPのエクステンション「Xdebug」をインストールする
###環境情報のコピー
新しくファイルを作成し、test.phpとリネームして、以下のコードを貼り付け実行する。

“` test.php