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

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

E2Eテストをより簡単に?!〜Playwrightってなんですか?~

## はじめに
こんばんわ。今日はEC-CUBEアドベントカレンダーの20日目です。
アドベントカレンダーというものに初めて参加するため、何書いたらいいのか先輩方のを参考に悩んでました。
いろいろ考えてたら何やら、E2Eテストについての声が聞こえて来ました。
Playwrightというのがあるらしい。

## 気になった経緯
一番気になっている理由は、非同期処理に強いことです。
現在のE2Eテストはcodeceptionで書かれているのですが、不安定なことがあります。
ページの要素が見つからないという理由で落ちている事が多く、再実行したらクリアするという謎現象。。。
テストコードを見ていると、Sleep関数がいくつかあります。

上記から、非同期処理に強いPlaywrightが気になりました。
(ちなみにTypeScriptはよくわからないので、雰囲気で書きます。:v:)

## Playwrightについて
Microsoftさんが主体となって開発しているツールです。
一時期、GitHubのトレンドにもなりました。

機能について、ざっとまとめると以下になります。
– 対象ブラウザ

元記事を表示

ペネトレーションテスト

今回は私達が昨年度作ったSNSサイトにvpn上で攻撃を仕掛けそのパケットを遮断するWAFを作るという事で素人ながらペネトレーションテストをやってみる

今回使うソースコード
https://github.com/21c1100017/WELP
※xammppで動かす場合はドキュメントルートの設定を変えてください

ローカル環境で動かす人用
データーベース情報
# データーベース情報

| データーベース名 | welp |
| — | — |
| ユーザー名 | welp_admin |
| パスワード | welp_admin |

# 以下SQL文
“`SQL:welp.sql

SET SQL_MODE = “NO_AUTO_VALUE_ON_ZERO”;
START TRANSACTION;
SET time_zone = “+09:00”;

/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARA

元記事を表示

Laravel SailをPHP 8.3でインストールする

別の記事を書く目的で新しいLaravelプロジェクトをインストールしようとしたときに、どうせならPHP 8.3を使ってみようと思ったものの、環境構築で一瞬悩んだので備忘録。

# 新規Laravelプロジェクトダウンロード & インストール

公式ドキュメントの通りインストールしてみます。

“`sh
curl -s https://laravel.build/php83-laravel | bash
“`

https://laravel.com/docs/10.x/installation#sail-on-windows

たちあげてバージョンを確認してみると・・・8.2ですね。

“`sh
# Laravelのプロジェクトディレクトリに移動
cd php83-laravel

# コンテナ立ち上げ
./vendor/bin/sail up -d

# コンテナ名確認
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS

元記事を表示

オプション設定をシンプルに、”OptionsResolver”

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

## オブジェクトのプロパティ設定をシンプルに、”OptionsResolver”

