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

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

WordPressで”◯日以内に投稿された記事かどうか”の関数を作るモダンな方法

# 結論
下記コードをコピペして関数名に適当なプレフィックスを追加して使えばいい。

“`js
function is_recently_post( int $days = 7, ?WP_Post $post = null): bool {
/** @var DateTimeImmutable|false */
$post_time = get_post_datetime( $post );

if (false === $post_time) {
return false;
}
$days_difference = $post_time->diff(current_datetime());
return $days_difference->days <= $days; } ``` # 理由 [公式サイトで"これからの実装にget_the_date('U')やcurrent_time('U')を使うな"と書いてある](https://make.wordpress.org/core/2019/09/23/date-tim

元記事を表示

PHP8技術者認定初級試験を受けてみた

この記事は[ミライトデザイン Advent Calendar 2023](https://qiita.com/advent-calendar/2023/miraito-inc)の8日目の記事です。

前日の記事は[ブッチ](https://zenn.dev/t_kitamura)さんの[「これからChatGPT(AI)と共存するために知っておくべきこと Part2」](https://zenn.dev/t_kitamura/articles/289446c05c5469)でした。

自分はAIに関する知識がないのでこの記事を読んで知識をつけたいと思います。
Part4 までの予定なので楽しみしています!

# はじめに
先日「PHP8技術者認定初級試験」を受けてきました。

社内で資格取得を奨励する制度が導入され、日常の業務で使用している「PHP」に関連する資格試験があることを知り、
– 自身の「PHP」に関する知識はどの程度なんだろう
– 勉強することで業務に繋がるよね

と考え受験を決めました。

その内容をこの記事で共有していきたいと思います。

# 試験概要
– 概要:PHPプ

元記事を表示

Platform.shのCLIを使う

4日遅れのday4(!)の今日はPlatform.shのCLIを使っていきます。

## インストール

公式ドキュメントにあるインストール用のbashスクリプトを使います。
https://docs.platform.sh/administration/cli.html#1-install

Macの方はhomebrewからも入れられます。
“`shell
$ brew install platformsh/tap/platformsh-cli
“`

## 認証

インストールが完了したら、まずコマンドを打って認証を始めます。
“`shell
$ platform
“`

![スクリーンショット 2023-12-08 10.46.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/23963/7c075966-879f-e6ab-f624-d302b5e13b9b.png)

自動的にデフォルトブラウザで127.0.0.1:5001が開かれて、そこからplatform.shのログインフォーム

元記事を表示

PHP8.1でのマルチバイト文字列関数の文字エンコーディングの挙動について

# 概要

PHP8.1の変更点でマルチバイト文字列関数の文字エンコーディング処理の変更が公式マニュアルには記載がなく手探りで調査することとなり苦労しました。
特に**文字エンコーディングの自動検出**の挙動が変わっている点の調査が大変で、HPのバージョンアップ後に影響調査漏れが発覚し本番トラブルにも発展しました。

今回は、前述の調査で得られた情報の中で**文字エンコーディングの自動検出**の挙動変更について重点的に紹介しようと思います。

下記の両方に当てはまる方は、同じ課題に直面する可能性が高いため、この記事の内容で理解をしてもらいつつ、ご自身でも詳しく調査することを推奨いたします。

– 文字エンコーディングの自動検出を使用している
– PHP8.1以上にバージョンアップを予定している

# PHP8.1のマルチバイト文字列関数

PHPの公式マニュアルには記載がない変更が、PHP8.1でマルチバイト文字列関数の挙動が変わっているものが多数あります。
しかし、それぞれに個別の変更点としては軽微なものが多くバグ修正のようなものがほとんどです。

– [PHP:

元記事を表示

EC-CUBEとLINE WORKSの連携

はじめまして!

ざっくり20年位システム開発関連のお仕事をさせて頂いております。
公開されている内容をベースにお仕事で経験した事例を皆さまにご紹介できたらと思います。

現在とあるECサイト(BtoB系)の保守開発を担当させて頂いているのですが、
ベースになっているのはEC-CUBE(オープンソースのElectronic Commerce向けコンテンツ管理システム(CMS))のVersion2です。
https://www.ec-cube.net/product/cases/detail.php?id=2994
ECサイト自体は約9年の歴史があり、サービススタートから現在まで大量の機能追加とカスタマイズが行われています。

# LINE WORKSとは?

LINEについては説明不要かと思いますが、
業務用に利用出来るビジネス版のLINEが**LINE WORKS**です。
LINEで使える機能に加えて、様々なビジネスシーンで利用するための管理機能やセキュリティ面での強化がされています。普段使い慣れているLINEと操作性もほぼ同じなので、導入が容易な事もメリットになります。
http

元記事を表示

Laravel10からInvokable検証ルールがデフォルトに

## はじめに
Laravel9で導入された[Invokable 検証ルール](https://github.com/laravel/framework/pull/42689 “Invokable 検証ルール”)がLaravel10からデフォルトとなったため、そちらの紹介をします。
※Laravelの独自バリデーションの手法の1つになります。

上記リンク先にも記載の通り、Laravel9時点で導入されその時点ではオプション指定しないと作成できない状態でしたが、Laravel10になってからは推奨となりオプションなしで作成することができるようになりました。

## 利用シーン
Laravel標準で用意されているバリデーションでは対応できない場合に、独自のバリデーションとして定義することが多いです。

## 実行環境
Laravel Framework 10.23.1

## ルールファイルの作成
まずはルールファイルを作成します。
以下、ルールファイルを作成するためのコマンドです。

“`command
php artisan make:rule MbDigit
“`

自動的に以

元記事を表示

一意な文字列作るよ、”Uid”

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

## 一意な文字列作るよ、”Uid”

[Uid](https://symfony.com/doc/current/components/uid.html)は、いろいろな種類のUID、一意な文字列を作成します。Symfony以外でも使えます。

### インストール

“`shell
composer require symfony/uid
“`

### UUID

[UUID](https://ja.wikipedia.org/wiki/UUID)にはいくつかの種類があります。`Uuid`クラスはそれぞれの種類の`Uuid` オブジェクトを返すスタティックなメソッドを用意しています。オブジェクトはそれぞれの種類ごとに用意されており、`Uuid` クラスを継承しています。オブジェクトにはそれぞれの形式に変換するメソッドが用意されています。

“`php

us

元記事を表示

【メモ】Laravel10 Logに関してドキュメントさっくりまとめ

## 概要
– さっくりとLogに関する情報をまとめる
– わからない部分は、ドキュメントコピペ

## 公式ドキュメント
https://laravel.com/docs/10.x/logging

多少省略もしているため、すべてを見たい場合は直接参照のこと、、
## Configuration

>All of the configuration options for your application’s logging behavior are housed in the config/logging.php configuration file. This file allows you to configure your application’s log channels, so be sure to review each of the available channels and their options. We’ll review a few common options below.
By default, Laravel will use the stack

元記事を表示

【PHP】マイナーフレームワーク「Flow」を試してみる~独自Exception編~

# 初めに
前回は[こちら](https://qiita.com/nnhkrnk/items/739ac12036c858525e23)の記事でマイナフレームワークFlowとdoctrineというORMを用い、DB接続を伴うAPIを作成しました。
今回はFlowにおける独自Exceptionの定義方法と、そのハンドリング方法を学んでいきます。

# Flow標準のExceptionHandler
Flowでは標準で2種類のExceptionHandlerクラスが用意されています。

* [DebugExceptionHandler](ProductionExceptionHandler)
* [ProductionExceptionHandler](https://github.com/neos/flow-development-collection/blob/27ffc953ae485033bed5354b20b45dbcfd37ce81/Neos.Flow/Classes/Error/ProductionExceptionHandler.php)

2つのHandlerクラスはどち

元記事を表示

Composerを深ぼってみた

現在PHPを始めてから約1年半になろうとしている大学生です。

本日はPHPを用いた開発では欠かせないComposerに焦点を当てて記事を書きたいなと思います。

ComposerはPHPやLaravelの使用者だったら誰もが使用しているツールかと思います。
ただ、あまり内部構造やcomposer install, composer requireとかの基本的な使い方以外の用法を使ったことがなかったので、今回は色々深ぼって調べていきたいなと思います。

## 想定読者

– PHP, Laravel等の使用者
– Composerの内部構造を知りたい
– Composerの便利な使い方を知りたい など

基本的な使い方がわかっていて、構造に興味を持っている方に良い情報を届けられたらなと思っています。

## Composerの基本おさらい

ComposerはPHPのパッケージ管理ツールという位置付けで存在しています。

パッケージとは標準で用意されているもの、例えばfor文や組み込み関数のなど、意外で使う便利な道具といったところだと認識していただければと思います。
EX) Guzzl

元記事を表示

文字列連結に「.」を使ってないかい?

## 概要

PHPの文字列結合でよく見かけるのが「.」を用いた連結

“`php
$hoge = ‘hoge’;
$huga = ‘huga’;
echo $hoge.’and’.$huga.’GO’;
//hogeandhugaGO
“`

実はこういう書き方も出来ちゃうんです

“`php
$hoge = ‘hoge’;
$huga = ‘huga’;
echo “{$hoge}and{$huga}GO”;
//hogeandhugaGO
“`

可読性が上がったかつ簡潔ですね。

https://www.php.net/manual/ja/language.operators.string.php#60035

元記事を表示

【Apache2.4】Win10環境でPHPと連携してみた(PHPモジュール)

この記事では、Apache2.4とPHPを連携して、
PHPファイルをApacheが扱えるようにする方法を紹介します。
この記事では、PHPに同梱のPHPモジュールを使用します。

(Windows11環境がないので、Windows10の環境です)

**この記事はPHPファイルをApache2.4で使いたかったので、同時にQiita記事を書いたものです。
一部間違いがある可能性があるので、心配な場合は別の記事も見てみることをお勧めします。**

# 注意点
この記事では、Apache2.4とPHPがインストール済みなことを前提としています。
Apacheのインストール方法は以下の記事で紹介しています。

https://qiita.com/TechCat56/items/aba26453c10414ce68f6

この記事ではPHPが`C:\php`にあり、Apacheが`C:\Apache24`にあることを前提として進めます。

# 連携

## PHP.iniを作成(既にできている人は飛ばしてください)
まず、PHP.iniが必要です。
同梱されている`php.ini-devel

元記事を表示

PHP でも AWS Lambda って実行できるんやで 〜 lambroll を添えて 〜

# はじめに

この記事は NE Advent Calendar 2023 7日目の記事です。

# どうして PHP なのか

弊社は PHP をメインに開発を進めております。
Lambda が標準でサポートしている Golang や Python を日常的に使用している人はおらず、Lambda のためだけに新しい言語を導入するのは今後このコードをメンテ出来る人が減ってしまう。

なんとかして PHP で書けないものか…

# 救世主

https://bref.sh/

Bref は PHP を Lambda で実行するための環境を提供してくれるライブラリです。

# 早速使ってみる

### インストール

以下のような composer.json を作って、`composer install` を実行します。

“`composer.json
{
“require”: {
“bref/bref”: “^2.1”
}
}
“`

### 中身を書く

あとは思い思いにプログラムを書いてゆく。

他のライブラリを使う必要がないのであれば c

元記事を表示

画像やCSSの管理、”Asset”

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

## 画像やCSSの管理、”Asset”

[Asset](https://symfony.com/doc/current/components/asset.html)は、画像やCSSなどのファイルのバージョニングやURLの取得を行うコンポーネントです。

### インストール

“`shell
composer require symfony/asset
“`

### URLの取得
`Package` オブジェクトを作成し、`getUrl()`することで、ルートパスからのURLを取得できます。

“`php
use Symfony\Component\Asset\Package;
use Symfony\Component\Asset\VersionStrategy\EmptyVersionStrategy;

$package = new Package(n

元記事を表示

Remove Special Character from String in PHP

In this PHP tutorial, I will discuss how to remove special character from strings in PHP using preg_replace. Strings containing special characters may be vulnerable to security flaws, inconsistent data, or unfavorable results.

Sometimes, We need to get the result of an input string as a simple composition of alphabets and numbers and, want to remove all special characters from the string by using PHP preg_replace method.

Remove Special Character from String in PHP

元記事を表示

プリペアドステートメントの出力(ログ,デバッグ用)

# 悩み
ログ用に出すのもそうだし、SQLでエラーが出た際に
実際にDBに発行されているSQLの内容を調べる方法がわからなかった。
変数がバインドされた後に実際に投げられているSQLはどうやって調べるの、という疑問があった。

# 結論
私はこのように出しました。
私の環境(PHP8.2.9 mysql 5.7.36)では動きました。
“`
//バインドされた後のプリペアドステートメントを出力(ログ用)
public function getPreparedStmtAfterBind($pdo_stmt) {

ob_start();
$pdo_stmt->debugDumpParams();
$content = ob_get_contents();
ob_end_clean();

preg_match(‘/Sent\sSQL:\s\[\d+\]\s(.*?)\sParams/s’, $content, $matches);

retur

元記事を表示

【phpMyadmin x Docker】「PMA_USER」と「PMA_PASSWORD」とは何?必要なのか?

# 概要
`docker-compose.yaml`でphpmyadminを使っている方なら見たことあると思うのですが、`PMA_PASSWORD`をご存知でしょうか。

普段使ってなかったのですが、その存在を知ったので、今回これを使って実装しました。
「これってphpmyadmin用のもの?」「Mysqlサーバ側と違うユーザーとパスでもいいの?」という疑問があったので調べてみました。

# 前提

以下の簡易的な`docker-compose.yaml`を使用する前提です。

“`yaml
version: ‘3.8’

services:
mysql:
image: mysql:latest
restart: always
environment:
MYSQL_ROOT_PASSWORD: rootpassword
MYSQL_DATABASE: exampledb
ports:
– “3306:3306”
volumes:
– db_data:/var/lib/mysql

php

元記事を表示

PHPの全角 trim には気をつけましょう

## PHP 8.4 未満では全角スペースを正しく trim できない

参考記事:https://qiita.com/rana_kualu/items/87bc5dd0396103bd7a32

どういう事かと言うと、例えば下記のコードがあったとします

“`
#!/usr/local/bin/php

“`

この結果の期待値はもちろん「イェーイ」ですね

### では実行結果を見てみましょう

“`
$ ./php-trim-error.php

��ェーイ
“`

**おめでとうございます!!!!!** 正しく文字化けしましたね!!! :scream:

この辺りは文字コード表とかググっていただければと思いますが、UTF-8 でもこの問題は解決できません。

## じゃあ、どうすれば!?

PHP 8.4 以上に上げれば良いと思われますが、現状 PHP 8.4 は業務では使えません。執筆時の2023年12月時点ではお客様の強いご要望が無い限り RHEL 9 で納品するとなれば PHP 8.0 です。

元記事を表示

【DB設計】DM機能実装のためのDB設計で大苦戦した初心者の話

## 要約
現在作成しているアプリで実装予定の機能の一つに、DM機能があります。

しかしそのための論理設計(DB設計)の過程で、なぜエンティティとしてメッセージルームが必要なのか、理解するのに時間がかかりました。

結論として、自分は**手書きでテーブルとレコードを作成し、どんなエンティティが必要かイメージすること**で解決できました。

## 本記事はこんな人におすすめ
* DB設計でエンティティの抽出に苦戦している方
* DB設計における初心者の躓きポイントを知りたい方

なお、用語やそもそもの理解に誤りがあるかもしれませんが、どうか生暖かい目で見守っていただけますと幸いです。

## 問題
* DM機能のために必要なテーブルが分からない
* usersテーブルとmessagesテーブルの他にmessage_roomsテーブルも必要だと言われたが、なぜ必要だか理解できない
* よっておそらく、DB設計の体系的知識がない

## アプローチ
まずDM機能に必要なテーブルは何か、[LaravelDB.com](https://zenn.dev/daisu_yamazaki/artic

元記事を表示

【PHP】変数の条件判定を比較(if, isset, empty, is_null)

# はじめに

今回は、変数の条件判定を行う関数を比較し、まとめました。

※おことわり※
基本的に学習内容のアウトプットです。
初学者であるため、間違い等あればご指摘いただけますと嬉しいです。

# この記事の目的

メソッドの性質に関して理解が曖昧だったため、整理をしてアウトプットしようと思いました。

# この記事の対象者

– PHPを学習されている初学者の方
– issetやemptyの仕様に迷いがある方

# この記事の内容
1. isset
2. empty
3. is_null
4. メソッドの比較

# 1. isset

> 変数が宣言されていること、そしてnullとは異なることを検査する

https://www.php.net/manual/ja/function.isset

– 存在するかつ、null以外の値の場合true、それ以外はfalseを返す ※空はtrue

# 2. empty

> 変数が空であるかどうかを検査する

https://www.php.net/manual/en/function.empty.php

– 存在しないまたは、空,

元記事を表示

OTHERカテゴリの最新記事