PHP関連のことを調べてみた

PHP関連のことを調べてみた

Composerパッケージを自作して公開してみた

## やりたかっとこと

LaravelのEloquent Builderで、LIKE検索を以下のように記述できるクラスを作った。
“`php:UserController.php
$words = [‘山田’, ‘岐阜市’];
$comulns = [‘name’, ‘kana’, ‘company.address’];
User::whereLike($columns, $words); // 岐阜市で働く山田さんを検索
“`

これをいろんなプロジェクトで使いたいので、パッケージ化して`composer require`で利用できるようにしたい。

## 結果

ここにパッケージをリリースして、

https://github.com/oor30/laravel-where-like

以下コマンドで利用可能に。

“`shell
composer require kazuki/laravel-where-like
“`

## パッケージのロジック

Laravel標準機能のMixinを利用して、`Illuminate\Database\Eloquent\Builde

元記事を表示

Laravel Sail導入手順

環境 mac

Laravel sailとは

Laravel のデフォルトの Docker 開発環境と対話するための軽量のコマンドライン インターフェイス

崩すとlaravelをdockerで開発が簡単にできるツール

手順

環境 mac

1. dockerを入れる

Docker Desktop

※Macのチップでダウンロードするものが変わってきます。

2. プロジェクトの作成

ターミナルを起動して

作成したい作業ディレクトリ配下でコマンド実行

**`curl -s “https://laravel.build/example-app” | bash`**

example-appの部分はプロジェクト名になるので好きな名前を入れましょう(この記事ではexample-appで進めます)

※時間かかりますのでまったり待ちましょう

途中でパスワードを求

元記事を表示

PHP,Laravelの基礎 ~文法、構文~

## はじめに
こんにちは、未経験からエンジニア転職を目指しているものです。
オンラインスクールで本格的に学習して6ヶ月目に入りました。PHP,Laravelを学習しポートフォリオを作成中です。ポートフォリオ作成が順調に進むように、PHP,Laravelの疑問点について整理しようと思います。今回は、Laravelの文法に登場する ::, ->, =>, ‘ ‘, ” ” の記号や構文についてまとめてみました。
## :: (ダブルコロン)
::は、クラスやスタティックメソッド・定数にアクセスするときに使います。クラス名とそのメソッドや定数をつなぐ役割を持っています。

### 具体例:

“`php
// クラス定数の例
class MathHelper {
const PI = 3.14;
}

// クラス定数を参照する
echo MathHelper::PI; // 出力: 3.14
“`

### Laravelの例:

“`php
Route::get(‘/’, function () {
return view(‘welcome’);
});
“`

元記事を表示

PHPにパターンマッチングはないが… 作ればいいよ

PHPではいわゆるパターンマッチングはできません。

PHP 8.0で導入された[`match`式]は「ちゃんとした」パターンマッチじゃないんだって[RFC]に書いてあったよ。

うーん… 困った。そうだね、ないなら作ろう。

“`php
$result = match (ing($subject, matcher: $_, matched: $m)) {
$_(is: ‘ほげ’) => ‘これはほげだよ’,
$_(class: DateTime::class) => “これはDateTimeだよ”,
$_([$_->a]) => “要素1 マッチしたよ! {$m->a}”,
$_([$_->a, $_->b]) => “要素2 マッチしたよ! {$m->a} {$m->b}”,
$_([$_->a, $_->b, $_->c]) => “要素3 マッチしたよ! {$m->a}, {$m->b}, {$m->c}”,
$_([‘config’ => [‘password’ => $_->pass]]) => “password = {$

元記事を表示

【PHP】事前準備 PHP の開発環境の構築について

まず初めにこの記事は、PHPを使用する人向けの記事となります。
そのために、まず事前準備としてPHPの開発環境を構築していこうと思います。

**使用する環境**
* OS:Winodws11
* XAMPP
* Visual Studio Code
* コマンドプロンプト
* composer
* Laravel
* Node.js

**手順**
1. 「XAMPP」をインストールし、ダウンロードをクリック
2. 「C:\」に解凍
XAMPP インストール先はこちら
3. 「XAMPP.exe」を起動し、「Apache」を起動
4. PHP のコードを書くために、「Visual Studio Code」をインストール
Visual Studio Code ダウンロード先はこちら
4. 「composer」をインストー

元記事を表示

Ubuntu 20.04 複数install PHP切り替えにおける処理

今回Ubuntu 20.04において、標準インストールのPHP8.3から旧バージョン PHP7.3を複数インストールし、バージョン切り替え、とその後 Webサーバ Apache2上でも完全に切り替える処置の覚書を投稿します。
まずは切り替えたいばーじょんの PHP(今回は 7.3)を必要なパッケージ共インストールする。
“`
例:
apt install php7.3 php7.3-fpm
apt install php7.3-curl php7.3-gd php7.3-mbstring php7.3-mysql php7.3-pgsql php7.3-xml
インストール後
update-alternatives –config php
上記コマンドより、選択
There are 2 choices for the alternative php (providing /usr/bin/php).

