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

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

「備忘録」PHP PSR-15 Middleware ライブラリ検討

# 検討目的

今のサービスのポイント交換システムのビジネスロジックをWorkflow化したい。

# 背景

– 交換トランザクションの作業単位に関して、AOP観点でのWorkflow定義&共通化をしたい。
– 例:メンテナンスチェック、ユーザー状態チェックなどは、全てのトランザクションの作業単位において実行されるものとしてAspectとみなし、必要な作業単位の前処理(ミドルウェア化)としてWorkflow化する。
– ビジネスロジックのコンポーネント化(ミドルウェア化)
– 依存性を最小化、拡張性を確報
– 新しい要件に対して、基本Workflowを従い、新しいビジネスロジックのみ新しく実装することで、たやすく新しい仕様・機能を追加できるようにする。
– Workflowに対しても、基本Workflowから拡張し、必要によってコンポーネントを追加・削除・バージョンアップができるようにし、拡張にも優しいものにしたい。

# Middleware Pattern

– 何らかの処理単位の全体において、始まりと終わりの途中に位置する、特定の処理を遂行するプログラム、また

元記事を表示

IDE(PhpStorm)で即時デプロイをする

はじめに
担当した案件で、実装したソースの動作確認をサーバー上で行いたい場合、WinSCPなどのFTPツールで手差しでアップする必要がありました。修正→デプロイの作業はなかなか面倒なので、自動化できないかと思って調べ、自動でデプロイできる様になったので、やり方を共有したいと思います。

サーバーの構成
——
前提として担当しているサービスのWebサーバーには踏み台サーバーからの接続を必須とされている背景があるため、上記の用な構成で開発サーバーにソースをアップします。

手順1
—-
Teratermでポートフォワードの設定をする
※前述の通り踏み台サーバーを経由する必要があるため

Teratermの「設定」→ 「SSH転送」→ 「追加」を押し以下の様に設定する
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1671734/68028db4-bb19-f6ab-fa33-eca547de80b5.png)
ローカルのポート : 任意(今回は10022を使用)
リモート側ホス

元記事を表示

PHP SQL文 基本操作

# はじめに
初めまして!恥ずかしながらこれが初投稿です。
自分はまだ学生なので、汚いコードや至らない点がありましたら申し訳ありません!
よろしくお願いいたします

##基本となるDBとSQL文
以下のDBがあったとします
MySQLで私が初めてログイン機能を初めて作った時のDBです
(passのとこは気にしないでください)

DB名: Login
テーブル名: user

| id | name | mail | pass |
|:-:|:-:|:-:|:-:|
| 1 | オヌマ |aaa@xxxmail.com|???? |
| 2 | タケル |bbb@xxxmail.com|???? |
| 3 | 田中 |ccc@xxxmail.com|???? |

これに対するSQL文をphpで書いていきます
まずはDBに接続するためのPDOからです。

“`php:pdo.php

元記事を表示

vscodeでxdebugでブレークポイントがうまく止まってくれない

#はじめに

MAMPを使用して環境構築しました。
バージョン
PHP: 7.4.12

vscodeでソースコードを読み込んで実行しています。

#xdebugを使うための設定

PHPのデバックツールにxdebugというものがあります。
MAMPをインストールした時点でxdebugもインストール済みという記事もありましたが、自分の場合はxdebugが入っていなかったので、手動でインストールしました。xdebugのインストールについては今回は割愛いたします。

xdebugはインストールしただけでは正常に動作しません。

まず、phpiniというPHPの設定ファイルに次のような追記が必要です。

“`
[XDebug]
xdebug.remote_enable = 1
xdebug.remote_autostart = 1
xdebug.remote_connect_back = 1
xdebug.remote_port = 9001
zend_extension = /Applications/MAMP/bin/php/php7.4.12/lib/php/extensions

元記事を表示

phpでfirestoreに接続

– とりあえずlaravel環境用意
– Laravel Sail

