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

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

PHPにおけるメモリ使用量の計測とログ出力

PHPでメモリ使用量を計測し、処理前後でその変化をログに記録する方法を解説します。
パフォーマンスを監視し、リソースの無駄遣いを防ぐ際に役立ちます。

## メモリ使用量の計測に使用する関数
PHPには、現在のスクリプトのメモリ使用量を取得するための関数がいくつか用意されています。その中でも、よく使われるのが memory_get_usage() です。この関数は、メモリ使用量をバイト単位で返してくれます。

### `memory_get_usage` の使い方

“`php
$memoryUsage = memory_get_usage();
“`
これで、スクリプトが使用しているメモリのバイト数が取得できます。また、memory_get_usage(true) と引数に true を指定すると、システムに割り当てられたメモリ(未使用分も含む)を取得できます。

## メモリ使用量をメガバイト単位で取得する
memory_get_usage() はバイト単位の数値を返しますが、メガバイト(MB)単位に変換した方が見やすいです。なので、1024で2回割ります。

“`php

元記事を表示

Laravel11 Eloquent の主キー(ID)を UUID に変更する

## 目的

:::note warn
以前、 [goldspecdigital/laravel-eloquent-uuid](https://github.com/goldspecdigital/laravel-eloquent-uuid) ライブラリを利用して主キーをUUIDに変更する記事を書いていました。

https://qiita.com/ucan-lab/items/a8374ba421fe7828dcb9
:::

Laravel9以降は [HasUuids](https://laravel.com/docs/11.x/eloquent#uuid-and-ulid-keys) トレイトが利用できるようになりました!

ということでやっていきます。

## 環境

– PHP: 8.3.11
– Laravel: 11.23.5

## UUID とは

Universally Unique Identifierの略。
重複する可能性が無視できるほど小さく、一意な識別子として扱えるIDです。

生成方法によりバージョン1からバージョン5までの種類があり、今回使用するのはバー

元記事を表示

スプレッド構文で配列結合

PHP7.4からスプレッド構文が使用可能になりました。
“`php
$array1 = [‘apple’, ‘banana’, ‘peach’];
$result = [‘melon’, …$array1];

// 出力結果
Array
(
[0] => melon
[1] => apple
[2] => banana
[3] => peach
)
“`

さらにPHP8.1から、キー名に文字列が含まれている連想配列にも対応できるようになりました。
“`php
$array1 = [‘red’ => ‘apple’, ‘yellow’ => ‘banana’, ‘pink’ => ‘peach’];
$result = […[‘green’ => ‘melon’], …$array1];

// 出力結果
Array
(
[green] => melon
[red] => apple
[yellow] => banana
[pink] => peach
)
“`

同じ実行結果として、PHP組み込み関

元記事を表示

laravel+react+Inertiaのプロジェクトを立ちあげる

## はじめに

laravel11を立ちあげる。
windowsで行うがwindows特有の操作はないのでMacユーザーでも使用できると思う。
laravelドキュメントのスターターキット参考にしている。
https://laravel.com/docs/11.x/starter-kits#laravel-breeze

## 目次
1.laravelを新規で立ちあげる
2.laravel breezeのパッケージをインストールする
3.laravel breezeのインストール

 
## laravelを新規で立ちあげる
“`
curl -s “https://laravel.build/プロジェクト名” | bash
“`

プロジェクト名のところはディレクトリの名前になるので好きにつけてもらっておっけい。
インストールにかなりの時間を要します。
15分ほど? 
PCのスペックが低いのかなぁ~(i5-1135G7)
プロジェクトが立ち上がったら
“`
cd プロジェクト名
./vendor/bin/sail up
“`
をコマンドで実行した後[localhost]をブラ

元記事を表示

SOLID原則とは? ~前編 S・O・L の3原則について解説~

# SOLID原則とは?

**オブジェクト指向における設計原則のこと**

以下の5つの原則の頭文字をとったものです。

1. 単一責任の原則(**S**ingle Responsibility Principle)
2. オープン・クローズドの原則(**O**pen-Closed Principle)
3. リスコフの置換原則(**L**iskov Substitution Principle)
4. インターフェース分離の原則(**I**nterface Segregation Principle)
5. 依存性逆転の原則(**D**ependency Inversion Principle)

今回は全編として S,O,L の3原則をご紹介します!

## 1. 単一責任の原則(**S**ingle Responsibility Principle)

**クラスは一つのことだけ行うべきである。** という考え方に基づいた原則になります。

仮にひとつのクラスに様々な機能を持たせた場合、

クラスの修正作業が発生した場合、複数機能への影響範囲のチェックに時間が必要です。

ひと

元記事を表示

【PHP】array_filterの使い方

## array_filterとは

“`php
array_filter(array $array, ?callable $callback = null, int $mode = 0): array
“`

> (PHP 4 >= 4.0.6, PHP 5, PHP 7, PHP 8)
> array_filter — コールバック関数を使用して、配列の要素をフィルタリングする

https://www.php.net/manual/ja/function.array-filter.php

配列を破壊することなくフィルタリングしてくれる関数です。

元記事を表示

クエリビルダでlatest()->first()やoldest()->first()と書いてはいけない

https://readouble.com/laravel/9.x/ja/queries.html#latest-oldest
> latestおよびoldestメソッドを使用すると、結果を日付順に簡単に並べ替えできます。デフォルトでは、結果をテーブルのcreated_atカラムによって順序付けします。もしくは、並べ替えるカラム名を渡すこともできます。

`latest()->first()`や`oldest()->first()`だと、`created_at`を基準にレコードを見に行ってしまうため、もしバルクインサートしたデータを取得したい場合、意図しないデータを取得してしまう場合があります。

### 【結論】
latest()とoldest()の引数にid指定でOK
“`php
latest(‘id’)->first();
oldest(‘id’)->first();
“`

元記事を表示

多次元配列内の値に変更を加えたい時

array_walk、array_walk_recursiveを使うとスッキリ書けます。

“`php
// forEach
$array = [
‘hoge1’ => null,
‘hoge2’ => null,
‘hoge3’ => null
];
foreach ($array as $key => &$value) {
if ($value === null) {
$value = 0;
}
}
var_dump($array);
// array(3) {
// [“hoge1”]=>
// int(0)
// [“hoge2”]=>
// int(0)
// [“hoge3”]=>
// &int(0)
// }

