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

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

PHPのループ処理を強化するKoriym.Loop

# PHPでの効率的なループ処理

PHP開発において、データベースの結果セットやCSVファイルなどの反復可能なデータセットを処理する場面は多々あります。これらのデータを効率的に扱い、テンプレートエンジンのようなループ情報を提供し、さらにエンティティクラスにデータを代入する機能を持つ便利なライブラリが[Koriym.Loop](https://github.com/koriym/Koriym.Loop)です。本記事では、このPHPライブラリの基本的な使い方とその利便性を紹介します。

## Koriym.Loopとは?

Koriym.Loopの主な特徴は以下の通りです。

– エンティティリストジェネレーターに変換: データセットをエンティティクラスのリストに変換
– ループ情報の提供: テンプレートエンジンのようなループ情報(isFirst、isLast、index、iteration)を提供
– 依存性の注入: エンティティに依存インスタンスを注入可能
– イテレーターのサポート: 配列だけでなくイテレーターもサポート

## インストール方法

Koriym.LoopはCom

元記事を表示

PhpSpreadsheetのgetCalculatedValueで謎のFatal error (Formula Error)に遭遇

最近ExcelをPHPに読み込んであれやこれややることが多いのだが、その中でハマった話。

主要部分だけピックアップするとこんな感じのスクリプト。
“`test.php
require(‘/lib/vendor/autoload.php’);
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader;
$file = ‘/var/www/file/test.xlsx’;

$reader = new XlsxReader();
$spreadsheet = $reader -> load($file);
$worksheet = $spreadsheet -> getSheetByName(‘test’);
echo $worksheet -> getCell(‘D60’) -> getCalculatedValue();
“`
こいつを走らせてみたところ
“`
Fatal error: Uncaught PhpOffice\PhpSpreads

元記事を表示

OSSに初めてコントリビュートしてみた

# なぜコントリビュートしようと思ったか

– 元々OSSへコントリビュートしてみたかった
– 次の職場でCakePHPを利用するため、チュートリアルを一通りやっている中でドキュメントをもっとこうした方が良いのでは?と思ったから

# コントリビュートしたOSS

## リポジトリ
https://github.com/cakephp/docs

## PR
https://github.com/cakephp/docs/pull/7865

# コントリビュートまでの流れ

1. OSSのコントリビュート方法を確認する
– https://book.cakephp.org/5/ja/contributing/documentation.html
2. リポジトリをForkする
3. “`5.x“`ブランチから修正用のブランチを作成する
4. PRを作成する
5. Reviewerのチェック後にマージされる

# その他

– 今回はドキュメントに対するコミットでしたが、いずれはCakePHP本体にもコミットしていきたいなと考えている
– OSSにコミットしてからLapra

元記事を表示

Laravel環境構築時にlocalhostでSQLSTATE[HY000] [2002] Connection refused (Connection: mysql, SQL: select * from sessions where id = 5d3B1AuW5zW1TpmKRRFXLSYLoiefJcQDG2kSAhBl limit 1)が出た話

# Laravel環境構築時のエラー
初めまして、Laravel初学者のものです。
新しいアプリを作成してみようと思い、`Laravel sail`を使用して環境構築しlocalhostを開いたところ下記エラーが表示されました。
“`
SQLSTATE[HY000] [2002] Connection refused (Connection: mysql, SQL: select * from sessions where id = 5d3B1AuW5zW1TpmKRRFXLSYLoiefJcQDG2kSAhBl limit 1)
“`
「あれ?今までこんなエラー表示されたっけ?」
今まで何度か環境構築してきましたが、構築時にこのようなエラーが表示されることはありませんでした。

# 結論
セッションドライバの設定が「database」になっていることが原因でした。
新しく構築した環境では`config/session.php`と`.envファイル`にてdatabaseを使用するよう設定されいたため、localhostを開く前にデータベーステーブルを作成するためのマイグレーションが

元記事を表示

AWS SDK for phpを使って、一括送信機能を実装する

## 概要
SesV2Clientを使って、メールテンプレート登録、一括送信機能を実装しました。意外とドキュメントにも書いていないことがあったので、役にたてばと思い記事を書きます。
## この記事で伝えたいこと
– ローカル環境でSDKを使ってメール送信機能を実装する手順
– 初見のAWSサービスを使うときのアプローチの仕方
## 前提
– ローカルでSES APIを使うためのコンテナ作成
– CLIコマンドの準備
(ローカル環境の参考はこちら https://zenn.dev/machui/articles/bfd998c086d81f)
(CLIコマンド準備 https://zenn.dev/hayato94087/articles/7848e9d6a2e3d6)
## メールテンプレート登録、一括送信をSDKで実装するときの流れ(ローカル環境)
– まずAWS CLIで動くか確かめる
– エラーが出るので必要な項目、必要な形式がわかる。
– SDKに直して、実装する。
初めからSDKを使った方が早いように思えますが、上記の手順で必要な項目を絞っていくのが一番早い気がします。急がば

元記事を表示

PHP CGI 引数インジェクションの脆弱性 / CVE-2024-4577

こんにちは
PHPの脆弱性のニュースがでていたのでメモっときます。

## 内容
PHP に影響を与える新たな重大なセキュリティ上の欠陥についての詳細が明らかになりました。この欠陥を悪用すると、特定の状況下でリモート コード実行が発生する可能性があります。

## 特定の状況下、とは?

防御側にとって、このバグは特定のロケールの Windows ベースの PHP インストール (PHP が CGI モードで具体的に使用されている) でのみ悪用されています。

Windows 版 XAMPP のサーバーで起きる問題で、さらに特定のロケールは

– 日本語 🔥
– 中国語

※他のロケールも未確認なだけで可能性あり

ということです。

## パッチ
PHP の新しいバージョン8.3.8、8.2.20、8.1.29 がリリースされました。

### 1. PHP をアップグレードできないユーザーの場合:

“`
RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? – [F,L]
“`

#

元記事を表示

Rocky Linux 9 でPHPを8.0から8.2にアップグレード

テスト用マシンにRocky Linuxを入れてからけっこう経ってしまって、そう言えばアップグレードを怠ってたな、ということで覚書を兼ねて。
“`
# dnf -y upgrade
“`
全408モジュール、814ファイルものアップグレードがあった。サボりすぎ。

ところでPHPのバージョンは、というと
“`
# php –version
PHP 8.0.3 (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 Zend Technologies

# dnf module list php
Rocky Linux 9 – AppStream
Name Stream Profiles

元記事を表示

【Wordpress】ファイルマネージャーからプラグインを削除する方法

# 概要
久しぶりにwordpressにログインしようとしたら、以下のエラーで管理画面に入れず…なんじゃこりゃ!

> Warining require:(xxxxx/content/plugins/backwpup/vendor/composer/../../src/infrastructure/restore/restore.php): failed to open stream: no such file or directory in /xxx/public_html/wp-content/plugins/wordpress-popular-posts/vendor/composer/classloader.php on line 478
(以下省略)

ということで、プラグインのエラーでログインできない場合の対処方法を紹介します。

# 原因と対処方法
このエラーはbackwupというプラグインのバージョンが原因らしい。調べるとたくさん記事が出てきました。
大抵こういったエラーはプラグインの影響と考えて良いでしょう。

ということで、ファイルマネージャーから対応します。

元記事を表示

[Laravel] テスト実行時にテスト用データベースへ切り替わる仕組み

## 要点
Laravelでは、**テスト用DBの作成と切り替えを全て自動で行ってくれます**。
一連の仕組みに関わっているファイルは以下の通り。

– テスト用DBの作成 → `docker-compose.yml`および`docker/mysql/create-testing-database.sh`
– テスト用DBヘの切り替え → `phpunit.xml`および`.env`

## 前提
**Laravel Sailを使ったDocker環境**で開発をしているという前提で話を進めます。

– macOS 13.5.2
– PHP 8.2.11
– Laravel Framework 10.28.0
– laravel/sail v1.25.0
– Docker 23.0.5
– laravel/breeze v1.25.0

## 本題
### はじめに
アプリケーション開発において、テストを実行すると**DBに保存されているデータが全て消去されます**。
そのため、テストを行う際は必ずテスト用DBに切り替える必要があります。

::

元記事を表示

PHP_XDEBUG_REMOTE_HOSTとPHP_XDEBUG_CLIENT_HOSTの違い

## まとめ

`PHP_XDEBUG_CLIENT_HOST`: Xdebug **2** ではこれ
`PHP_XDEBUG_REMOTE_HOST`: Xdebug **3** ではこれ

Xdebugが2から3へバージョンアップされた際に構成設定の名前が変更された

https://xdebug.org/docs/upgrade_guide/ja

他にも変更された項目がある
例)

– `xdebug.remote_autostart` → `xdebug.start_with_request`
– `xdebug.remote_log` → `xdebug.log`
– `xdebug.remote_port` → `xdebug.client_port`(デフォルト値も`9000`→`9003`)

## 背景

古めのプロジェクトで修正する際にハマった。
うまくいっている設定を使えばデバッグ出来るだろうと、Xdebug3の書き方で書いてたが止まらずハマった。

## あとがき

PHPStormの設定が優秀なのと先人達の作ってきた道を辿って、なんとなくXdebugを利用し

元記事を表示

個人利用のためのインターネット速度テストツールの紹介

皆さん、こんにちは!今日は、私が個人利用のために開発したインターネット速度テストツールを紹介したいと思います。このツールは、ユーザーのインターネット接続速度を簡単にテストできるように設計されています。また、リンクを皆さんと共有します。以下に、コードとその動作について詳しく説明します。

[SpeedTest] (https://speedtest.tehito.com)

![Screenshot 745.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801337/145470d6-39d4-5c0e-708f-e183078a3e1b.png)

### コードの説明

“`speedtest.js“`

“`
// speedtest.js

var worker = new Worker(‘speedtest_worker.js’);
worker.onmessage = function (event) {
if (event.data.type === ‘result’) {

元記事を表示

PHP の論理積 (&&) の短絡評価で null check しつつ bool を返す

# はじめに

PHP は `if` 文に `null` 入れると `false` を返してくる。
そんな中、null check して、`null` なら `false`、`null` じゃなかったら関数を実行するコードがあり、何も不思議に思わなかったが IDE がもっといい書き方あるぜって言ってきた。
“`php
$is_smartphone = $client_type ? $client_type->isSmartphone() : false;
“`

自動変換してもらったらこうなった。
“`php
$is_smartphone = $client_type && $client_type->isSmartphone();
“`
…..。
null check どこいった?`false` どうやって入る?って思ってちょっと調べた。

追記: 記事最下部に PHP 8.0 以降の書き方も紹介しています。

# PHP の論理積 (&&)

どうやら PHP では、左の評価をして否定されたら終わるという実行形式らしい。これ**短絡評価**っていうみたい。
PHP で

元記事を表示

【Account Engagement】はじめてのフォームカスタマイズ

カスタマイズ自由度が低く使い勝手が良くないAccount Engagementフォームを最小限イケてる感じに持っていくため4つのカスタマイズを施した覚書です。

### フォームの作成

レイアウトテンプレートにデフォルトでテンプレートが1つ用意されており、それを元にフォームを簡単に追加出来るようになっている。

![sidebar.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2295479/e58ea28d-b3ae-0390-1588-c6df5b31d747.png)

カスタマイズ用レイアウトテンプレートを用意し、そこから1つ作成したフォームがこちら。
「素」ですね(°д°)..

![default_form.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2295479/437fc958-b5ff-f054-ad08-739894a0f3d0.png)

足りない項目はフォーム→フォームウィザード→2.項目

元記事を表示

プロパティの中身が決まっていない抽象的な親クラスのテストを行う方法

親クラスにはプロパティ名だけ定義しておいて値は子クラスで定義したい、というパターンがありました。

例えばEntityオブジェクトを詰め込んでcollectionにするためのクラスがあるとして、

“`php
class EntityCollection {
protected $entityName;

public function __construct(array $entities)
{
foreach ($entities as $entity) {
if (!($entity instanceof $this->entityName)) {
throw new Exception();
}
}
}

public function getById($id)
{
// $idで指定したentityを一つ取得する
}
}

class UserEntityCollection {
protected $entityName = UserEntity::class;
}
“`

`EntityCollection`のテストをし

元記事を表示

PHP 8.3でprepared statementのパフォーマンス測定

## 概要

その昔,PHPでPDOのprepared statementの数が多くなるとパフォーマンスが劣化するという問題があったらしい.

現在のPHPではどうなのか計測してみました.

## 計測

計測に使用したコードは以下で紹介されているコードをそのまま使用させていただきました.
https://qiita.com/kmotoki/items/7a0df427c8c2217ebbb4

### 検証環境

– ローカルマシン:M1 MacBook Pro
– Docker
– PHP 8.3
– MySQL 8.4

### 計測結果

| bulk count | emulate prepare | use prepare |
| — | — | — |
| 2 | 1.8224699258804 | 1.6240870475769 |
|4| 0.91341543197632 |0.8638001203537|
|8 |0.57537820339203| 0.51411798000336|
|16| 0.39952325820923 |0

元記事を表示

LAMP環境とは?

アシスタントのChatGPTに聞いてみた🗣️

LAMP環境とは?

LAMPは、Webアプリケーションを開発するための一般的な環境を示す用語です。

Linux:
オペレーティングシステムの一種であり、サーバー環境として広く使用されています。Linuxはオープンソースであり、多くの場合、サーバー環境のベースとして選択されます。

Apache:
オープンソースのWebサーバーソフトウェアです。Apacheは非常に広く使用されており、WebサイトやWebアプリケーションをホストするために使用されます。

MySQL:
オープンソースのリレーショナルデータベース管理システム(RDBMS)です。MySQLはデータベースを管理し、Webアプリケーションとのデータのやり取りを可能にします。

PHP:
サーバーサイドのプログラミング言語であり、動的なWebページの作成に広く使用されています。PHPはApacheと組み合わせて使用されることが多く、MySQLなどのデータベースと連携してWebアプリケーションを構築します。

これらの要素を組み合わせることで、LAMP環境が構築されます

元記事を表示

日付ごとのページネーション取得でリンクを押すと日付がリセットされてしまう原因、対処したこと

## 前提条件
ある勤怠管理アプリを作成中、レコードに保存した勤務時間や休憩時間などをwhereで該当する日付を絞り込み、paginate(5)で5件ずつのデータを取り出しました。
“`
public function index(Request $request)
{
$date = $request->input(‘date’);
if(isset($date)){
$today = Carbon::parse($date);
$yesterday = $today->copy()->subDay(1)->format(‘Y/m/d’);
$tomorrow = $today->copy()->addDay(1)->format(‘Y/m/d’);
$records = Time::where(‘date’, [$date])->paginate(5);
}else{
$today = Carbon::to

元記事を表示

PHP: ウェブ開発プロジェクトにおける強力な選択肢

> PHPは終わりに向かっている、PHPの命運は尽きつつあると囁かれることもある。一方で、新世代のプログラマーはPHPではなくnode.jsを選ぶだろうという声もある。しかし、否定できない事実もある:
インターネットは依然としてPHPに大きく依存しており、特にウェブ開発においてその存在感は健在だ。FacebookやWordPressといったクラシックでほぼアイコニックなプロジェクトが、PHPの持つ永続的な重要性を示している。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782463/f0f66a51-365b-1ab2-c972-4a3f523befd4.png)

### なぜPHPを選ぶのか?

– **使いやすさ**: PHPはユーザーフレンドリーな構文で知られており、初心者から経験豊富な開発者まで幅広く利用できる。また、既存のウェブサイトもPHPで簡単に修正・保守が可能だ。
– **コスト効率**: オープンソースであるため、高額なライセンス費用がかからない。
– **速

元記事を表示

[PHP] ある連想配列の一部だけキー付きで取り出して新たな連想配列に移す

ChatGPTさんに教えてもらいました。
覚え書き用ですが参考になりましたら幸いです。

## ある連想配列

例えばこういう連想配列があるとします。
“` sample.php
$arr = [
‘a’ => $a,
‘b’ => $b,
‘c’ => $c,
‘d’ => $d
];
“`

この配列の一部だけ利用して、新たな連想配列として定義したい場合のやり方です。

## 新たな連想配列
この形に定義したいとします。
“` sample.php
$arr2 = [
‘b’ => $b,
‘c’ => $c
];
“`
## やり方

array_intersect_key関数を使用します。

“` sample.php
$arr2 = array_intersect_key($param, array_flip([‘b’, ‘c’]));
“`

###### $arrとarray_flip([‘b’, ‘c’])の両方のキーを比較し、重複するキー(’b’と’c’)のみを含む新

元記事を表示

MVCモデルの基礎知識

# はじめに

こんにちは!
社会人一年目の石川です。
記事をご覧いただきありがとうございます。

今回は、MVCモデルについてまとめました。

## 目次
1. [MVCモデルとは?](#mvcモデルとは)
1. [MVCモデルのそれぞれの役割](#mvcモデルのそれぞれの役割)
・[M(モデル)](#mモデル)
・[V(ビュー)](#vビュー)
・[C(コントローラ)](#cコントローラ)
3. [MVCモデルのメリットとデメリット](#mvcモデルのメリットとデメリット)
・[MVCモデルのメリット](#mvcモデルのメリット)
・[MVCモデルのデメリット](#mvcモデルのデメリット)
4. [最後に](#最後に)

## MVCモデルとは?
MVCモデルはアプリ開発においてコードを整理する考え方のことです。

MVCは、モデル(Model)、ビュー(View)、コントローラー(Controller)の頭文字を取ったもので、それぞれの役割を明確に分離します。この3つが独立して連携することで、コードの管理が容易になり、開発効率が向上します。

つまり、役割によってどこに何のプ

元記事を表示

OTHERカテゴリの最新記事