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

PHP関連のことを調べてみた2021年06月21日
目次

CakePHP v3.6.x から v4.5.x へのバージョンアップについてのメモ

CakePHP 3.5.x から 4.2.x へバージョンアップする際に、苦労した点などをマトメていきます。

この記事は徐々に、更新していく予定です。

私が携わった案件では、サーバをインターネット環境に接続できないという制約があったため、composerは使用せず、全て手動でバージョンアップしています。

CakePHP4.xの移行ガイドに書かれていることについては、この記事では触れません。
移行ガイドだけ読んでいても気づきづらいことや、予め一覧化されていた方がよい変更点などをマトメていきます。

↓ v4.2の移行ガイドはこちら ↓
no link next time link post

元記事を表示

CakePHP v3.5.x から v4.2.x へのバージョンアップについてのメモ

CakePHP 3.5.x から 4.2.x へバージョンアップする際に、苦労した点などをマトメていきます。

この記事は徐々に、更新していく予定です。

私が携わった案件では、サーバをインターネット環境に接続できないという制約があったため、composerは使用せず、全て手動でバージョンアップしています。

CakePHP4.xの移行ガイドに書かれていることについては、この記事では触れません。
移行ガイドだけ読んでいても気づきづらいことや、予め一覧化されていた方がよい変更点などをマトメていきます。

↓ v4.2の移行ガイドはこちら ↓
https://book.cakephp.org/4/ja/appendices/4-2-migration-guide.html

記述方法の変更点マトメ

現行のソースコードにこれらの記述方法の変更点を反映させて、新フレームワークに乗せ換えるだけで、ほぼほぼ動く様になると思います。
(もちろん、/src/Config配下の設定が正しく移行されていることが必要ですが。)

逆に言うと、

そのまま、コピペーでできます!LineNotify api でlineグループにメッセージを送信する(PHP)

①Lineグループを作る。
・Line Notifyのユーザーを友たちに追加します。
・Lineグループを作成します。
・Line Notifyのユーザーをグループに招待します。

②下記Urlにログインしてトークンを発行する。

https://notify-bot.line.me/ja/

こちらの画面から発行してください。
![notigy.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1668939/52ea37b2-21e2-67bb-d55d-52d1d5316748.png)

③下記コードをそのまま使えば送信できます。

“`php:lineNoftify.php
function send($lineNotifyToken, $lineMessage)
{

$query = http_build_query([‘message’ => $lineMessage]);
$header = [
‘Content-Type: application

PHP、CakePHP、LaravelのそれぞれのXSS対策

# XSSとは
XSS(クロスサイトスクリプティング)は、脆弱性のあるWebサイトに対して、悪意のある不正なスクリプトを挿入する攻撃のことを示します。
挿入したスクリプトを、サイトに訪れたユーザーに実行させる攻撃のため、ウェブサイトそのものではなく、サイトを利用するユーザーに被害が発生します。
XSS対策を行っていないサイトでは、どのように攻撃されるのか例を見てみます。

## XSS対策をしていないサイトの例とXSS攻撃方法

「投稿する」ボタンを押下すると、入力データが保存された後、次の投稿一覧画面に表示されるサイトとします(今回テーマから逸れてしまうので、データベースに保存する処理を省略しています)。

### 例:投稿フォームと一覧画面
“`comment_index.php

投稿フォーム

コメント


Laravel8でHTTPテスト

## はじめに
初めまして。ヤマウチです。
今回は私が業務で実装しているLaravelのHTTPテストに関してPHPUnitのセットアップからテスト実行までの手順をチュートリアル風に書いてみました。
技術面がまだまだ乏しい弱々エンジニアですが、一人でも多くの方に参考になると嬉しいです。
誤った記載がありましたらコメントにてご指摘くださいm(__)m

## やること
今回はHTTPテストを実施することを目的としますので、すでに実装済みのコードがあることを前提に

– テストの準備
– データの作成
– 使用するトレイトやメソッド

