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

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

外部サービスからのイベントを受け取るよ(前編)、”Webhook”

[Symfony Component Advent Calendar 2023](https://qiita.com/advent-calendar/2023/symfony-component)の15日目の記事です。

## 外部サービスからのイベントを受け取るよ、”Webhook”

[Webhook](https://github.com/symfony/webhook)は、外部サービスからのイベントをWebhookで受け取るコンポーネントです。

### インストール

“`shell
composer require symfony/webhook
“`

### 使い方

メールサービスなどのSaaSなサービスは、サービス内で起こったイベントをきっかけに設定したWebhookを呼び出す機能があったりします。通常であれば、その受け取るWebhookを実装していくのですが、Webhookコンポーネントを使えば簡単に実装できます。

まず、Webhookを受け取った際の処理を行うConsumerを作っていきます。`ConsumerInterface`を実装します。

“`p

元記事を表示

React + PHPでreCAPTCHAv3を使いつつメールを送信するサンプル

## 事前準備
– reCAPTCHAのサイト登録をしておく → https://www.google.com/recaptcha/admin
– 発行されたサイトキーとシークレットキーをメモ

## フロント
– `react-google-recaptcha-v3`を入れて、`GoogleReCaptchaProvider`で囲っておく
– サイトキーは環境変数から読み込む
“`tsx

{props.children}

“`
– reCAPTCHAを使いたいところで ↓ の処理を行う

“`typescript:Component.tsx
const { executeRecaptcha } = useGoogleReCaptcha();

const onClick = () => {
if (execute

元記事を表示

PHPでOpenTelemetryを使ってトレースを収集する

こんにちは!
12月に入ると楽しいイベントが目白押しですね。クリスマスがやって来たと思ったらすぐ冬休みに入って、大晦日にお正月。遊びに行くも良し、家でゆっくり過ごすも良し、人それぞれ楽しみ方があると思います。

しかし、そういった時期でもシステムが上手く動いてくれないとおちおち休んでいられません。普段からシステムの信頼性を高め、障害時にはすぐに復旧できる状態にしておくことが重要です。

ここでは、PHPでOpenTelemetryを使ってトレースを収集し、Google CloudのCloud Traceで可視化するまでの一連の流れをやってみます。

トレースとは何かについては、[以前書いたこちらの記事](https://qiita.com/atsu_kg/items/c3ee8141e4638957a947)の「分散トレースの重要性」「トレースの構成要素」のセクションを参照ください。

# 前提
PHP8.1
[open-telemetry/opentelemetry](https://packagist.org/packages/open-telemetry/opentelemetr

元記事を表示

PHPのマルチバイト関数で文字エンコーディング指定について

# 概要

PHPのマルチバイト関数の引数として文字エンコーディング名を指定する際は、実際の文字エンコーディング名以外も指定することができます。
その際の挙動や指定方法についてまとめようと思います。

> ※PHP8.2時点での仕様となります。

# 文字エンコーディング名の指定の種類

`mb_convert_encoding`のような文字エンコーディングを変換数関数ではfromとtoがあり、それぞれ指定できるものが異なります。

– fromとして指定できる文字エンコーディング名
– サポートされる文字エンコーディング名
– サポートされる文字エンコーディングのエイリアス名

> ※ 未指定は不可

– toとして指定できる文字エンコーディング名
– サポートされる文字エンコーディング名
– サポートされる文字エンコーディングのエイリアス名
– 未指定(`null`も含む)
– `auto`

> ※`auto`は複数エンコーディングを指定できる関数に限る

– その他
– `pass`

## サポートされる文字エンコーディング名を指定

サポー

元記事を表示

NFT関連の自動テストのアーキテクチャ

# STYLYとNFT

もう去年の話になりますが、2022年10月15日にSTYLYではNFT関連の機能が実装され、OpenSeaを介して、XR作品の取引が出来るようになりました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/7989996a-6a3d-b185-68e2-adde3a87cea2.png)

[![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/139643/ef588a7f-735a-67f4-dc08-b0906b8a89e5.png)](https://vimeo.com/758951801)

現在、NFTとして出品する機能は提供されていませんが、MetaMaskと連携を行い、Ethereumのwalletと連携する機能があります。これによりSTYLYのXR作品のNFTのコレクションを表示できます。

![image.png](https://qii

元記事を表示

【WordPress】ACFのDate Time Pickerを使って期間限定コンテンツを出す

期間限定でバナー画像を出すようなお仕事があったので作業メモ

# やること
ACF(Advanced Custom Fields)のDate Time Pickerを使って、WordPressの管理画面から開始日時と終了日時を設定し、その期間だけコンテンツを表示するようなものを作ります。
![output2.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288781/91f74470-f13e-7782-bece-ae4bdc4848ff.gif)

# ACFで新規フィールドを作成して以下のように設定
![img1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3288781/af966b9f-e645-d18a-d761-b8c6080c47c0.jpeg)

フィールドラベルを`開始日時`
フィールド名を`start_date_time`
としました。

フィールドタイプは`Date Time Picker`

元記事を表示

文字コードを理解する旅に行ってきました!(PHP/Shift_JIS/Windows-31J/UTF-8)

## はじめに

[MetapsAdventCalendar2023](https://qiita.com/advent-calendar/2023/metaps) 14日目の記事です🏃‍♂️

文字コード初心者が文字コードについて調べた記事になります。
(※主にShift_JIS,Windows-31J,UTF-8を少々)

前半は、「文字コードとはなんぞや」から始まり、気になる用語を調べてまとめてみました。
後半は、Shift_JIS, Windows-31J, UTF-8の符号をPHPで出す方法と、
SJIS, Windows-31J, UTF-8の符号を出して、SJIS系なら2バイト文字をPHPで大雑把に分類してみるということをやってみました。本記事で利用したプログラムのGithubのリンクも記載しています。

## 環境
・PHP: 8.1.25
・macOS: Sonoma 14.1.1
・iTerm2: Build 3.4.22

## 文字コードを理解する上で役立った動画
下記動画は、なぜ「Unicodeが誕生したのか」及び、「Shift_JISでなぜ符号化する必要があ

元記事を表示

指定した間隔で繰り返しジョブ実行、”Scheduler”

[Symfony Component Advent Calendar 2023](https://qiita.com/advent-calendar/2023/symfony-component)の14日目の記事です。

## 指定した間隔で繰り返しジョブ実行、”Scheduler”

[Scheduler](https://symfony.com/blog/new-in-symfony-6-3-scheduler-component)は、事前に指定したスケジュールでジョブを実行するコンポーネントです。

### インストール

“`shell
composer require symfony/scheduler
“`

### 使い方

スケジュールに合わせてジョブを実行するには3つ必要になります。

– 送信する`Message`
– `Message`をハンドリングする`MessageHandler`
– スケジュールの設定をする`ScheduleProvider`

Message, MessageHandlerの詳細については去年の[Messenger](https://

元記事を表示

PHP ぼやき日記 2023-12-13

[前回](https://qiita.com/sj-i/items/db793e09de33dd5e804d)

不定期に誰に向けるでもなく PHP に関する雑な殴り書きをしている。日付が変わってから 13 日の奴だと言い張って投稿するくらいの雑さ加減。

# nielsdos のひとが FFI 周りをわりと見ている
– [この 1 年ちょいほどの間でめちゃくちゃコミット入れてる](https://github.com/php/php-src/graphs/contributors?from=2021-10-18&to=2023-12-13&type=c) [nielsdos のひと](https://github.com/nielsdos)が最近わりと FFI まわりも見ている
– https://github.com/php/php-src/pull/12916
– https://github.com/php/php-src/pull/12915
– https://github.com/php/php-src/pull/12906
– がんばってまともに

元記事を表示

GitHub ActionsでPHPのCI環境作る(15分で)

# これは何?

GitHub Actionsを使ったPHPのCI環境のセット(静的解析テスト ⇒ ユニットテスト ⇒ E2Eテスト)を、できるだけ最小構成で作っていきます。

### 前提
– Docker
– 手元にDocker環境入っていない人は先に[インストール](https://www.docker.com/products/docker-desktop/)しておいてください
– node >= v20
– 自分は普段[Volta](https://volta.sh/)使ってますが何でもいいです

### レシピ

1. DockerでPHPの環境作る(3分)
1. テスト対象の機能と画面作る(2分)
1. PHPStanで静的解析の設定(1分)
1. PHPUnitでユニットテストコード用意(2分)
1. PlaywrightでE2Eテストコード用意(3分)
1. GitHub Actionsでテスト実行(4分)
1. ブランチの保護(+α)

それではやっていきましょう。

# 1. DockerでPHP環境作る(3分)

“`./docker-comp

元記事を表示

サービスのセッションを切らさずにDockerコンテナを立ち上げ直す方法

EC2上にdockerでサービスを動かしていて、docker imageの中にソースコードを埋め込んでデプロイしていました。
その際に、デプロイ時にセッションが切れてしい毎回ログアウトされる問題があったので改善するようにしました。
言語はPHPを使っています。

## 解決方法
解決方法としては、EC2のローカル上にセッションを保存してdockerのbuild時にマウントさせることで解決しました。
セッションを保存したいローカルのディレクトリを `/var/sessions` 、マウント先のdockerコンテナのディレクトリはデフォルトでセッションが保存される `var/lib/php/sessions` とします。

予めローカルに`/var/sessions`ディレクトリを作ります。
“`
$mkdir /var/sessions
“`
次にdocker-compose.ymlファイルにマウントを書きます。
“`:docker-compose.yml
volumes:
– /var/sessions:/var/lib/php/sessions
“`
こうすることで

元記事を表示

PHP-MAMP(パッケージソフトウェア)

MAMPでサーバー構築、種類別の特徴について。

・MAMP(Mac、Apache、MySQL、PHP):
対象プラットフォーム: 主にMac OSに対応しています。
コンポーネント:
Apache: ウェブサーバー
MySQL: データベースサーバー
PHP: サーバーサイドスクリプト言語

・XAMPP(クロスプラットフォーム、Apache、MySQL、PHP、Perl):
対象プラットフォーム: クロスプラットフォームで、Windows、Mac、Linuxなど、複数のオペレーティングシステムで利用可能です。
コンポーネント:
Apache: ウェブサーバー
MySQL: データベースサーバー
PHP: サーバーサイドスクリプト言語
Perl: 汎用のスクリプト言語

・LAMP(Linux、Apache、MySQL、PHP/Python/Perl):
対象プラットフォーム: 主にLinuxに対応していますが、他のプラットフォームでも構築可能です。
コンポーネント:
Apache: ウェブサーバー
MySQL: データベースサーバー
PHP/Python/Perl: サーバーサイド

元記事を表示

PHPでサポートされている文字エンコーディングについて

# 概要

PHPでサポートされている文字エンコーディングについてまとめていこうと思います。

> ※PHP8.2時点での仕様となります。

# サポートされる文字エンコーディングについて

[サポートされる文字エンコーディング](https://www.php.net/manual/ja/mbstring.supported-encodings.php) で一覧を確認できますが、エイリアスも存在するためマニュアルでは一覧で確認することができないです。

下記の関数を組み合わせると一覧を確認することができます。

– [mb_list_encodings](https://www.php.net/manual/ja/function.mb-list-encodings.php)
– [mb_encoding_aliases](https://www.php.net/manual/ja/function.mb-encoding-aliases.php)

## 非推奨となった文字エンコーディング

PHP8.2以降では「`QPrint`, `Base64`, `Uuencode`, `H

元記事を表示

【覚書き】PHPフレームワーク「Flow」におけるインターフェースをDIしたときの挙動について

# 初めに
最近PHPのマイナーフレームワークFlowを触っているのですが、インターフェースをDIしたときの挙動について気になることがありました。
いろいろ調べてみたので分かったことをアウトプットします。

# DIしたインターフェースのメソッドを呼び出すとどうなる?

Flowのソースを見てると、以下のようにDIしたインターフェースのメソッドを呼び出すような処理がありました。

“`php

class Hoge {

/**
* @Flow\Inject
* @var \Neos\Welcome\Service\Interface\FugaInterface
*/
protected $fugaInterface;

public function hogeMethod()
{
$this->fugaInterface->fugaMethod()
}
}
“`

最終的に“`fugaMethod()“`を呼び出していますが、“`$fugaInterface“`はインターフェースのため

元記事を表示

タイムアウトが頻発して泣きを見た話

こんにちは。[CYBIRD Advent Calendar 2023](https://qiita.com/advent-calendar/2023/cybird) 13日目担当の[@cy-seiyan](https://qiita.com/cy-seiyan)と申します。
12日目は[@cy-naull](https://qiita.com/cy-naull)さんによる「[面倒な手作業をPythonに任せる](https://qiita.com/cy-naull/private/e693fcd53a835c247fa9)」でした。
自動化、本当に大切ですね。全て自動化してしまえば手作業で行ってた時間を別の事に使えますしメチャクチャ捗りますね。

## 自己紹介
私は2018年にサイバードに入社をし、主にイケメンシリーズのサーバサイドエンジニアとして活動をしております。直近ではイケメンシリーズの1タイトルでサーバサイドだけでなく入社以前より業務経験を積みたかったUnityを使用したクライアントサイドも担当し某スポーツ選手の如く二刀流のエンジニアを目指しイケメンシリーズを支えております。

元記事を表示

画像やCSSを先読み、”WebLink”

[Symfony Component Advent Calendar 2023](https://qiita.com/advent-calendar/2023/symfony-component)の13日目の記事です。

## 画像やCSSを先読み、”WebLink”

[WebLink](https://symfony.com/doc/current/web_link.html)は、HTTP/2 Server PushやResource
Hintsを使って、画像を事前にロードできるコンポーネントです。HTML部分に影響があるので[Twig](https://qiita.com/ippey_s/items/a81cf9980ed0f8c63a3e)が必要です。

※ [Resource Hints](https://qiita.com/ohakutsu/items/9b8d4ca39d23774c2e5a)について
※ [HTTP/2 Server Push](https://blog.redbox.ne.jp/http2-server-push-cdn.html)について

##

元記事を表示

Symfonyユーザー認証機能の実装について簡単に紹介!

[Symfony Advent Calendar 2023](https://qiita.com/advent-calendar/2023/symfony) の13日目の記事です🎄✨

今回の記事では「Syfmonyでユーザー認証機能の実装」について紹介します!

## この記事のゴール

ユーザー認証の機能実装ができるというところを目指します!

## 目次

1. [環境](#1-環境)
2. [作成済みリポジトリ](#2-作成済みリポジトリ)
3. [ユーザー認証機能の実装について](#3-ユーザー認証機能の実装について)
1. [プロジェクトの作成/設定](#3-1-プロジェクトの作成設定)
2. [必要なbundleのインストール](#3-2-必要なbundleのインストール)
3. [Userクラスの新規作成](#3-3-userクラスの新規作成)
4. [ログイン機能を作成](#3-4-ログイン機能を作成)
5. [ユーザーを作成するコマンドを作成](#3-5-ユーザーを作成するコマンドを作成)
6. [パスワードのハッシ

元記事を表示

【PHP】文字列連結 「結合演算子 vs 変数展開」

この記事は [PHP Advent Calendar 2023](https://qiita.com/advent-calendar/2023/php) 7日目の記事です。

## はじめに
PHPで文字列連結をすることって頻繁にありますよね。
あなたは意図した使い分けが出来ていますか?

### 1. 結合演算子
“`php
$lang = ‘PHP’;
$job = ‘エンジニア’;

echo $lang . $job;

// 出力結果
// PHPエンジニア
“`
いわゆる「ドットつなぎ」ですね。
### 2. 変数展開
“`php
$lang = ‘PHP’;
$job = ‘エンジニア’;

echo “{$lang}{$job}”;

// 出力結果
// PHPエンジニア
“`
詳しくは[公式ページ](https://www.php.net/manual/ja/language.operators.string.php)へ。

## それでは本題に入ります
今回は、文字列連結のパフォーマンスについて実験を行います。
噂に

元記事を表示

そうだ、年末大掃除にAIを取り入れよう

こんにちは。medibaでバックエンドエンジニアをしている@yyyです。
本記事は [mediba Advent Calender 2023](https://qiita.com/advent-calendar/2023/mediba) の13日目の記事です。

## 年末大掃除をAIに手伝ってもらいませんか?
皆さんこんにちは、もう年末ですね。お部屋の隅々まで掃除は進んでいますか?
もし「まだ…」という方、今回はあなたの大掃除に猫の手を。

## 今どきの断捨離はメルカリ、だけど…
メルカリの出品フローを見てみましょう
1. 写真の撮影
2. 商品のタイトルを書く
3. 商品の説明文を書く

これってAIが成長を続ける今なら簡略化できるのでは?

## OpenAI (ChatGPT) が写真の認識をできるように
OpenAIは画像に含まれる情報を解釈し理解できる画像認識に特化したモデルを一般公開しました
参考:https://platform.openai.com/docs/guides/vision

これをつかって断捨離したいものからタイトルや説明文を考えてもらお

元記事を表示

PukiWikiローカルサーバ環境構築(php/XAMPP導入手順 )

# PukiWikiとは?

公式サイトより
> A. 通称「Wiki」(正しくは:WikiWikiWeb)と呼ばれているツールの一つです。

自前サーバーやレンタルサーバー等でも運用可能なツールです。
xサーバーは簡単にインストール出来る様な仕組みもあります。

今回は開発環境を整えたいので、ローカル環境にPukuWikiをインストールしてみました。

# 開発環境

Windows10 Home
XAMPP(v3.3.0)
PukiWiki(v1.5.4)
PHP version 8.1.20

### XAMPPを導入

https://www.apachefriends.org/jp/index.html

上記サイトからWindows向けのインストーラーをダウンロードしてください。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3028739/7d7338ab-2716-bc4b-94b9-896f3cebf51a.png)

![image.png](https://qi

元記事を表示

OTHERカテゴリの最新記事