Selection Path Priority Status
—————————————-

元記事を表示

PHPのGDライブラリを用いて文字列を描画する その2

# はじめに
本稿は、[PHPのGDライブラリを用いて文字列を描画する](https://qiita.com/kk_outlaw/items/d52657fdccf7ff093f19)の続きとなっています。
前回書ききれなかった、文字列を斜めに描画する方法について説明します。

# 描画領域の座標系について
このサンプルコードは前回説明したものと同じになりますが、imagettfbbox()にテキストを回転させる角度を度数法で指定します。
“`php
$bounding_box = imagettfbbox(
$font_size,
$text_angle, //第2引数で角度を指定する
$font_file_name,
$text
//PHP8.0では引数にarray $options = []が追加されている
);
“`

# 開始位置を指定して文字列を描画する
ここからが曲者になります。

まず、文字列を描画するコードは前回のものを踏襲します。
“`php
imagettftext(
$image, //あらかじめ生成した空の

元記事を表示

PHPのGDライブラリを用いて文字列を描画する

# はじめに
本稿では、PHPを用いてサーバサイドで文字列を含む画像を生成し、クライアントに出力する方法について説明します。

# 文字列の描画手順
1. フォント(.ttfファイル。後述)、フォントのサイズ、描画する文字列の角度を指定する
1. 描画領域の座標系を取得する(詳しくは後述)
1. 文字列を描画する
1. 生成した画像を出力する

## フォントの指定方法について
PHPのimagettfbbox()関数、imagettftext()関数のフォントに指定方法には癖があり、環境によって異なるようです。
そこで、PHPスクリプトのパスをもとにした絶対パスで指定するのが無難なようです。
“`php
$font_file_name = realpath(‘./’) . ‘/NotoSerifJP-Regular.ttf’;
“`
ここで“`realpath(‘./’)“`がスクリプトの絶対パスとなり、スクリプトと同じディレクトリに.ttfファイルが存在する場合は上記のようになります。

## 描画領域の座標系について
まず、実際に文字列を描画する前にimagettfb

元記事を表示

PHPのパターンマッチで遊んでみた

## はじめに

先日、Ruby の強力なパターンマッチを試して楽しみました。その直後にたまたま久し振りに PHP に触る機会があったので PHP でもパターンマッチができないか調査してみました。

https://qiita.com/mnishiguchi/items/53b55deae8e033562a55

2020 年の PHP 8.0 に[match 式](https://www.php.net/manual/ja/control-structures.match.php)が導入されていました。PHP でもパターンマッチができます!

https://php.watch/versions/8.0

https://php.watch/versions/8.0/match-expression

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

試してみます。

## PHP の`match` 式とは

公式ドキュメントに以下の通り記されています。

> match 式は、値の一致をチェックした結果に基づいて

元記事を表示

PHPで権限周りの構築にビット演算を使用する

ビット単位のAND演算を使用して権限チェックを行うことは、権限管理の一般的かつ効率的な方法です。
この方法には以下のような利点があります:

1. 効率性:
複数の権限を1つの整数値で表現できるため、データベースの保存や処理が効率的です。

2. 柔軟性:
新しい権限を追加する際に、既存のシステムに大きな変更を加えることなく拡張できます。

3. 高速な演算:
ビット演算は非常に高速で、大量の権限チェックを行う場合でもパフォーマンスが良好です。

実装例:

“`php
// 権限の定義
define(‘PERMISSION_READ’, 0x0001); // 1
define(‘PERMISSION_WRITE’, 0x0002); // 2
define(‘PERMISSION_DELETE’, 0x0004); // 4
define(‘PERMISSION_ADMIN’, 0x0008); // 8

// ユーザーの権限(例:読み取りと書き込み権限を持っている)
$userPermissions = PERMISSION_READ | P

元記事を表示

CakePHP 5でコマンドを作成する方法:HelloCommandの実装

CakePHP 5でコマンドを作成するには、`Command`クラスを継承したカスタムコマンドを作成し、`bin/cake`コマンドで実行できるようにします。以下に、CakePHP 5でカスタムコマンドを作成する手順を示します。

### 手順

1. **コマンドの作成**
コマンドファイルは、`src/Command`ディレクトリに作成します。

例として、「HelloCommand」というシンプルなコマンドを作成してみます。

“`bash
src/Command/HelloCommand.php
“`

2. **コマンドクラスの作成**
以下のように、`HelloCommand`クラスを作成します。

“`php

元記事を表示

初めてのCakePHP:Linux上でのアプリケーション開発手順

CakePHPのアプリをLinuxで作成する手順は以下の通りです。必要な環境を整え、アプリケーションを作成し、設定を行います。

### 1. 必要なソフトウェアのインストール

#### a. PHPのインストール
CakePHPはPHPフレームワークですので、まずPHPをインストールします。PHP 7.2以上を推奨します。

“`bash
sudo apt update
sudo apt install php php-cli php-mbstring php-xml php-mysql php-zip php-curl php-intl
“`

#### b. Composerのインストール
ComposerはPHPのパッケージ管理ツールで、CakePHPのインストールに必要です。

“`bash
sudo apt install curl
curl -sS https://getcomposer.org/installer | php
sudo mv composer.phar /usr/local/bin/composer
“`

#### c. Webサーバーのイン

元記事を表示

API トークン認証を分かりやすく図解する

## はじめに

この記事では、API トークン認証に関して図を用いて分かりやすく説明していきます。
API トークン認証の仕組みをざっくりと理解した上で、Laravel Sanctum を使った API トークン認証の仕組みをコードベースで解説していきます。

– API トークン認証の仕組み
– Laravel Sanctum のインストール方法
– ユーザ登録・ログイン時の API トークン生成
– API トークン認証によるアクセス制限・リソースの所有権の検証
– ログアウト時の API トークン削除

## API トークン認証の仕組み

![api-auth-whole-flow.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1067124/28c26c37-2176-2e85-778a-9736dc7b5b9c.png)

#### **1. ユーザーの新規登録・ログインリクエスト**

– クライアントがユーザーのログイン情報(例:メールアドレス、パスワード)をサ

元記事を表示

Laravel はダメで時代遅れなんですか?

# 参考にした記事
https://qiita.com/MadakaHeri/items/e6034727fcab8b61b55e
こんな記事が話題になっていました。しかし、この記事の内容は妥当なのでしょうか。私の実感とはかけ離れていると思うので疑問に思う点を記述します。

# それって本当ですか?

## Laravelはオンプレ前提パート
以下引用

> 今はLaravelを本番環境で稼働させようとするとこうなると思います。
> “`
>|WAF| – |LB| – |Nginxコンテナ| – |Laravelコンテナ| – |DB|
>“`
引用終わり

この図と文章の意味するところはよく分かりませんが、一口に本番環境でアプリケーションを動かすと言ってもその実行環境は様々です。例えばAWSを使うにしても、EC2のなかにPHPをいれてその上で動かしている環境も少なくはないでしょう。またコンテナの文脈においてもAWSではその実行や管理にECSを使うのか、EKSを使うのかでも状況は異なると思います。あと別にオンプレミス環境でもコンテナ技術を使うことは多分にあると考えられます。

元記事を表示

初学者の登竜門のひとつ「Xdebugの導入」sailを使用したプロジェクト

## はじめに

Xdebugって導入難しすぎません?
初学者の皆さんどうですか? 自力でできました?
記事通りにやってもうまくいかないし、、、

やっとできたので備忘録で取っておきます。

※laravel sailを使用をしようしてdockerを使ったデバックの記事になります。
※vscodeの拡張「php debug」のインストールは済ませること。
※Xdebugのバージョンは3になります。2だと設定が違います。確認はphpinfo関数を使用してください。

## .envファイルに以下2行追加

“`
SAIL_XDEBUG_MODE=develop,debug,
SAIL_XDEBUG_CONFIG=”client_host=host.docker.internal”
“`

## xdebug.iniファイルを作成

/自分のプロジェクト/vendor/laravel/sail/runtimes/今回のPHPのバージョン/ここに作成

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.

元記事を表示

【Laravel11】LINEログインの実装

# はじめに
最近ではWEBでもモバイルアプリでもメアド(ID)ログインの他にGoogleやLINEなどソーシャルメディア経由のログイン方法は当たり前になってきています。ログインが必要なアプリケーションにおいてはこれらを実装するかどうかでユーザー数も変わってくるのではと考えています。今回はLaravel11でのLINEログインの実装を紹介いたします。

## ソーシャルメディアログインでのメリット・デメリット
前段としてソーシャルメディアログインを実装するメリット・デメリットを押さえておきます。「そんなのいいから早く実装方法教えて!」って方は読み飛ばしていただいて構いません。
### メリット
* メールアドレスやパスワードの入力が不要のため、ユーザーを会員登録まで持っていきやすい。(今回の実装方法は初回ログイン時はDBにユーザーデータが入るため実質新規登録となります)ユーザーは画面の案内にしたがってボタンをポチポチしてけば完了するため、UX向上が期待できる。
* ユーザーはパスワードの管理をしなくて済む。
* 各ユーザーデータにメアド・パスワードが存在しないため、これらが盗まれる心配

元記事を表示

Laravelのジョブ内で通信を行う場合の注意点

## 概要
LaravelのジョブでSFTPを行う際に`Connection closed prematurely`エラーが起きました。
この記事では
– 原因
– 解決策

を解説します。

## 前提
– SFTP通信には`league/flysystem-sftp: ^1.1`を使用
– ジョブの処理には`php artisan queue:work`を使用

## 原因
シンプルに**前のコネクションが残っておりタイムアウトしたから**です😭

### なぜ前のコネクションが残っていた?
`queue:work`でジョブの処理を行う際、Laravelはワーカープロセスを常駐させ処理毎にアプリの更新を行いません。
つまり、**シングルトンインスタンスに設定されたプロパティがジョブ毎にリセットされません。**
(通常のリクエスト=>アプリ生成=>処理実行=>アプリ停止の流れだとリセットされます)

`league/flysystem-sftp`ではプロパティにコネクションが設定されていれば、そのまま使用します。そのため、以下の流れでエラーが発生してしまいます。
1. プロセス立ち上

元記事を表示

【Laravel】Eager LoadとLazy Loadの違いと使い分け

## はじめに

モデル間のリレーションを扱う場合、データのロード方法によってパフォーマンスやメモリ使用量に大きな影響を与えることがあります。今回は、「Eager Load(イーガーロード)」と「Lazy Load(レイジーロード)」について解説します。
## Eager Load(イーガーロード)とは?
### 特徴
**Eager Load**は、一度のクエリでまとめてデータを取得する方法です。これにより、後からデータをアクセスする際に追加のクエリを発行する必要がなくなります。Laravelでは、`with`メソッドを使用してEager Loadを実装できます。

“`php
$users = User::with(‘posts’)->get();
“`
この例では、Userモデルに関連するpostsが一緒に取得され、各ユーザーの投稿を表示する際に追加のクエリが発生しません。

**メリット:**
– **クエリ数を削減:** データベースへのアクセス回数を減らせる
– **パフォーマンス向上:** 複数のリレーションを持つデータを一括で処理する場合に効果的
– **データの一

元記事を表示

業務レベルの実例で理解するProxyパターン

## はじめに

この記事のゴールは、**適切な場面でProxyパターンを使えるようになる**ことです。
不適切な場面におけるデザインパターンの適用は大きな技術的負債をもたらしますので気をつけましょう。

対象読者は、Proxyパターンのことをなんとなく知っているものの仕事では自信を持って使えない人です。

:::note warn
筆者はPHPerなのでサンプルコードはPHPです。
:::

完成版はこちらです。

https://github.com/jnkmtsd/qiita-php-sample/tree/v0.1.1

## Proxyパターンとは

以下がわかりやすいです。

> Proxyパターンは、すでにあるオブジェクト関係の間に、透過的に別のオブジェクトを割り込ませて、元のコードを変更せずに、同じ機能呼び出しの振る舞いを拡張するためのパターンです。
>
> 田中ひさてる (2022). ちょうぜつソフトウェア設計入門――PHPで理解するオブジェクト指向の活用 技術評論社

クラス図は以下のようになります。

“`plantuml
@startuml
interfac

元記事を表示

DBのトランザクションの概要について理解する

:::note
### 概要
トランザクションとは
複数の SQL 文によるデータ更新を1つの処理としてまとめてデータベースに反映させることです。
一部だけがデータベースに反映されると、データベース全体としてデータが不整合な状態になる場合に有効です。
:::

# 背景 🖼️

業務でトランザクションを使ったのですが、口で説明できるほど概要がつかめていないので今回復習します。

# トランザクションとは 💡

https://oss-db.jp/dojo/dojo_01

複数の SQL 文によるデータ更新を1つの処理としてまとめてデータベースに反映させることを言います。

一部だけがデータベースに反映されると、データベース全体としてデータが不整合な状態になる場合に有効です。

たいせい君がお父さんに送金する際の処理を考えます。(本当に送金してるかはそっとしておいてください)

:::note
Laravelで検証します。
:::

こちらで動作確認可能です。

https://github.com/yamatai12/transaction-app

以下に公式docを参考にします。

元記事を表示

OTHERカテゴリの最新記事