- 1. php7* -> php8* に上げた時の、urlencode 対策
- 2. PHPアプリケーションで、標準出力の文字の色やフォーマットをカスタマイズする
- 3. 2024年のモダンPHP開発
- 4. 独習PHP学習メモ(Chapter3-比較演算子・論理演算子)
- 5. 【個人開発】「住所なう!」というブラウザで今自分がいる場所の住所を出すだけのシンプルなアプリを作成しました!
- 6. 独習PHP学習メモ(Chapter3-代数演算子・代入演算子)
- 7. Laravelで見る用語まとめ
- 8. ServBayの紹介と使用方法
- 9. LaravelでのEnum型の使い方まとめ
- 10. PHPフレームワークFlowのソースにPHPunitを試す
- 11. 【備忘録】Laravel10でのPHPUnitの使い方
- 12. 【Docker環境構築】Laravel10 + Nginx + PostgreSQL + PgAdmin
- 13. ソケット通信サーバーアプリのフレームワークをLaravelと連携してみました
- 14. ソケット通信サーバーアプリのフレームワークを作ってみました
- 15. Websocketサーバーの開発環境を作ってみました
- 16. Websocketの切断フレームを検証してみました
- 17. マインクラフトと連携できるWebsocketサーバーを作ってみました
- 18. ドメイン駆動設計(DDD)の実践:ライブ配信アプリの例
- 19. いろいろな命名規則まとめ
- 20. コードゴルフ大会のためのコードチェックが500エラーになって困った
php7* -> php8* に上げた時の、urlencode 対策
## ■背景
・phpを7.* から 8.* にアップデートしたら、urlencode()関数がエラーになったので、自作関数を作成し、一括置換して対応。## ■エラーメッセージ
#### ・Deprecated: urldecode(): Passing null to parameter #1 ($string) of type string is deprecated in C:\************* .php on line 9999![スクリーンショット (1169).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/478380/9caa669a-0fdd-5e2a-1d2d-971a32124236.png)
## ■ 対応関数
“`function.php// === PHP 8 対応 urlencode()
function UrlEncode_Val_Check($data)
{
if ($data != “”) {
$data_encode
PHPアプリケーションで、標準出力の文字の色やフォーマットをカスタマイズする
# 前提
Symfonyがインストールされていること。(LaravelやCakePHPなどにはインストールされているはずです。)
# 概要
SymfonyのConsoleOutputクラスを使って、簡単に標準出力のフォーマットを指定できたのでその方法と具体例を軽く紹介します。
# 具体例
“`php
$output = new \Symfony\Component\Console\Output\ConsoleOutput();$output->writeln(‘
これは情報メッセージです。 ‘);
$output->writeln(‘これはコメントメッセージです。 ‘);
$output->writeln(‘これは質問メッセージです。 ‘);
$output->writeln(‘これはエラーメッセージです。 ‘);
$output->writeln(‘これはカスタムカラーのメッセージです。>‘);
$output->writ
2024年のモダンPHP開発
2024年においても、PHPはモダンなウェブ開発における有力な選択肢であり続けています。TIOBEインデックスでの順位は低下したものの、PHPは依然として最も広く使用されているウェブサイトプログラミング言語の一つです。その実用性、効率性、そしてパフォーマンスの向上により、PHPは堅実な選択肢となっています。例えば、最新のPHPバージョン(PHP 8.1以降)は、PythonやNode.jsと競合する速度向上を示しており、シナリオによってはそれらよりも高速です。PHPの開発スピードもPythonに匹敵し、豊富な組み込み関数とライブラリにより迅速な開発が可能です。さらに、大規模なアプリケーションの展開も比較的容易であり、数百万のリクエストを処理するアプリケーションでも、適切なエンドポイントキャッシングを行うことで効率的に負荷分散が実現できます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782463/88ad9c51-4ba2-bafa-f57f-fd2ca78ea131.png)
独習PHP学習メモ(Chapter3-比較演算子・論理演算子)
[PHP8技術者認定初級試験取得](https://www.phpexam.jp/summary/novice8)を目指しており、無事合格できました!
資格試験用に学習した、公式の認定教材である[独習PHP第4版](https://www.amazon.co.jp/dp/4798168491/)の内容を知識定着のためアウトプットした記事です。
:::note info
過去の投稿はこちら
:::https://qiita.com/mumucochimu/items/1607809dc28dd026df6d
https://qiita.com/mumucochimu/items/316dd9c83bda14fdfaf8
https://qiita.com/mumucochimu/items/a5ddce721847e863d9d3
https://qiita.com/mumucochimu/items/ec0c589db180ee185656
## 比較演算子
左辺と右辺の値を比較し、true / false を返します。
参考:https://www.php.net
【個人開発】「住所なう!」というブラウザで今自分がいる場所の住所を出すだけのシンプルなアプリを作成しました!
**これは下記記事の本人による転載です。**
https://ogatomo.net/blog/2024/06/02/jyusyonow/
こんにちは。中学1年の小川です。
今日は新しいアプリを作ったので紹介します!
## 「住所なう!」とは?
その名も住所なう!です。
平成中期のネーミングセンスですね(彼は2011年生まれです)
このアプリは今いる場所の郵便番号と住所、ビルやマンション・アパートなどの建物の場合は建物名を表示するアプリです。
下のリンクから実際に使ってみることができます。
[https://ogatomo.net/jyusyonow/](https://ogatomo.net/jyusyonow/?utm_source=qiita&utm_medium=button&utm_campaign=introduction)
## 操作方法
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2518724/226f75c5-b49d-f4e9-edc2-43
独習PHP学習メモ(Chapter3-代数演算子・代入演算子)
[PHP8技術者認定初級試験取得](https://www.phpexam.jp/summary/novice8)を目指しており、無事合格できました!
資格試験用に学習した、公式の認定教材である[独習PHP第4版](https://www.amazon.co.jp/dp/4798168491/)の内容を知識定着のためアウトプットした記事です。
:::note info
過去の投稿はこちら
:::https://qiita.com/mumucochimu/items/1607809dc28dd026df6d
https://qiita.com/mumucochimu/items/316dd9c83bda14fdfaf8
https://qiita.com/mumucochimu/items/a5ddce721847e863d9d3
## 代数演算子(算術演算子)
主な代数演算子は以下です。
| 演算子 | 概要 | 例 |
|:—–:|:—–:|:—–:|
| + | 和 | 1+2 ⇨ 3 |
| – |
Laravelで見る用語まとめ
## MVCとは
Webアプリを実装するための効率的な方法の一つ
Webアプリの構造を整理するためのデザインパターン
コードの可読性やメンテナンス性を向上させる。1. Model
* データベースとのやり取りを担当。
* データの保存、取得、更新、削除など。
* Eloquent ORM(Object-Relational Mapping)を使って、データベースのテーブルとオブジェクトを簡単に対応付けることができる。
1. View
* ユーザーに表示される部分を担当。
* HTMLやCSSを用いてユーザーインターフェースを作成できる。
* Bladeテンプレートエンジンを使って、動的なコンテンツを簡単に生成できる。
1. Controller
* ユーザーからのリクエストを処理し、適切なレスポンスを返す部分を担当。
* ルーティングを通じて特定のアクションにリクエストを割り当て、モデルとビューを連携させる。## マイグレーションとは
SQLを直接使わなくても、データベースを管理できるLaravelの仕組み
データ
ServBayの紹介と使用方法
### ServBayについて
[ServBay](https://wwww.servbay.com)は、ユーザーフレンドリーでローカライズされたオールインワンのWeb開発環境です。開発者が数分でローカライズされた[開発環境](https://wwww.servbay.com)を展開できるようにし、Web開発者(PHP、Node.jsなど)、テストエンジニア、小規模チームが直面するインストールとメンテナンスの課題を解決します。ServBayはWebサーバー、データベース、メールサーバー、その他のWeb開発ツールを統合し、開発者のワークフローを合理化します。![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3782472/9029db7f-3f39-22d9-478e-452414d1584b.png)
ServBayの主要な機能には、複数のPHPおよびNode.jsバージョンの統合サポート、カスタマイズ可能なドメイン、無料のSSLが含まれます。コマンドラインインターフェース、統一された
LaravelでのEnum型の使い方まとめ
# 記事を書いた動機
以下の経緯でEnumを社内に布教したかったから。
– Laravelを使う際、社内で定数をどこに書くか明確なルールが無かったので定義したかった
– configに書くか、Modelに書くか、定数用のクラスを作成してそこに書くか3つ案があったが、以下の理由によりEnumで管理するようにしたいと思った
– `config()`は定義ジャンプができないので定数の値を見に行くのが面倒
– 定数は条件分岐とかでいろんな場所から呼ばれるので、定数使うためだけにModelを呼ぶのはあまりやりたくない
– 例えばBladeから`@foreach(App\Models\Order::STATUS_LIST as $key =>$val)` みたいに呼ぶのはいまいちかなと
– 定数用のクラスで管理する場合、`app/Const/GlobalConst`みたいに普通のクラスで書いてもいいが、PHP8.1以上ならEnum型が使えるので今後は、Enumで管理する方が色々便利かなーと思った# この記事で書くこと
– Laravelで定数をEn
PHPフレームワークFlowのソースにPHPunitを試す
# 初めに
Flowでソースを書いてきましたが、UnitTestはまだ書いたことがありませんでした。
今回は、PHPフレームワークFlowでUnitTestを書く方法をまとめます。# PHPunit
PHPUnitとは、PHPのUnitテストツールです。
豊富なAssertメソッドを有しているのが特徴です。https://phpunit.de/index.html
# PHPUnit使ってみる
ということで、さっそく使ってみましょう。
今回UnitTestを作成するのはこちらのUsersクラスです。
getName()のUnitTestを作成したいと思います。“`Users.php
【備忘録】Laravel10でのPHPUnitの使い方
エンジニアとして働きながら個人でLaravel10を触っています。記事を読みながら実装を進めていくとPHPUnitに関する記事がまとまっていない状態でした。そのため備忘録としてQiitaにまとめてみました。
## 環境
Windows10
ubuntu(wsl) 22.04.4 LTS
Laravel 10.48.12
PHP 8.3.7
DB sqlite3## PHPUnit とは
PHPUnitとはPHP言語の単体テストを行うためのフレームワークです。
変更した箇所で要件を満たしていて、既存の機能に影響がないかを自動で確認することができます。## PHPUnitのメリット・デメリット
### メリット
– モジュールが結合される前にテストができるため、問題の原因特定が容易
– コードの作成と並行してテストコードを書くため、コード理解が深まる
– PHPUnitを使うことで自動化できる
→コマンドのみで動作確認が可能### デメリット
– 開発者の開発負担が高くなる## UnitとFeature
testsディレクトリ配下にはUnitとFeatureがあり
【Docker環境構築】Laravel10 + Nginx + PostgreSQL + PgAdmin
# はじめに
Laravel+Nginx+MySQL+phpmyAdminの環境構築例は多いものの、Laravel+Nginx+PostgreSQL+PgAdminの環境構築例はWeb上に少なかったので、備忘録として残すことにしました。# 開発環境
– Docker Desktop
– PHP 8.3.3
– node v20.11.1
– Laravel Framework 10
– Composer 2.7.1
– PostgreSQL 14
– PgAdmin4
– WSL2# ディレクトリ構成
全体のディレクトリ構成は以下です。
“`
/(ルートディレクトリ)
├── .docker
| ├── db
| |── nginx
| | |── default.conf
| | └── Dockerfile
| |── pgadmin4_data
| └── php
| |──Dockerfile
| └──php.ini
│── src
│ └──(Laravelのプロジェクトデ
ソケット通信サーバーアプリのフレームワークをLaravelと連携してみました
# はじめに
ここでは以下の記事でご紹介しているようなsoket-managerフレームワーク上のプロジェクトをLaravelへ連携する方法をご紹介します。
[>>`マインクラフトと連携できるWebsocketサーバー`](https://qiita.com/glasses_seven/items/7a490dc8694348505a53 “マインクラフトと連携できるWebsocketサーバー”)
[>>`Websocketサーバーの開発環境`](https://qiita.com/glasses_seven/items/fa9226356815e69e4076 “Websocketサーバーの開発環境”)
[>>`ソケット通信サーバーアプリのフレームワーク`](https://qiita.com/glasses_seven/items/d712808b985aa5253d05 “ソケット通信サーバーアプリのフレームワーク”)
以降では新規プロジェクトを連携する場合と既成プロジェクトを連携する場合に分けて話を進めます。
それぞれの作業の内訳は以下の通りです。### 【新規
ソケット通信サーバーアプリのフレームワークを作ってみました
# はじめに
新規プロジェクトで開発を行う場合は、ある程度のソケット通信の知識が必要になりますのであらかじめご了承ください。
初心者向けにはWebscoketサーバーの開発環境をご用意していますので[>>`こちら`](https://qiita.com/glasses_seven/items/fa9226356815e69e4076 “Websocketサーバーの開発環境”)の記事をご覧ください。
また[▶`アーキテクチャ`](https://socket-manager.github.io/document/architecture.html “アーキテクチャ”)のページをご覧になった上で進めていただいた方が用語の理解も含めてより効率的に進められます。
ここではデモ版のソースを例に挙げながら`php worker`コマンドを使って新規のクラスを作っていきます。
デモ版のソースを参考にしつつ、ある程度処理の流れを掴んでから進めていくのがスムーズかと思います。デモ版の記事については[>>`こちら`](https://qiita.com/glasses_seven/items/
Websocketサーバーの開発環境を作ってみました
# はじめに
この環境はデモ版でご紹介したWebsocketサーバーからコマンド部を含めWebsocketに不要な部分を取り除いて再構築したものです。
プロトコルの主要な部分は実装済みなので、コマンド部を自分で作成しながらブラウザを使って動作確認できますので、新規でプロジェクトを起こす場合に比べてソケット通信初心者向けの環境と言えます。デモ版の環境については[>>`こちら`](https://qiita.com/glasses_seven/items/7a490dc8694348505a53 “マインクラフトと連携できるWebsocketサーバー”)のページでご紹介しています。
以降ではインストール方法と実装例を見ながら進めていきます。
# 環境
- プラットフォーム
- Windows10
- 統合環境
- Xampp v3.3.0
- ブラウザ
- Chrome v123.0.6312.123
- 言語
Websocketの切断フレームを検証してみました
# はじめに
Websocketのプロトコルには切断フレームというものがあります。
RFC文書には以下のように書かれています。> 状態コード, および オプションの close 事由 をパラメタに WebSocket closing ハンドシェイクを開始するときは、 端点は § 5.5.1 の記述に従って,状態コードが コード にされ, close 事由が 事由 にされた, Close 制御フレームを送信しなければならない。 端点が Close 制御フレームを送信し, 受信したなら、 その端点は § 7.1.1 の定義に従って,WebSocket 接続を close するべきである。
どうやら切断フレームを使った切断処理を`closingハンドシェイク`と呼んでいるようです。
この`closingハンドシェイク`の正体が何なのかをRFC文書を確認しながら検証してみました。今回は[>>`こちら`](https://qiita.com/glasses_seven/items/7a490dc8694348505a53 “マインクラフトと連携できるWebsocketサーバー”)の記
マインクラフトと連携できるWebsocketサーバーを作ってみました
# はじめに
![demo.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3619905/531210ea-4c75-53ae-8dc6-20f4f2e30666.gif)
これはWebsocketサーバーを使ってマインクラフトとブラウザ間でチャットを行っている様子です。
通常のコメント発信とプライベート送信(マインクラフト側はウィスパー機能で実装)に対応しています。一部例外はありますが、マインクラフトやほとんどのWebブラウザにはWebsocket通信の機能が実装されていますので、Websocketサーバーを通じてこのデモのようにマインクラフト⇔Webブラウザ間で通信を行う事が可能です。
(ブラウザのWebsocket機能はそのまま使えますので別途モジュールを適用する必要はありません)以降ではデモサーバーのインストールとブラウザやマインクラフトからのアクセス方法をご紹介しています。
# 環境
- プラットフォーム
- Windows10
ドメイン駆動設計(DDD)の実践:ライブ配信アプリの例
#### はじめに
[前回の記事](https://qiita.com/ma2mori/items/3b080bf55732c505eef6)では、ドメイン駆動設計(DDD)の基本概念を学びました。今回は「ライブ配信アプリ」を題材に、具体的な実践例を紹介します。### ライブ配信アプリの概要
ライブ配信アプリは、ユーザーがリアルタイムでコンテンツを配信し、他のユーザーがそれを視聴するプラットフォームです。以下のような特徴があります。
– 視聴ユーザーは配信ユーザーにもなり得る
– 視聴者は無料および有料のリアクションで配信者にフィードバック可能その為モデリングにおける考慮要素は主に以下になります。
– ユーザー管理
– 配信管理
– リアクション管理※実際はドメインエキスパートと協力し詳細を詰めていくと思います
### ドメインモデリング
まずは、ライブ配信アプリの主要なエンティティ、値オブジェクト、集約、サービス、リポジトリを定義します。#### エンティティ
“`mermaid
classDiagram
class User {
– st
いろいろな命名規則まとめ
# 初めに
命名規則って結構言語ごとによって決まりが違うので、久しぶりに使う言語とか初めて使う言語とかとにかく普段使ってない言語だと命名規則がわからなくなるんですよね。なので、まとめちゃいました。
# 各プログラミング言語の一般的な命名規則
プログラミング言語ごとに異なる命名規則を守ることで、コードの可読性と一貫性を高めることができます。
## Python
– **変数名**:`my_variable`
– **説明**:Pythonではスネークケースが推奨され、単語はアンダースコアで区切る
– **関数名**:`def my_function():`
– **説明**:関数名もスネークケースで記述され、可読性が高まる
– **クラス名**:`class MyClass:`
– **説明**:クラス名はパスカルケースで、各単語の先頭を大文字にする
– **定数名**:`MY_CONSTANT = 10`
– **説明**:定数はすべて大文字で、アンダースコアで単語を区切る
– **ファイル名**:`my_script.py`
– **説明**:ファイル名
コードゴルフ大会のためのコードチェックが500エラーになって困った
# はじめに
こんにちは、エンジニアのkeitaMaxです。
前回、コードゴルフ大会のために、コードの正当性を判定する処理を作成しました。しかし、コードがエラーになると500エラーが発生し、任意のレスポンスを返すことができず困ってしまいました。これを備忘録として記事にまとめます。
前回の記事
https://qiita.com/keitaMax/items/2e10d9a78897ff6d02d4
# 前回のコード
“`php
function codeExecutionOutput($code){
ob_start();
eval($code);
$output = ob_get_clean();
return $output;
}
“`こんな感じで同じファイル内に関数として置いて、関数を呼び出すというような実装をしていました。
# だめだったこと
単純にtry catchで囲えばいいかなと思って、関数を呼び出しているところを以下のように囲んでみました。
“`php
try {
self::codeExecution