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

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

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カンファレンスでした。この年はビジネスデイとテックデイに分かれていまして、ビジネスデイで登壇依頼を頂きましたので、当時温めていた「ウェブサイトを発注する際のセキュリティ」についてお話しました。