- 1. CSVのパースで空文字とnullを区別する
- 2. Laravel10とJavaScriptのFetchAPIでいいね機能を実装する 【非同期処理】
- 3. クソ雑魚のワイ、Symfonyのコードリーディングしてみた②
- 4. Laravel Bladeテンプレートの基本とディレクティブの活用法
- 5. OpenAI Assistants APIをPHPで実装する
- 6. OpenAI ChatGPT APIをPHPで実装する
- 7. JavaとPHPの文法の違い
- 8. What is a PHP Developer?
- 9. AstroでPHPを出力する
- 10. 自己紹介
- 11. Laravel11を使うためにWLS2のPHPのバージョンを8.2に上げる方法
- 12. 生年月日から年齢を計算する方法を各プログラミング言語で書いてみた
- 13. #35 PHP CSVを読み込み、文字化けさせずに配列で出力する
- 14. PHPで特定の日付からNヶ月前の月の初日を取得する方法
- 15. ??null;って何よ。三項演算子も一緒に 備忘録
- 16. Contact Form 7 で、メールテンプレート上でプルダウンのラベル値を取得する方法
- 17. PHPにおける return;
- 18. 【Laravel】依存性注入(DI)とは
- 19. macでphpのバージョンを切り替える
- 20. 【PHP】APIをNew Relicでエンドポイントごとにモニタリング with Docker
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):
自己紹介
# 名前
– はせそん
– 由来は後述
## 経歴
– 最終学歴は専門学校(非IT系)
– 販売業を8年
– 色々あってIT業界へ
– 今に至る
## 何者なのか
– アラサー
– 性別非公開(ご想像におまかせします)
## 趣味
– 競プロ
– AtcoderとPaizaの二拠点
– Pythonで挑んでます
– C++はわけわかんなかった…
– ちなみに学生時代1番苦手な科目は数学でした
– 西武ライオンズの応援
– 推しは長谷川信哉選手(愛称ハセシン)
– 偶然見てた試合で超ファインプレー
「推すぞ!!」と決意し今に至る
– 近くで見た時に「こんなかっこよくて野球上手いとかすげぇな」としみじみ思った
– 走攻守三拍子揃ってる+華がある
– 名前のはせはこの方から来てます
– 現地が遠いので主にDAZNで見てます
– トレーニング
– 前職で腰を痛めがちになったので軽い筋トレをするのが日課です
– 最近筋膜ローラーを買ったよ
– 部屋の置物と化す前に使おう
## 使
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));
“`
しかし、このコードは特定のケースで問題を引き起こしました。例え
??null;って何よ。三項演算子も一緒に 備忘録
chatgptさんにいつもの如く質問してたら、回答の一部にこんなのが…
“`
$edit_id = $_POST[“edit_id”] ?? null;
“`
何言ってんだかよくわからなかったので再度chatgptさんに聞き直したら、
「PHP 7.0 で導入された null 合体演算子(null coalescing operator)」
と言われました。簡単に言っちゃば、三項演算子をもっと簡略化したやつ(?)みたい。## 三項演算子
構文: 条件式 ? trueで出力される値 : falseで出力される値;例:
“`
echo isset($edit_comment) ? $edit_comment : “”;
“`## NULL合体演算子
構文: 値1 ?? 値2;
動作: 左側の値が null または未定義であれば、右側の値を返します。左側の値が null でなければ、その値を返す。
例:
“`
$edit_id = $_POST[“edit_id”] ?? null;
“`
That’s all.
Contact Form 7 で、メールテンプレート上でプルダウンのラベル値を取得する方法
# 結論:`[_raw_{field_name}]` と書く
お問い合わせ種別をContact Form 7で記述すると、以下のような記述になると思います。
“`
[select* type id:type class:form-select include_blank “イベントに関する問い合わせ|event” “IRに関する問い合わせ|ir” “求人に関する問い合わせ|recruit” “ホームページに関する問い合わせ|web” “その他|etc”]
“`こうすれば、プルダウンの画面上に表示される選択肢では日本語名が表示され、POSTされる値はvalueに入っている英語名を送ることが出来ます。
でも、メールテンプレートでメールタグを使って出力すると、
valueに入っている値のほうが取得されます“`
お問い合わせ種別: [type]
↓
お問い合わせ種別: ir
“`こういう場合、`[_raw_{field_name}]`のように書けば、ラベル値のほうを取得できます
“`
お問い合わせ種別: [_raw_type]
↓
お問い合わせ種別: IRに関する
PHPにおける return;
## return; の役割
* **関数の終了:** 関数の中で`return;`が実行されると、それ以降のコードは実行されずに、関数が終了します。
* **void関数:** 返り値を必要としない関数(void関数)では、`return;`を省略することもできますが、明示的に`return;`を書くことで、関数の終了を明確にすることができます。
* **返り値 NULL:** `return;`は NULL を返します。## return; と return null; の使い分けと一般的な使用について
### return; の場合
* **返り値はNULL:**
– `return;` と単に記述した場合、PHPは自動的にNULLを返します。
– NULLは、変数が何も値を持っていないことを示す特別な値です。
* **用途:**
– 関数の処理が正常に終了した場合に、特に値を返さずに処理を中断したい場合。
– エラーが発生した場合に、以降の処理を中断し、エラー処理に移りたい場合。### return null; の場合
* **明示的にNULLを返
【Laravel】依存性注入(DI)とは
## 依存性注入とは
依存性注入(Dependency Injection、DI)とは、ソフトウェア設計パターンの一つで、クラスがその依存オブジェクトを自分で生成するのではなく、外部から提供される方法。## 実装例
“`php
public function __construct(
//コンストラクタの引数
//このクラスが動作するために必要な依存オブジェクト。
//Mainというサービスと、Factoryという工場(ファクトリー)クラスを依存として受け取る。
Main $main_service,
Factory $apply_validate_factory
) {
//依存オブジェクトの代入
//コンストラクタで受け取った依存オブジェクトをクラスのプロパティに代入。
//これにより、クラス内の他メソッドでこれらを使用できる。
$this->main_service = $main_service;
$this->apply_validate_factory = $apply_validate_factory;
}
“`## DIのメリット
macでphpのバージョンを切り替える
1, Homebrewを最新の状態にアップデートし、アップグレード
“`
brew update
brew upgrade
“`
2, インストール可能なバージョンを確認
“`
brew search php
“`
3, 必要なPHPをインストール
“`
brew install php@8.2
“`
4, 以下で切り替えと反映
“`
echo ‘export PATH=”/usr/local/opt/php@8.2/bin:$PATH”‘ >> ~/.bash_profile
echo ‘export PATH=”/usr/local/opt/php@8.2/sbin:$PATH”‘ >> ~/.bash_profile
source ~/.bash_profile
“`
【PHP】APIをNew Relicでエンドポイントごとにモニタリング with Docker
# やりたいこと
PHPで書いたAPIのエンドポイント毎のパフォーマンスをNewRelicでざっくり見ていくまでを書きます。
APMを細かく分析していくところまでは書きません。
ホスト端末のCPU状況などは見ません。
無料枠を利用して、Dockerで完結させます。# 環境
Mac M2# NewRelicのアカウント作成
こちらから会員登録しておきます。
クレカ情報いらないので色々安心。https://newrelic.com/jp/sign-up-japan
ログインしたらコンソールに飛ばされるので、LICENSE_KEYを控えておきます。
以下のようにデフォルトでもアカウントが作成されていると思うので、こちらのTypeがINGEST – LICENSEの三点リーダーをクリックしてCopy Keyで取得できます。
![スクリーンショット 2024-08-18 21.17.44.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/855584/c509142a-9d0c-9d49-b116-15