を中心に紹介していきます。
マイグレーションや機能の実装などの紹介は行いません。
また、今回はコントローラの機能テスト(HTTPテスト)を行うていで進めていきます。

## テストの準備
Laravelでは、ユニットテストも考慮して作られており、最初からPHPUnitが標準で備わっています。
以下のコマンドを打つことでテスト用のファイルが`tests/Feature`ディレクトリへ配置されます。

“`
$ php artisan make:test U

Laravel 製アプリケーションに対する自動テストでなにをどうテストすればいいか

## この記事について

自分の所属するチームに、自動テストを書いたことがないメンバーが加わったとき、ガイドラインとなるようなドキュメントがほしいなと思っていたので、書きました。どうせなら他のチームでも使いたいので、ドメインはぼかして汎用的になるようにして公開します。独自のベストプラクティス的なものですが、これまでのチームではわりとどこもこれに近くうまくいっていたので、汎用的に使えるんじゃないかと想像します。

## はじめに

### 環境

– Laravel: 5.8 以上
– PHP: 7.0 以上
– PHPUnit: 7.0 以上

いちおうバージョンは書きましたが、あまり関係はないです。

## 基本方針

基本方針は、自分の経験上これがいちばんコストパフォーマンスがいいと思っているガイドラインですが、自分はベンチャーやスタートアップ企業で、スピード重視の文化に身を置くことが多いため、テストは最低限にして、素早くリリースするのに適した形になっています。プロダクトの性質や扱うドメインによってはもう少し厳格にやったほうがいい場合もあると思うので、そこは適宜補ってください。

[Laravel] XSS,CSRF,SQLインジェクションまとめ

#はじめに
初学者が学ぶべきセキュリティ攻撃である、XSS,CSRF,SQLインジェクションについて、Laravelではどのように対策がされているのか、今一度おさらいしてみた。

#検証環境
– macOS Catalina ver 10.15.7
– Docker ver 20.10.5
– docker-compose ver 1.29.0
– Laravel ver 7.30.4
– MySQL ver 8.20.3

#XSS(クロスサイトスクリプティング)
## XSSとは何か
[3分でわかるXSSとCSRFの違い](https://qiita.com/wanko5296/items/142b5b82485b0196a2da “3分でわかるXSSとCSRFの違い”)に書いてあるように**「ユーザーがWebページにアクセスすることで不正なスクリプトが実行されてしまう脆弱性または攻撃手法」**です。こちらの記事は大変わかりやすいので、ぜひ一読してください。
XSS対策のポイントは**「特殊文字(< や > や ” など)をエスケープする」**ことです。そうすることでスクリプトでは

初学者がlaravel 8.xのBreezeでログイン機能を実装してみた

初学者が簡単なCRUDアプリにログイン機能を実装したいなと思ったとき、
公式ドキュメントより**「まず、Breezeより始めよ」**とのお告げがあったので
Breezeでログイン機能を実装してみました。

##環境
OS: Windows 10 home
CPU: AMD Ryzen 2700X
GPU: NVIDIA GTX 1060
RAM: 16GB 2666Mhz
PHP: ver 8.0.3
Laravel: ver 8.45.1
MySQL(MariaDB): ver 15.1

##1.laravelの認証機能

laravel 8.xでは認証機能構築のスターターキットとして、
jetstreamとbreeze、が提供されています。
**jetstream**はログイン、ユーザー登録、メール検証、2要素認証、セッション管理等を含む
多機能な認証パッケージであるのに対して、**breeze**はログイン、ユーザー登録、パスワードのリセット、
メールの検証、パスワードの確認等の最小限の認証パッケージとなっています。
そのため、公式ドキュメントは**「まず、Breezeより始め

Symfony4 ユーザー認証機能作成(後編)

こちらは前編の続きになります。
先に前編のほうを完了させてから進めてください。
[Symfony4 ユーザー認証機能作成(前編)](https://qiita.com/RyotaIhara/items/a5658fd38cdbbb50a926)

### ログインページを作成する

ログイン処理のSecurityControllerを作成する

“`bash
$ php bin/console make:controller
“`

“`php:src/Controller/SecurityController.php