// array_walk
$array2 = [
‘hoge1’ => null,
‘hoge2’ => null,
‘hoge3’ => null
];
array_walk($array2, function (&$value) {
if ($value === null) {

元記事を表示

PHPのバージョンを変更する方法

こんにちは!
Laravelのバージョンによって求められるPHPのバージョンが異なることはみなさんご存知だと思います。
この記事では、Laravel Sail、Dockerを用いて現在のPHPのバージョンの確認方法と変更方法について記載したいと思います!

初めての投稿で拙い文章ですが、温かい目で読んでやってください!
# LaravelのバージョンとPHPのバージョンの依存関係
(2024/10 現在)
| Laravelのバージョン | PHPのバージョン |
|:———–|————|
| Laravel 8 | PHP 7.3以上 |
| Laravel 9 | PHP 8.0以上 |
| Laravel 10 | PHP 8.1以上 |
| Laravel 11 | PHP 8.2以上 |

上の表のようにLaravelのバージョンによっては必要とされるPHPのバージョンも異なります。
PHPのバージョンが求められているバージョンを満たしていない場合、意図していた動作

元記事を表示

E: Release file for http://archive.ubuntu.com/ubuntu/dists/focal-updates/InRelease is not valid yet (invalid for another 10h 25min 3s). Updates for this repository will not be applied.

## はじめに

phpが入っていなく、パッケージを更新しようとしたらエラーが発生した

 
実行コマンド
“`
sudo apt update
“`
 
## 本題

タイトルのように
“`
E: Release file for http://archive.ubuntu.com/ubuntu/dists/focal-updates/InRelease is not valid yet (invalid for another 10h 25min 3s). Updates for this repository will not be applied.
“`

エラーが発生した。
設定されている時間のずれが原因でエラーになる。
 
以下のコマンドで設定された時間を確認できる。
“`
date
“`
これで表示された時間とPC右下に表示されている時間があっているか確認する。
※自分の場合は10時間ほどずれていたので、すぐ気づいた。

 
### 以下の手順で直る。

#### 1.NTPを有効にして時刻を同期する
“`
sudo timedatectl set-ntp

元記事を表示

laravelを新規立ち上げ時にエラー2つ failed to open stream: Permission denied SQL[42S02]:Base table or view not found:1146 Table ‘laravel.sessions’ doesn’t exist

 
## はじめに
laravelを新規で立ちあげる時って必ず権限エラー発生しません?
久しぶりにやったら忘れてて少してこずったのでメモ書きしておきます。

初学者はハマるところなので参考にしていただけたらと思います。

## failed to open stream: Permission denied
![スクリーンショット 2024-10-05 223546.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3832683/36c053c3-14c7-8366-bdd3-ecfd266464d5.png)

必ずと言っていいほど新規立ち上げ時はこのエラーが出ます。
(この画面は初めて見ましたがエラーの内容は同じです。)
これは、「logの書き込み権限がない」というエラーです。

なのでlogの書き込み権限を付与しましょう!
プロジェクトの中までcdで移動してから以下のコマンド実行!
“`diff_php
$ sudo chmod 777 storage
“`

※sudoをつけないと権限の変更

元記事を表示

シニアPHPエンジニアの資質

PHP開発者として、「シニアPHPエンジニア」というタイトルは非常に魅力的です。もしあなたがPHPを本当に楽しんでいるなら、これからシニアPHPエンジニアが持つべき資質をいくつか挙げて、ジュニアやミッドレベルのPHPエンジニアの助けになればと思います。

![画像説明](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/kx83z5vr79tnteg3kq3s.png)

### 落ち着いたマインドセット
すべてのプログラマーにとって、良いコードを書くためにはしっかりとしたマインドセットが必要です。

忍耐強く、簡単に諦めないようにしましょう。

開発プロセスの中で、特にジュニアやミッドレベルの開発者は、コードやアーキテクチャに関するさまざまな問題に直面します。些細な問題もあれば、まったく新しい問題もあります。一つ一つの根本原因を冷静にトラブルシューティングすることが重要です。急いで取り組むのはプロジェクトに対して無責任です。焦りは妥協や挑戦の回避につながります。私自身、北京での2年間のシンプルな生活が、冷静なマインドセッ

元記事を表示

私の同僚たちは、私がどれだけ早く物事を終わらせるかを羨ましがっています——これはすべて、これらの生産性ツールのおかげです!

私の同僚たちは、私がどれだけ早く物事を終わらせるかを羨ましがっています——これはすべて、これらの生産性ツールのおかげです!
Macのノートパソコンは確かに使いやすいですが、使用時にいくつかの課題があります。ここでは、Macの体験を向上させるための10の一般的なソフトウェアツールを紹介します。

### Magnet – ウィンドウサイズとレイアウトの管理
このソフトウェアを使うことで、Macでウィンドウのサイズや位置をWindowsのように管理できます。ウィンドウの最大化、画面の垂直または水平分割、画面の1/4や1/3にリサイズする機能が利用できます。また、キーボードショートカットを使ってウィンドウサイズやレイアウトを制御することも可能です。

![画像説明](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/8967gkjso9uwf7p3tekc.png)

**[[ダウンロード](https://magnet.crowdcafe.com/)]**

### Snipaste – スクリーンショットツール
Snip

元記事を表示

【Laravel】テスト実行時、データを吹っ飛ばさないように注意!!

# はじめに
本記事をご覧いただきありがとうございます。東京でバックエンドエンジニアとして働いている大野です。今回は初心者や経験の浅いエンジニアがよくやってしまう(?)テスト実行時にデータベースを空にしてします事件について対策を書いていきます。私も過去に1度やってしまったので自戒を込め、実施した対応を備忘録として残します。扱う内容はLaravelです。参考になりますと幸いです。また、誤った箇所がございましたらご教示いただけますと幸いです。

# テスト実行にあたっての前提
本記事では以下の環境を使用しています。私は普段、ローカルでsailコマンドを扱っているので、普段sailコマンドを使っていない方は以降で出てくるコマンドの「sail」の部分を「php」に読み替えてください。(sail artisan 〜 ⇨ php artisan 〜)
* Laravel11
* PHP Unit
* Mac M3
* docker compose(Laravel sail)
::: note alert
テストは本番環境では実行しないこと!!
テストコードを書いたことあるかたであればLaravel

元記事を表示

DateTime::diff()は時間差判定には(ほぼ)使えない

# 概要

phpでふたつの日時の差分を判定するとき、DateTime::diff()は基本的に不適切である。

# 不適切さの詳細

– ふたつの日時が「○分以内だったら」「○秒以上だったら」という比較には使えない。
– DateTime::diff()の戻り値であるDateIntervalは、「○年○か月○日○時間○分○秒」というデータの持ち方をしている。
– たとえば「差分が5秒以上か」を判定したいとき、「60秒差」だったら、DateIntervalは「1分0秒(秒はゼロ)」なので、false判定になってしまう。

# 1. 例

## 1-1. サンプルコード

“`php
$dt1 = new DateTime(‘2001-01-01 00:00:00’);
$dt2 = new DateTime(‘2002-03-04 05:06:07’); // 1年2か月3日5時間6分7秒後
$diff = $dt1->diff($dt2);

// デバッグ用関数。DateIntervalの指定プロパティを出力する。
function test(DateInterval $di,

元記事を表示

【Laravel】「ZipArchive not found」エラー解消法!

泉([@izumin_0401](https://twitter.com/izumin_0401))です。

今回は、Laravelの「ZipArchive not found」エラー解消法を解説しやす!

:::note info
僕はDocker使っているので、Docker環境を前提としています。
:::

# ブログ記事はこちら

https://traveler0401.com/laravel-zip-archive-not-found/

# 「ZipArchive not found」エラー解消法
## zipモジュールのインストール
“`
RUN apk add –no-cache libzip-dev && \
docker-php-ext-install zip
“`
Dockerファイルに追記して、Dockerを再ビルドします。

# zipモジュールの確認
“`shell
$ php -m
“`
Dockerコンテナに入り、上記コマンドを実行してzipが表示されればOKです。

# まとめ
実はめっちゃハマって2時間くらい苦戦してたのは内緒。

#

元記事を表示

Laravel11 リクエストログを出力する

https://qiita.com/ucan-lab/items/bfd15b096a916f811468

Laravel8系の時に書いた記事がこのままの通りにはできなくなったので、Laravel11に合わせて書き直します。

## 目的

Laravelでリクエストログを出力します。
また、環境変数でログ出力の有効/無効の切り替えます。

## 環境

– PHP 8.3.11
– Laravel 11.23.5

## RequestLogger を作成

“`shell-session
$ php artisan make:middleware RequestLogger
“`

`app/Http/Middleware/RequestLogger.php` ファイルが生成される。

### bootstrap/app.php へ追記

“`php:bootstrap/app.php

元記事を表示

PHP/Symfony バージョンアップ時に確認するComposerコマンドまとめ

## 目的

PHP 8.0.25 → PHP 8.2.7 へバージョンアップ作業を行いました。
その際に Composer 周りの脆弱性のあるパッケージが含まれてないか調査しました。
Symfony 5.4.13 を使用しており、今回はフレームワークのバージョンアップは実施しません。

## ローカルでvendor配下を更新してないか

`vendor` 配下がどういうわけかGitで管理されているプロジェクトでした。
`vendor` 配下が更新されていてアップデートできないのではないか?という不安がありました。

その疑念を解消する神コマンドがありました。

“`
$ composer status -v
No local changes
“`

変更がないのでひと安心です。

## プラットフォーム要件が満たされていることを確認する

`check-platform-reqs` コマンドは 現在のプラットフォーム(PHPや拡張モジュールなど)が、プロジェクトの `composer.json` ファイルに定義された依存関係の要件を満たしているかどうかを確認します。

“`
$

元記事を表示

音楽イベントのグッズを販売するECサイトを作ってみた

# はじめに
個人開発で「音楽イベントのグッズを販売するECサイト」を作ってたので、紹介します。
![melody-market_top-movie.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/935364/e0189049-0272-49f6-7715-c4ef30dba2d0.gif)

# 概要
音楽のライブイベントに足を運ぶと、Tシャツや帽子、ステッカーなど様々なグッズが販売されています。それらのグッズをオンラインで販売しているECサイトを作成しました。
運用は考えておらず、あくまで自分の練習・スキルアップとして作ったものです。
技術スタックについては後ほど詳細を記載しますが、主にPHP, Laravelを用いており、MPAのWebアプリケーションとなっています。

# URL
## デプロイ先

システムの利用者の種別は、ユーザー(一般の利用者)、オーナー(店舗を運営)、管理者(システムを管理)の3つがあります。

:::note warn
起動に数秒時間がかかります。
:::

ユーザー:

元記事を表示

LaravelのFormRequestで条件付きバリデーションを行う

# 前置き
アンケートで問1で1〜5を選択する設問があり、問2は問1の回答が3〜5の時必須の自由入力の場合を想定しています。

# FormRequest
まずは、FormRequestを継承したMyRequestを作成します。
“`php
php artisan make:request MyRequest
“`
Controller内のRequestをMyRequestとすれば、バリデーションをRequest内ですることができます。今回はファイル名を`MyRequest`としていますが、自由に変更していいです。

# バリデーション
次にMyRequest内でバリデーションの定義をする場合、`rules`に追加していきます。
“`php
public function rules()
{
return [
‘question_1’ => ‘required|numeric|min:1|max|5,’
];
}
“`
とりあえず、`question_1`がバリデーションの対象、`required|numeric|min:1|max|5`が必須か

元記事を表示

OTHERカテゴリの最新記事