[Laravelの開発環境をDockerで構築しようとしたら公式さんがLaravel Sailって素敵ツールを提供してくれていました – Qiita](https://qiita.com/kai_kou/items/0e773aaf50698dd5a93f)

   私はphp8の方使用。

   groupadd: invalid group ID ‘sail’ 問題にぶつかる以下解決

https://laracasts.com/discuss/channels/laravel/groupadd-invalid-group-id-sail

– DockerFileにgrpc、protobuf(grpcのパフォーマンスを向上させるライブラリ)をインストールするために記述追加

“`docker
pecl install grpc && \
pecl install protobuf && \
“`

– php.iniに追加

元記事を表示

WindowsのPostgreSQLで初めてDBを作ってみた

#はじめに
とりあえず仕事で、なんとはじめてpostgreSQLでテーブルを作ってみてphpで動かしてなんちゃらやるということをすることになった。
Wordpressでも結局使ってないのに。まあでも、これでテーブル作れたら、Woredpressで新規のテーブル作ってそれを表示させるなんてこともできる自信がつくと思うので頑張ろうと思う(まあそもそもWordpressのはMySQLなんだけど)

# やったこと
まずとにかくpostgreSQLをインストールして使えるようにすること。

https://www.dbonline.jp/postgresql/install/index1.html

https://www.dbonline.jp/postgresql/install/index3.html

 ※ PATHを設定するというのはコマンドスクリプトから起動できるようにする作業のこと。

上記を見れば、多分インストールしてコマンドスクリプトで起動するところまでは困ることはないと思う。
※ コマンドスクリプトからインストールするという手もあるみたいですがそれは他のサイトを見ていただ

元記事を表示

XAMPPで複数バージョンのPHPを共存させたい

# XAMPPで複数のPHPは動作しないの?

PHPのバージョンアップが提供された際や古くなったPHPバージョンのプロジェクトを新バージョンで同じように動くかどうかをローカルで確認したい。

まぁVagrantを使ったりすればあっさり解決できるかもしれないが、私の環境ではXAMPPを利用していたり、複数の案件が同時進行していることが多い。

Qiita内では

– xamppで複数のバージョンのphpを切り替えて使いたい!!!
https://qiita.com/shie-works/items/65234ffb6753e277d621
– XAMPPで複数バージョンのPHPを切り替えてApache + MySQL を使う方法 on Windows
https://qiita.com/kaitaku/items/e0ae54fc04d222ded5c9

このような記事があるが、これでは稼働しているバージョンは1つに限定されるため、**「同時に起動して確認する」**という事ができず、他のプロジェクトも道連れになってしまうためによろしくない。

## つまり、やりたいことは

– 現状

元記事を表示

Laravelでviewに共通の変数を渡す(ただし処理は一回で)

Laravel歴1ヶ月のど素人です。

DBから取得した結果をviewに共通の変数として渡したいって時にどうしたらいいのか、
公式を参考に作ってみました。

## とりあえず公式を参考に作ってみる

Laravel公式はこちら
https://readouble.com/laravel/8.x/ja/views.html

“`php:ComposerServiceProvider
namespace App\Providers;

use Illuminate\Support\Facades\View;
use Illuminate\Support\ServiceProvider;

class ComposerServiceProvider extends ServiceProvider
{

public function register()
{
}

public function boot()
{
View::composer(
‘*’, ‘App\Http\View\Composers\

元記事を表示

【PHP】PDO接続周り

Laravelなどのフレームワークでは、クエリビルダやEloquentを使って簡単にDBから値を取ってくることができます。
今回は、PDOを使ってDB接続し、データを取ってくる流れを記載していきます。

1. DBに接続(例外処理も含めて)
2. SQL文の準備
3. 準備したSQL文に値をバインドする
4. 準備したSQLを実行する
5. 実行結果を配列などで取得する

この順番で解説していきます。

## 1. DBに接続(例外処理も含めて)
“`php
$pdo = new PDO($dsn, $username, $password, $driver_options);
“`
のような形で、DB接続するためのPDOインスタンスを作成します。

“`php
try {
$dbh = new PDO(
‘mysql:host=サーバー名;dbname=データベース名;charset=utf8’, // $dsn
‘ユーザー名’, // $username
‘パスワード’, // $password
array( // $driver_opt

元記事を表示

Check that your cafile/capath settings〜なるエラーに騙された話

# 問題

古いシステムをPHP 7.4に上げようとしていました。アクセスするのにクライアント証明書が必要な社内向けAPIがありまして、このアクセスがうまくいきません。

エラーメッセージはこんな感じ:

“`text
warning: file_get_contents(): Unable to set local cert chain file `xxx.pem`:
Check that your cafile/capath settings include details of your certificate
and its issuer in foo.php on line XX
“`

# 調査

このエラーを見た私は、「cafile/capathの設定をチェックしろ? たしかに社内向けプライベート認証局とか使うので変な設定してるしなあ…」と思ってそのあたりをいくらチェックしてもおかしいところは見当たりません。

でもこれ古いシステムではちゃんと使えてるやつだし、と思って[SSLコンテキストオプション](https://www.php.net/manual/ja

元記事を表示

Laravel 8でマルチ認証して一般ログインと管理ログインを分ける方法(UI方式、非Jetstream、非Fortify、非Breeze)

 Laravel 8で一般ログインと管理ログインを分けるために、マルチ認証を実装する方法を紹介します。ここで紹介する方法は従来のUIを用いる方式で、Jetstream、Fortify、Breezeを用いる方式ではありません。

# ゴール

– 一般ログインと管理ログインを分ける。
– Laravel標準のユーザー認証機能(Auth)を使う。
– コードはなるべく共用にする。
– 一般ログインURIは `/login` とする。
– 管理ログインURIは `/login/admin` とし、管理画面は `/admin` 以下とする。
– リセットパスワードができるようにする。

# 前提

– PHP 8の知識がある
– Laravel 8の知識がある、認証機能のあるアプリが作れる
– Laravel 8に必要な環境構築ができる
– Composerが使える状態にある
– [Laravel Installer](https://laravel.com/docs/8.x/installation)が使える状態にある

 Laravelで認証機能のあるアプリを作る知識と環境がある前提でスタ

元記事を表示

PHP Discord OAuth2認証

# PHP Discord OAuth2認証
PHP Laravel環境でDiscord OAuth2認証を行ったので備忘録
## 環境
・Larave 5.7
・PHP 7.2.15
## 前提
・Discord Developerで「OAUTH2_CLIENT_ID」「OAUTH2_CLIENT_SECRET」を取得
・Discord DeveloperでCallback URLの設定

### ログイン時
“`
public function login(Request $request)
{
define(‘OAUTH2_CLIENT_ID’, ‘‘);
define(‘OAUTH2_CLIENT_SECRET’, ‘‘);

$authorizeURL = ‘https://discord.com/api/oauth2/authorize’;
$tokenURL = ‘http

元記事を表示

【AIZU ONLINE JUDGE】Webエンジニアがアルゴリズムの問題を解いてみる

## 目次
* 自己紹介
* AIZU ONLINE JUDGEとは
* やろうと思った経緯
* 問題例
* 所感

## 自己紹介
* 新卒3ヶ月目Webエンジニア(バックエンド)
* バックエンド未経験で自社開発系企業に入社
* 大学では情報工学を専攻.フロントエンドも少し触る
* 現在は社内の案件に触れて実務を行っている

## AIZU ONLINE JUDGEとは?
AOJとよばれるもので、だれでもプログラミングの問題が解けるサイトです。
問題の内容はプログラミングコンテストのようなところで出される、お題に沿ってプログラムをつくって提出→採点をしてくれるサイトです。同じようなサイトに競技プログラミングのAtCoder( https://atcoder.jp/?lang=ja )なんてものもあったりします。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1288580/99c7c48e-6361-f841-3ded-dbab2da2845c.png)

https://onli

元記事を表示

phpフォームのページ遷移で$_SESSIONが消えないように気を付けたこと

##はじめに
php(今回フレームワークは使用していない)でフォームを作成したときに、CSRF対策(セキュリティ対策)でセッションを使用した。フォームは「ユーザ入力ページ」「入力内容確認ページ」「送信完了ページの3つ」。フォームの送信が入るたびにページ遷移が入るようにしたが、ページ遷移と同時に設定したセッションの値が切れてしまったので、対策したことを備忘録として残します。

作成したトークンと、そのトークンをセッション変数に代入してページ遷移後に同じ値であれば、ページを表示するというよくあるやり方。

##結論
セッションに設定した変数は

元記事を表示

Laravel / Guzzle (HTTP Client) で画像ファイルを送信したい

Laravel + Guzzle を使用し、テキストや画像を混在させた状態のデータをHTTP Client経由で送りたいときの備忘録です。検証はしてませんがPDFやテキストファイルなど、その他のファイル形式でもいけるはずです。
APIでの画像アップロード(ファイルアップロード)のお供にどうぞ。

### 検証環境
– Laravel 6.20.12
– Guzzle 7.2
– PHP 7.4

## 前提条件: base64 と multipart/form-data

ファイルの送信にはよく “`base64“` へのエンコードが用いられますが、Guzzleで画像やその他ファイルをエンコードせずに送るためには “`multipart/form-data“` という形式で送る必要があるようです。

“`base64“` はざっくり言えば、64進数を意味しており、データを64種類の文字 (アルファベット[ a – z ], [ A – Z ], 数字[ 0 – 9 ]、一部の記号[ +, / ] )で表すエンコード方式です。

[Base64 出典: フリー百科事

元記事を表示

Laravelスケジュールの実行ログを出力する

## 概要
Laravelでスケジュール機能を使って定期実行する際、実行ログを出力したいといったことがあったので調べたことをメモしておく。

## ファイル構成
こんな感じでdockerのcron環境を整備する。
※ ソースコード: [Github-reflet/laravel5.6](https://github.com/reflet/laravel5.6)

“`
├ docker // ← docker関連のフォルダ
│ └ cron
│ ├ cron.root
│ ├ Dockerfile // ← cron実行するコンテナ (PHP-CLI)
│ └ php.ini

├ src // ← Laravel関連のフォルダ
│ ├ app
│ │ ├ Console
│ │ │ ├ Commands
│ │ │ │ ├ EmailSendCommand.php // ← メールをテスト送信するコマンド
│ │ │

元記事を表示

「やればできる!」と言われたときだけ「ビビビビビタミン!MATCH」と返すmatch式

# はじめに
こんにちは。先日兄から自動化処理の仕事を受注しました、筆者です :bow:

さて、今回は初のネタ記事です:smile:

でも一応PHP8に触れているので興味持っていただければそれだけでうれしいです:bow:

# MATCHという飲み物を知っていますか?
↓これ

https://www.matchnews.com/

自分は高校生の頃に飲んでいた記憶です。

食堂(購買)横に設置している自販機に夏になる現れる人気(主観)な飲み物です!

私だけですかね、なんか**青春**って感じがします :relaxed:

最近はお笑い芸人の**ティモンディ**の2人がCMをやっていますね!

# match式を知っていますか?
これ↓

https://www.php.net/manual/en/control-structures.match.php

PHP8で追加された、関数ではなく、**式**です!

(コマンドで関数のリファレンス参照しようとして気づきました、、あ、関数じゃないわ、これ :sweat_smile: )

“`sh
$ php -v
PHP 8.0.3

元記事を表示

laravel 任意のフィールドの値が指定したものと一致していない時に除外するバリデーションルールを記載する方法

# 目的

– laravelで任意のフィールドの値が指定したものと一致していない時に当該フィールドのバリデートをスキップする方法をまとめる

# 方法

– フィールド`check`の値に「true」という文字列以外が格納されたとき以外に、フィールド`input_str`の値のバリデーションをスキップしたい時は下記のように記載する。
– `input_str`の値のバリデーションルールは「必須」と「文字列であること」とする。
– 下記はリクエストファイルの`rules()`メソッドの内容のみ抜粋して記載する。

“`HogeRequest.php
/**
* Get the validation rules that apply to the request.
*
* @return array
*/
public function rules()
{
return [
‘check’ => ‘required’,
‘input_str’ => ‘

元記事を表示

PHP8以降の比較とmatch文について

便利だけど使う前に挙動をしっかり理解しておきたいので。
予習メモです。

# 環境構築
PHP8の環境を用意します。
開発環境を汚したくない場合は[Docker](https://docs.docker.com/get-docker/)がおすすめです。

簡単なスクリプトならDockerfileを作成する必要もありません。
rmオプションを使用することにより、スクリプト実行後にコンテナが削除されます。

“`bash
$ mkdir php8_test
$ cd php8_test
$ vi mytest.php
$ docker run -it –rm –name my-running-script -v “$PWD”:/usr/src/php8_test -w /usr/src/php8_test php:8.0-cli php mytest.php
“`

[公式ドキュメント](https://github.com/docker-library/docs/tree/master/php)にも紹介されています。

# 数値と文字列の比較
数値と文字列の比較について、“文

元記事を表示

ララベルで久々にプロジェクトをクローンしたのでつまづきポインの備忘録(forMac)

自分のプロジェクトをクローンしてデータベースのモックアップ(テスト環境)をローカルに作成しようと思ったのですが、前にプロジェクトをクローンした時と同じ轍を踏んでいる気がしたのでいい加減覚えようと戒めの意味も込めて備忘録を作成します。

#1.プロジェクトのクローン

これは簡単ですねサクッとローカルにクローンします。

“`vim

simple_db_mockup % git clone https://github.com/mar-gitacount/simple.git

“`

うまくいったぽいです。

“`vim
Cloning into ‘simple’…
remote: Enumerating objects: 554, done.
remote: Counting objects: 100% (554/554), done.
remote: Compressing objects: 100% (307/307), done.
remote: Total 554 (delta 304), reused 463 (delta 213), pack-reused

元記事を表示

OTHERカテゴリの最新記事