Symfony4 ユーザー認証機能作成(前編)

今回作成する予定のテーブル

User(ユーザー)テーブル

| 項目名 | 日本語名 | 型 | 必須 |
| —- | —- | —- | —- |
| id | ID(連番) | integer | 〇 |
| username | ユーザー名 | string | 〇 |
| password | パスワード | string | 〇 |
| email | メールアドレス | string | 〇 |
| isActiveted | 活動フラグ | boolean | 〇 |

エンティティの作成

“`bash
$ php bin/console make:entity
“`
Formの作成

“`bash
$ php bin/console make:form User
“`
マイグレーションの作成

“`bash
$ php bin/console make:migration
“`

マイグレーション実行

“`bash
$ php bin/console do

【PHP】.env は絶対に使おう

## はじめに

プロジェクトや個人開発で **`.env`** ファイルを使用しないことはほぼないと思います。

**`.env`** ファイルとは開発や本番など環境ごとに変わるDB情報や**Git**で管理したくないパスワードなどプロジェクトの設定を書いたファイルです。

今回は簡単に **`.env`** を読み込み出力するというプログラムを作成しました。( **Laravel** (フレームワーク)を使用するときは直接 **`.env`** を読み込まず **`config`** ファイルから読み込むことにご注意ください)

https://qiita.com/mpyw/items/34f37742d9a18b80a08c

https://biz.addisteria.com/env_config/

#### この記事でわかること

– **`.env`** の使用方法

## 目次

– はじめに

– この記事でわかること

– 目次

– 導入

– composer
– .gitignore
– .env
– メインファイ

PHP クロージャー(無名関数)をアロー関数を使って定義してみる

# 目的

– PHP クロージャー(無名関数)の定義をアロー関数を用いて行ってみる

# ご注意

– アロー関数を用いたクロージャーの定義はPHP7.4からのみサポートされている

# 情報

– 下記のWebサイトをつかって筆者はクロージャーの振る舞いを確認した。
– [https://paiza.io/ja](https://paiza.io/ja)
– 下記のようなクロージャーを用いた簡単な処理があるとする。

“`php

Heroku(PHP)無料枠で日替わり猫画像を定期的にメール送信する

# 完成形
こんな感じの猫画像メールを毎日特定の時間に配信する。猫画像は毎日日替わり。
![nekomail.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/157490/a13aaaf1-1766-d0b4-78f4-71bddfc07d2a.png)

# システム環境
|名称|説明|URL|
|:———–|:————|:————|
|Heroku|アプリケーションの実行環境(PaaS)| https://jp.heroku.com/|
|Twilio SendGrid|Herokuアドオン。メール送信サービス|https://elements.heroku.com/addons/sendgrid|
|Heroku Scheduler|Herokuアドオン。定期実行などのスケジューラーサービス|https://elements.heroku.com/addons/scheduler|
|The Cat API|猫画像を取得できたりするサービス|https:

PHP基礎構文

#PHP基礎構文

##文字の表示
“`sample.php

“`
#####実行結果
“`
Hello,world!
“`

##変数
変数名には、アルファベット、数字、アンダースコア( _ )が使えます。
ただし、変数名の最初の文字に数字は使えません。

“`sample.php

“`
#####実行結果
“`
1
2
“`

##演算子
###算術演算子
“`sample.php

“`
#####実行結果
“`
9
5
14
3.5
1
“`

###関係演算子
正しくないときは1返ってきます。
正しくないときは「 空 」が返ってきます

【Laravel】個人的によく使うEloquentのWhere句まとめ

Laravelは自由かつ何でも実現できるフレームワークなので
(使いこなせているかは別として…)重宝しています。
今回は、個人的によく使う`Eloquent`の`Where`句を書き出してみました。

## 基本

“`php
$adminUsers = User::where(‘role’, ‘=’, ‘admin’)->get();
“`

