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

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

【Laravel11】最低限のログ設計について

## はじめに
システムのログってめちゃくちゃ大事。
システムのバグの早期発見からの修正だったり、システムで何が起きているか可視化できる。

そんなある日、あるプロジェクトのフレームワーク設計を行うことがあった。
ただ単に環境を用意して渡すと、書き方がそれぞれ異なる可能性もあるため、先に準備した方がいいなと思った時の出来事である。

**ログ周りはできるだけ処理を共通にしてメンバーにおろそう**

特にLaravelは書き方に自由性があるため、それぞれ異なる書き方ができやすいフレームワーク(だと個人的には思っている)。

荒削りな部分もあるが、全体のログ設計として最低限を網羅できるように設計したことを忘れないように備忘録としてメモしておく。

## ログ実装

+ **前提**
前提としてデフォルトのLaravelのフローを崩さず、ログの出力、書き出しの部分のみをオーバライドしたい。
また、標準出力も開発効率向上のため、対応する。

+ **ログ関数**
まずログを出力するServiceクラスを作成。

**基本ログ項目**
・IPアドレス
・URL

元記事を表示

Laravel11で管理画面を作るのにFilamentをインストールしてみる

管理画面の作成に、以前は`Laravel-Admin`を使ったことがあるのですが、更新が止まっているようなので新たに`Filament`を使ってみようと思います!
まずはFlamentの導入するための備忘録になります

# 環境
– PHP8.2
– Laravel11
– Laravel Sailで環境構築、Dockerで起動中

環境構築に関しては、こちらを参考にしてください!

https://qiita.com/curacao/items/892109e579c377b9b4b8

# Filamentとは?
簡単にまとめると
– 無料のLaravelの管理パネルツール
– ドキュメントが充実していて、コミュニティも活発
– シンプルなので手軽に導入をできる
– Tailwind cssベース
– 頻繁にアップデートが行われている