[OptionsResolver](https://symfony.com/doc/current/components/options_resolver.html)は、配列でオプションの値を管理している際に、デフォルト値をシンプルに定義するレゾルバを提供します。

### インストール

“`shell
composer require symfony/options-resolver
“`

### 使い方

通常、配列でオプションの値を管理して、メソッドで値を設定できるようにするには、ちょっとめんどくさいことをしなければいけません。

“`php
class SomeService;
{
private array $options;

publi

元記事を表示

PHP ぼやき日記 2023-12-19

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

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

# Reli 0.11.0 をリリースした
– https://github.com/reliforp/reli-prof/releases/tag/0.11.0
– PHP の `memory_limit` 超過で `Allowed memory size of 〜 bytes exhausted` が出た時にメモリ内容の内訳を吐ける奴
– [メモリ解析機能のドキュメント](https://github.com/reliforp/reli-prof/blob/0.11.0/docs/memory-profiler.md) をわりと充実させたりした

# OSS で `memory_limit` 超過の issue を見つけては[急にメモリ計測をとって去っていく PHP 界の妖怪](https://twitter.com/s

元記事を表示

phpのfile_get_contentsを利用して、APIを実行しようとしたら403が帰ってきた

## 現象が発生した背景
業務にて利用をしていたAPIの仕様が変化したようで、極力ソースコードをいじらないよう進めようとしたら、403エラーが発生した

## 確認内容
Postman・Curlにては正常に動くけど何故か、PHPのfile_get_contentsにて処理実行時は403が発生した

## 修正内容など
file_get_contentsではなく、curl_execにする事により200が返ってきて正常に動作するようになった

## 補足
リクエスト時のヘッダー・レスポンスなどからAWSにてAPIサーバーを立てていることまでは理解できた
余裕があれば自信で環境構築して原因について追求してゆきたい

元記事を表示

LaravelでJobとQueueを触ってみる

## はじめに
:::note info
1年前にJobを使用する際、動かしながら残していた実装メモを投下させていただきます。
情報が古かったり、間違いがあればご指摘いただければ幸いです。
:::

使用言語:Laravel(8.X)

### ①jobをスタックする為のテーブルを作成する。
【コマンド】
“`ter
php artisan queue:table
“`
– ジョブをキューに保持するテーブルを作成する為のmigrationファイルを作成。
– [App\Jobs;] 配下にjobのClassも一緒に作成される。
※実行順序は、先入れ先出し方。

【コマンド】
“`terminal
[php artisan queue:failed-table]
“`
– 失敗ジョブを登録するテーブルを作成する為のmigrationファイルを作成。

【作成されるmigrationファイル】
“`php

元記事を表示

捕まえたWebシェルを調べてみる

# はじめに
以前作成した資料を探すためにサーバのバックアップを漁っていたら、過去に捕まえたWebシェルが出てきたので記事を書いてみることにした。確か2018年ごろにハニーポット的なやつで捕まえたファイルだけど、当時は簡単な調査をして終わりにしていた記憶しかない。

夏頃に書き始めてすぐ公開するつもりだったが、後回しにし続けてしまったので、アドベントカレンダーを機に完成させることにした。記事自体はWebシェルの内容を説明するだけとなる。

# 捕まえたファイル
POSTリクエストを残していなかったので詳細は確認できないが、どうもWordPressのプラグイン **Slider Revolution** に存在していた脆弱性を利用して設置する攻撃だった様子。

https://wpscan.com/vulnerability/e8a8e1c6-2c43-487a-9f11-6abd5ce6d82d

脆弱性を利用することでプラグインをインストールするように見せかけ、任意のzipファイルを展開することができる仕組みとなっている。
https://github.com/rapid7/meta

元記事を表示

AWS Distro for OpenTelemetry で Laravel から AWS X-ray に trace を送ってみる

この記事は、AWS Containers Advent Calendar 2023 の 19 日目 (12/19) のエントリーです。

PHP のフレームワーク Laravel で、ADOT (AWS Distro for OpenTelemetry) を利用した trace の送信を試した備忘録です。
正直、設定の書き方がわかっていないので、正しい書き方などのツッコミをお待ちしております。

[AWS Distro for OpenTelemetry](https://aws-otel.github.io/) とは、OpenTelemetry プロジェクトの AWS がサポートするディストリビューションです。

各言語ごとの対応状況は以下にあります。
https://opentelemetry.io/docs/instrumentation/#status-and-releases
PHP が trace に対応しているため、PHP Laravel を利用して trace の送信を試してみます。

基本的には[こちらの手順](https://opentelemetry.io/doc

元記事を表示

現在時刻が関わるアプリケーションの複雑性に立ち向かうにはどうすれば良いか?(PHP)

答え

![現在時刻なし.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3604824/b5200db1-77da-86e0-464d-c0e818a60905.png)

## 参考
– 現在時刻が関わるユニットテストから、テスト容易性設計を学ぶ
– https://t-wada.hatenablog.jp/entry/design-for-testability
– 時計オブジェクト(ドメインクロック)を導入してテスト容易性と意図性を高める
– https://phpmentors.jp/post/46982737824
– PSR-20: Clock
– https://www.php-fig.org/psr/psr-20/
– PSR-20 Meta Document
– https://www.php-fig.org/psr/psr-20/meta/
– 『単体テストの考え方/使い方』
– https://book.mynavi.jp/ec/produ

元記事を表示

Goで書かれたPHPアプリケーションサーバーのFrankenPHPを触ってみた

![スクリーンショット 2023-12-19 0.43.12.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/765794/3317b5d1-125c-60b4-9637-e522a76e57a4.png)
Goで書かれたPHPアプリケーションサーバーである[FrankenPHP](https://frankenphp.dev/)を触ってみました。
2023/12/11にバージョン1.0.0がリリースされたPHPアプリケーションサーバーです。やっと触れました。

https://frankenphp.dev/

## FrankenPHPとは
[公式](https://frankenphp.dev/docs/)より
> FrankenPHP is a modern application server for PHP built on top of the Caddy web server.

*FrankenPHPは、Caddy Webサーバー(※1)の上に構築されたPHP用のモダンなアプリケーションサ

元記事を表示

[Laravel]脱FatController

## はじめに
こんにちは。この記事は[ラクス Advent Calender 2023](https://qiita.com/advent-calendar/2023/rakus-partners) 19日目の記事です。
エンジニア歴1年で、現在はPHPのLaravelを使用して個人開発を行っています。
今までは何もわからず全てのコードをControllerに書いており、いわゆる典型的なFatControllerで修正のしにくいコードでした。
そこで、SkinnyControllerを目指すことにしました。

## FatControllerとは
文字通り太った(記述量が多い)Controllerのことを指します。
Controllerはただ一つの責任だけを持たないといけないのに、複数の責任を持ってしまっている状態です。

これの何が問題なのかというと、「コードの可読性が落ちる」ことです。
コードが長すぎると、どこに処理を書いたのかがわからなくなります。
また、同じ処理を至る所で書いている場合が多く、改修漏れが生じやすくなってしまいます。
以下が今まで書いていたFatControl

元記事を表示

学校向けWEBアプリのプロジェクトを立ち上げてみた

:::note info
[Qiita全国学生対抗戦 Advent Calendar 2023](https://qiita.com/advent-calendar/2023/student)の19日目の記事です。
:::

## はじめに

こんにちは。ご覧いただきありがとうございます。
前振りもなく突然ですが,今回は友人と行っているプロジェクトについてご紹介したいと思います。
有益な技術的要素は含まれませんが,最後までご覧いただけますと幸いです。

## プロジェクトの概要

昨今,学校現場はブラックと言われています。
日々の業務が多忙を極め,定時出勤・退勤が難しいのが現状です。
しかしながら,昔に比べ業務の効率化は進んだものの,依然としてIT化はほとんど進んでいないと言っても過言ではありません。(コロナ禍でスクールGIGAは進みましたが)

### 現状の問題点

例えば,日々の業務の1つである時間割作成はおそらく多くの学校がExcelを用いて作成しています。
時数の計算はさすがに電卓ではなく,Excel関数を用いていると考えられますが,年間1000時間を超える授業をクラス別に集

元記事を表示

MIMEを扱うよ、”Mime”

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

## MIMEを扱うよ、”Mime”

[Mime](https://symfony.com/doc/current/components/mime.html)は、MIMEを扱うためのコンポーネントです。

### インストール

“`shell
composer require symfony/mime
“`

### 使い方 その1

“`php
use Symfony\Component\Mime\Email;

$email = new Email();
$email
->from(‘info@qiita.com’)
->to(‘test@qiita.com’)
->subject(‘テストメール’)
->priority(Email::PRIORITY_HIGH)
->attachFromPath(‘/var/

元記事を表示

君たちはどう再帰するか

# 君も再帰しないか

***多次元配列のさきっちょにいっちょフィルタをかましたい***。

よくあるお話です。

一般的には[array_walk_recursive](https://www.php.net/manual/ja/function.array-walk-recursive.php)やユーザ定義再帰関数を利用する所です。

単純な処理だったらそれで問題ありません。
では階層の構造変更を伴うような処理だったらどうでしょうか?

例えば配列やエンティティオブジェクトをそれらが持つ特定の値に置き換えたいなど。

という事で今日は再帰を使って配列を書き換えていこうと思います。

## 処理対象のデータ

多次元配列の末尾に日付オブジェクトを複数持つものを対象とします。
実用で考えたい場合は、`あ`に入っているものをエンティティや行データに置き換えてください。

“`php
[
‘a’ => [
‘あ’ => [

元記事を表示

CakePHPのエラーハンドリングについて調べてみた(PHP本体のエラーハンドリング編)

この記事はコネヒトアドベントカレンダー19日目の記事です

https://adventar.org/calendars/8994

CakePHP4.4以降ではエラーハンドリングの機構が大きく変わりました。

> ErrorHandler と ConsoleErrorHandler クラスは、非推奨となりました。 これらのクラスは、新しい ExceptionTrap と ErrorTrap クラスに置き換わりました

https://book.cakephp.org/4/ja/appendices/4-4-migration-guide.html#errorhandler-consoleerrorhandler

そのためCakePHPのエラーハンドリングを新しいクラスに置き換える必要が出てきたのですが、前提としてPHP本体のエラーについての理解が必要だったので自分なりに調べてみました。

“`
# 実行環境
# php -v
PHP 8.1.25 (cli) (built: Nov 1 2023 12:51:36) (NTS)
Copyright (c) The PHP G

元記事を表示

【RHEL9】リポジトリ標準のphpバージョンを変更する

# 概要
RHEL9からはリポジトリ標準のphpのバージョンを変更できる。
割とよくやる作業だけどやり方が覚えられないので備忘録。

## 環境

– OS : Miracle Linux 9.2
– phpバージョン: 8.0 → 8.1

## ポイント

– dnf moduleを利用します
– 既存のphpをアンインストールすることなくシームレスにバージョンアップが可能です
– ただし設定ファイルは再設定が必要

## 手順

### 現状のphpバージョンの確認

まず現行のバージョンを確認しておく。今回の場合php8.0.30です。

“`console
# php -v
PHP 8.0.30 (cli) (built: Aug 3 2023 17:13:08) ( NTS gcc x86_64 )
Copyright (c) The PHP Group
Zend Engine v4.0.30, Copyright (c) Zend Technologies
with Zend OPcache v8.0.30, Copyright (c), by Zen

元記事を表示

PHPカンファレンスの過去14+3回の登壇を振り返る

[PHP Advent Calendar 2023](https://qiita.com/advent-calendar/2023/php)の18日目の記事です。
PHPカンファレンスに登壇した記録を書きたいと思います。数えてみますと、2009年から昨年(2022年)までのPHPカンファレンス14回と、北海道2回、関西1回の合計17回登壇したことになります。

最初の登壇は14年前ですので、私の考えも当時からは変化していますので、そのあたりも触れながら紹介していきたいと思います。

# [PHP カンファレンス 2009](https://phpcon.php.gr.jp/2009/program)
最初の登壇は2009年のPHPカンファレンスでした。この年はビジネスデイとテックデイに分かれていまして、ビジネスデイで登壇依頼を頂きましたので、当時温めていた「ウェブサイトを発注する際のセキュリティ」についてお話しました。