## AND検索・OR検索
`where`を付け足せばAND検索になります。
OR検索をするには`orWhere`を使います。

“`php:AND検索
$users = User::where(‘role’, ‘=’, ‘admin’)
->Where(‘id’, ‘>’, 10);
->get();
“`

“`php:OR検索
$adminers = User::where(‘role’, ‘=’, ‘admin’)
->orWhere(‘role’, ‘=’, ‘maintainer’);
->get();

この記事ではCentOS 6.5にインストールしたRuby 2.2を使っています

この記事ではCentOS 6.5にインストールしたRuby 2.2を使っています

Laravelの2種類のテストの比較(FeatureテストとUnitテスト)

## はじめに
Laravelの`tests/`ディレクトリ以下には`Feature/`と`Unit/`の二つのディレクトリが自動で作成されます。それぞれのディレクトリには`ExampleTest.php`が最初からありますが、これら二つの違いは「素のPHPUnitの`TestCase`クラスを継承している」か「Laravel用に拡張された`TestCase`クラスを継承しているか」です。

`Feature/ExampleTest.php`はLaravel用に拡張された`TestCase`クラスを継承しているので、DBアクセスを含むLaravelの機能がテスト内で全て使えます。`Unit/ExampleTest.php`は素のPHPUnitの`TestCase`クラスを継承しているため、Laravelの機能が使えず、素のPHPコードとしてのロジックテストを書くものになっています。

`Feature`テストは便利なのですが、Laravel用に拡張されている分テストの実行に時間がかかります。なので、Laravelに依存しない形で書けるテストは極力`Unit`テストにするべきです。

#

【Php】validationについて-3

# 初めに
phpのvalidationについて学習した内容のoutput用記事です。

※内容に間違いなどがある場合はご指摘をよろしくお願いします。
※こちらの記事はあくまでも個人で学習した内容のoutputとしての記事になります。

前回の記事:
https://qiita.com/redrabbit1104/items/a6e57aa1fd1771ef90ff
https://qiita.com/redrabbit1104/items/a3eaf2bba51fac0b3c51
https://qiita.com/redrabbit1104/items/6e9c85c7503ed9043f38

# emailとurl入力フォームを追加
メールアドレスとホームページの入力欄を追加します。

“`php
メールアドレス
データベースの全テーブル情報をPHPでCSV出力する方法

## はじめに
データベースにあるテーブルの情報をCSV出力するためのベストな方法を模索し、速度を計測したので記事にまとめたいと思います。

## 動作確認環境
– PHP 8.0
– Laravel 8.0

※下位環境でも動作する場合がございます

## 補足
Dockerを使っていて、PHPコンテナからMySQLコンテナにコマンドが通らない場合はこちらの記事に解決法が記載されています。

https://qiita.com/nagareboshi/items/670b0759878358c1ed2d

## Laravel(PHP)でのCSV出力方法について

主に以下の3つの方法がありました

– fwrite
– fputcsv
– mysqlコマンドを直接実行する

fwriteとfputcsvの違いについては、こちらの記事が勉強になりました。

http://blog.livedoor.jp/kmiwa_project/archives/1021274934.html

fwriteとfputcsvではCSV化したものをExcelで開くことがある場合は、fputcsvの方

Symfony4でFormTypeを使って、Formの送信を行う。

今回作成する予定のテーブル

Item(商品)テーブル

| 項目名 | 日本語名 | 型 | 必須 |
| —- | —- | —- | —- |
| id | ID(連番) | 文字列 | 〇 |
| name | 商品名 | 文字列 | 〇 |
| price | 価格 | 数字 | × |
| remarks | 備考 | 文字列 | × |

まずはエンティティの作成。

“`bash
$ php bin/console make:entity
“`

そしてFormを作成

“`bash
$ php bin/console make:form Item

The name of Entity or fully qualified model class name that the new form will be bound to (empty for none):
> Item
I?[K?7?[30;47mtem?[39;49m?8t?[K?7?[30;47mem?[39;49m?8