という優れもの!
公式のDemoもあるので、是非見てみてください!
[Filament公式DEMO](https://demo.filamentphp.com/)
[Filament公式](https://filamentphp.com/)

#

元記事を表示

Laravel11の開発環境をDockerで構築する方法

久々にLaravelを使う(前回使ったのは6系だったな?)ので、備忘録を残します!
今回はDockerを使って環境を構築してみたいと思います!

# 環境
– WSL2
– Laravelは11系を使用
– PHPは8.2系にアップデート済み
– DockerはDocker Desktop for Windowsを利用

PHPが7系で8系にアップデートしたい方はこちらを参考にしてください

https://qiita.com/curacao/items/b4d4e645489294fb1f57

# Laravelプロジェクトの作成
まずはcomposerを使ってLaravelプロジェクトの作成を行います。
開発を行うディレクトリに移動して次のコマンドを実行します。
“`
composer create-project laravel/laravel hoge-app
“`
※WSL環境で開発を行う場合、プロジェクト作成の場所は結構大事になってきます! **推奨は`~/`以下です!**
理由に関してはこちらの記事を参照

https://qiita.com/curacao/ite

元記事を表示

OpenID Connectの実装について

## はじめに
この記事ではOpenID Connect認証の流れと、PHPを用いたアクセストークンおよびIDトークンの取得、公開鍵の検証方法について説明します。
OpenID Connectは、OAuth 2.0をベースにした認証プロトコルであり、
ユーザーが認証情報を直接提供することなく、第三者アプリケーションに安全にアクセス権を委任できる仕組みです。

## OpenID Connect基本的な処理の流れ
※Service Aは開発中のサイト
※Identity Providerは認証を行うサービス(例:Google、Facebookなど)

“`mermaid
sequenceDiagram
participant User
participant Service A
participant Identity Provider

User->>Service A: ログインボタンをクリック
Service A->>Identity Provider: 認証リクエストを送信
Identity Provider->

元記事を表示

【Stripe決済】laravel + JavaScriptでStripeクレジットカード決済をやってみた

## はじめに
決済機能を実装するにあたり、StripeAPIを使用して実装することになった。

今回の記事はstripeAPIに関しての決済備忘録になる。
忘れないようにメモしとく。

## ざっくりな環境
+ Docker
+ Laravel11
+ php8.3
+ MySQL8.0
+ JQuery
+ HTML
+ CSS
+ Bootstrap

## 流れ
まず流れから把握しておく。

+ **フロント側でPaymentMethodIDを作成する**
Stripe(多分他の決済機能も一緒)はクレジットカード情報を送信したり、取得したりするのはセキュリティ的に良くないため、カード情報を直接保存せず、トークン化された情報を使って、セキュリティを確保するらしい。これにより、PCI DSS(Payment Card Industry Data Security Standard)に準拠した安全な方法でカード情報を管理ができるようになるみたいやな。
ここでまあまあハマった。

+ **フロント側で作成したPaymentMethodIDを使用してサーバー側が決済**
上記記

元記事を表示

Perlプログラミング入門:初心者のための15ステップガイド

# はじめに

こんにちは!今日はPerlプログラミング言語について学んでいきましょう。Perlは強力でフレキシブルな言語で、特にテキスト処理が得意です。この記事では、15の章に分けてPerlの基礎を丁寧に解説していきます。各章にはサンプルコードも用意しましたので、ぜひ実際に試してみてくださいね。

## 第1章:Perlの基本

Perlは「実用的抽出・報告言語」(Practical Extraction and Report Language)の略称です。1987年にラリー・ウォールによって開発されました。

“`perl
#!/usr/bin/perl
use strict;
use warnings;

print “こんにちは、Perlの世界へようこそ!\n”;
“`

## 第2章:変数とデータ型

Perlには3つの主要な変数型があります:スカラー($)、配列(@)、ハッシュ(%)。

“`perl
my $name = “太郎”;
my @fruits = (“りんご”, “バナナ”, “オレンジ”);
my %ages = (“太郎” => 25, “花子” =

元記事を表示

Laravel/PHPの日付で起こり得るバグ4択!何個解けますか?

## あるある!日付計算がうまく行かないバグ

さっそくですが、このコードの中のバグが分かりますか?
“`
public function searchBookingsInWeek(CarbonInterface $start)
{
return BookingModel::query()
->whereBetween(‘date’, [$start->startOfWeek(), $start->endOfWeek()]);
}
“`
### 答え

**※1問目だけはネタバレ対策させていただきます。**
次からはスクロールの調整でご協力お願いします。バグ解決を検索している方になるべく不便なく届くため次から答えを隠しません。

クリックで正解を表示

正解は、Carbonのオブジェクトはミュータブルなせいで探してる期間が実質$start->endOfWeek()から$start->endOfWeek()になっちゃいます。

修正としては簡単

元記事を表示

CSVのパースで空文字とnullを区別する

## 背景
業務でCSV取込機能を作っていて、なめてかかっていたら詰まったので備忘録として残します

## 課題
以下のようなCSVを取り込む必要があり、
“`csvs
“dummy”,””,,dummy
“`
結果として、
“`json
[
“dummy”,
“”,
null,
“dummy”,
]
“`
を得たいとのこと
え…CSVはそもそも文字列しか扱えないものだと思ってた…`null`も考慮せなあかんの…

## PHPで頑張る
PHPには`fgetcsv`と`str_getcsv`があるけど、

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

https://www.php.net/manual/ja/function.str-getcsv.php

どっちも以下のような結果になる
“`php
str_getcsv(‘”dummy”,””,,dummy’);
/*
[
“dummy”,
“”,
“”,
“dummy”,
]
*/
“`
公式のオプション見て色々試したものの、全然上手くいかな

元記事を表示

Laravel10とJavaScriptのFetchAPIでいいね機能を実装する【非同期処理】

## 本記事の内容
記事に対するいいね機能の実装方法です。認証ライブラリであるBreezeがインストールされている前提となります。また、fetchAPIを使用した非同期処理の実装をします。

Breezeインストールとその他の準備

“`
composer require laravel/breeze –dev
“`

“`
php artisan breeze:install blade
“`

“`
npm install && npm run build
“`

### 使用する技術
・Laravel10.*
・MySQL
・JavaScript
・CSS
・Font Awesome
・Breeze
・Vite(Laravel Breezeを使用している人はデフォルトで用意されています)

### アプリ画面はこちら

![Videotogif.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3486141/

元記事を表示

クソ雑魚のワイ、Symfonyのコードリーディングしてみた②

前回の記事に続きまして、Symfonyのコードリーディングを続けていきます。
以下は前回の記事です。

https://qiita.com/JonyTask/items/ce96c4afafd409d2b4ef

## Requestクラスについて
本記事で主に進めていく箇所は、以下のパスです。
./src/Symfony/Component/HttpFoundation/Request.php

### クロージャについて
このクラスのコードを読んでいくと、おそらくcreateRequestFromFacoryという関数が重要であることが分かります。

複数の関数において返されるインスタンスはこの静的関数を用いて作成されているようです。
この関数は以下のコードです。

“`
private static function createRequestFromFactory(array $query = [], array $request = [], array $attributes = [], array $cookies = [], array $files = [], arr

元記事を表示

Laravel Bladeテンプレートの基本とディレクティブの活用法

## はじめに
Bladeテンプレートエンジンは、Laravelでのフロントエンド開発において非常に重要な役割を果たします。Bladeは、PHPコードとHTMLを簡潔かつ効率的に混在させるための強力なツールであり、テンプレートの再利用性やコードの可読性を大幅に向上させます。

### Bladeテンプレートの重要性
1. テンプレートの継承によるコードの再利用性
Bladeの最大の強みの一つは、テンプレートの継承機能です。例えば、ウェブサイトの全ページに共通するヘッダーやフッター、ナビゲーションバーなどを一つのレイアウトファイルにまとめ、各ページの個別の内容だけを別ファイルで管理することができます。これにより、一貫性の確保と開発効率の向上に繋がります。

2. Bladeディレクティブによる簡潔なコード記述
Bladeは、@if、@foreach、@extends、@include などの独自ディレクティブを提供しています。これにより、複雑なPHPロジックをテンプレートに埋め込む必要がなく、コードが簡潔で理解しやすくなります。

3. セキュリティの向上
Bladeテンプレートエン

元記事を表示

OpenAI Assistants APIをPHPで実装する

– PHP 8.2.12
– “guzzlehttp/guzzle”: “^7.9”

OpenAI Assistants APIをPHPにて実装してみます。

HTTPクライアントはguzzleを使用します。Laravelでのシステムにて利用することを想定しています。

APIキーは、**OPENAI_API_KEY**という名前で環境変数に入れてあります。**phpdotenv**を使ってます。

“`bash
$ composer require guzzlehttp/guzzle
$ composer require vlucas/phpdotenv
“`

### Assistantの作成とファイルのアップロード

Assistantの作成とファイルのアップロードはダッシュボードから行います。

![スライド1.JPG](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/638071/ef0dd51d-cc88-e487-af8a-a5507048cb9a.jpeg)

![スライド2.JPG](htt

元記事を表示

OpenAI ChatGPT APIをPHPで実装する

– PHP 8.2.12
– “guzzlehttp/guzzle”: “^7.9”

OpenAI APIをPHPにて実装してみます。

HTTPクライアントはguzzleを使用します。Laravelでのシステムにて利用することを想定しています。

APIキーは、**OPENAI_API_KEY**という名前で環境変数に入れてあります。**phpdotenv**を使ってます。

“`bash
$ composer require guzzlehttp/guzzle
$ composer require vlucas/phpdotenv
“`

### 通常パターン

“`php:chatgpt1.php
load(

元記事を表示

JavaとPHPの文法の違い

## はじめに
JavaとPHPは、どちらも広く使われているプログラミング言語ですが、その文法には多くの違いがあります。本記事では、JavaとPHPの基本的な文法の違いを中心に解説します。これから両言語を学ぶ方や、どちらか一方の言語に慣れている方に役立つ内容となっています。

## 1. 変数の宣言と型指定

### Java
Javaでは、変数を宣言する際に必ずデータ型を指定します。これは、Javaが静的型付け言語であるためです。

“`java
int num = 10;
String text = “Hello, World!”;
“`

### PHP
一方、PHPでは変数にデータ型を明示的に指定する必要はありません。PHPは動的型付け言語であり、変数の型は実行時に決定されます。

“`php
$num = 10;
$text = “Hello, World!”;
“`

## 2. クラスとオブジェクトの定義

### Java
Javaは純粋なオブジェクト指向言語であり、すべてのコードはクラスの中に配置されます。以下は、クラスとオブジェクトの基本的な定義です。

`

元記事を表示

What is a PHP Developer?

In internet improvement, a PHP developer plays an essential position. PHP, a popular server-facet scripting language, is the spine of many dynamic websites and web programs. If you have ever wondered what a PHP developer does, what talents are required, and the way to become one, this text is for you.

What is PHP?
PHP (PHP) is an open-source server-aspect scripting language designed commonly for net improvement. It is embedded inside HTML and is used to manage dynamic content, databases, consul

元記事を表示

AstroでPHPを出力する

AstroでWordPressテーマを作成する際に使用した小物類の備忘録。

## PHPタグ出力コンポーネント

slotの中身をエスケープせずに `` の間に展開するだけの単純なもの。

“`tsx:PHP.astro

const php = await Astro.slots.render(‘default’);

`} />
“`

– 参照: [set:html (Astro Docs)](https://docs.astro.build/ja/reference/directives-reference/#sethtml)
– `replace(/\s+/gm, ‘ ‘)` などに通して簡易的にminifyするのもアリ

### 使用方法

PHPタグの代わりに使用する。

“`tsx:index.astro

import PHP from ‘path/to/PHP.astro’;

if($foo):

元記事を表示

Laravel11を使うためにWLS2のPHPのバージョンを8.2に上げる方法

ローカル環境でLaravelを構築しようとしたときに、PHPのバージョンが低く、Laravel8系が入ってしまった。
使いたいのはLaravel11系なのでそれに合わせてPHP8.2を入れる備忘録になります。

※備忘録なので細かいかもしれません
※間違いがあったらコメント頂けると助かります

## 環境と目的
– WSL2(ubuntu)
– PHP7系からPHP8系に上げる

## 経緯: composer create-projectをしてみたら・・・
ローカル環境で
“`
composer create-project laravel/laravel hoge-app
“`
としてLaravelを構築しようとしたときに、
> Cannot use laravel/laravel’s latest version v11.1.4 as it requires php ^8.2 which is not satisfied by your platform.

というメッセージが表示され、
“`
Installing laravel/laravel (v8.6.12)

元記事を表示

生年月日から年齢を計算する方法を各プログラミング言語で書いてみた

# はじめに

プログラミングでよくあるタスクの一つに、生年月日から年齢を計算することがあります。今回は、各プログラミング言語でこのタスクを1行で実装してみました。どの言語でも、標準ライブラリを活用すれば簡単に計算できます。

## Python
“`python
age = (datetime.datetime.now() – datetime.datetime(1984, 8, 21)).days // 365
“`
Pythonでは、`datetime`モジュールを使い、現在の日付と生年月日との差を日数で計算し、年数に換算しています。

## JavaScript
“`javascript
const age = Math.floor((new Date() – new Date(‘1984-08-21’)) / (365.25 * 24 * 60 * 60 * 1000));
“`
JavaScriptでは、`Date`オブジェクトを利用して、生年月日と現在の日付の差をミリ秒で計算し、年数に換算しています。

===
ミリ秒意識しない記載方法は以下(推奨)
“`ja

元記事を表示

#35 PHP CSVを読み込み、文字化けさせずに配列で出力する

## はじめに
今回はPHPでCSVを読み込み、配列として一行ずつ出力する方法について紹介します。
データのやり取りによく使われるCSVについてや、使用する関数について簡単に解説していますので、最後までご覧いただけましたら幸いです。

## CSVを用意する
### CSVとは
Comma Separated Valueの略で、カンマでフィールドを区切ったテキスト形式のファイルです。
ソフトウェア同士での互換性が高く、手元でのデータの修正ができたりのとデータの管理しやすくなります。

#### sample.csv
“`plaintext
商品名,値段
チョコレート,”100″
クッキー,”200″
ケーキ,”3,000″
“`
先頭行が表の見出し、2行目以降がデータとなります。

#### ダブルクオーテーションの意味
ダブルクオーテーション(“)で囲まれた文字列は、区切り文字があっても区切らず、一つの値とみなします。
例えば『10,000』という値があるときそれぞれ以下のようになります。
“`
『10,000』 → 『10』『000』
『”10,000″』 → 『10,000

元記事を表示

PHPで特定の日付からNヶ月前の月の初日を取得する方法

## はじめに
PHPで日付を操作する際、一見シンプルなタスクでも、特定の要件に合わせると予期しない問題が発生することがあります。この記事では、**特定の日付からNヶ月前の月の初日**を正確に取得する方法について説明します。

## 問題の背景
例えば、今日が8月20日の場合、2月1日を取得することが目標です。
最初は strtotime 関数を使用して、特定の日付から5ヶ月前の月の初日を取得しようとしました。以下は最初に書いたコードです:

“`
$today = date(‘Y-m-d’);
$end_date = date(‘Y-m-d’, strtotime(‘last day of last month’, strtotime($today)));
$start_date = date(‘Y-m-d’, strtotime(‘-5 months’, strtotime($end_date)));
$start_date = date(‘Y-m-01’, strtotime($start_date));
“`
しかし、このコードは特定のケースで問題を引き起こしました。例え

元記事を表示

OTHERカテゴリの最新記事