- 1. PHPを学んでCtoC音楽イベント同行者マッチングサービスを開発してみた
- 2. 【PHP】指定した値が配列のカンマ区切りに含まれてるか検索
- 3. 【PHP】Cookie管理「設定・取得・削除」
- 4. CodeIgniterについてアウトプットしてみた~概要編~
- 5. PDO (PHP Data Objects)
- 6. AtrisanとPHP UnitでAPIの単体テストを自動化してみた
- 7. LaravelでFirebase認証を使う
- 8. Laravelを日本語対応させる方法
- 9. PHP の clone について、後輩に口頭で説明したのに理解して貰えなかったので記事で説明する
- 10. エラーが怖い?それならSyntax Errorを「起こす」ことから始めよう
- 11. QRコード
- 12. バリデーションについて
- 13. webアプリ開発で意識したこと
- 14. PHP 8.3の新規機能と改善
- 15. webアプリ開発 テストケース作成
- 16. PHPにおけるシグネチャ
- 17. PHPにおけるセッションの仕組み
- 18. PHPにおけるビルトイン関数とユーザー定義関数
- 19. FuelPHP の migrate Task
- 20. 【覚え書き】AlmaLinux9.3でのLAMP環境構築手順(Apache+MariaDB+PHP)
PHPを学んでCtoC音楽イベント同行者マッチングサービスを開発してみた
## 自己紹介
はじめまして!
2023年12月に株式会社ドリーム・シアターに入社した26歳のWebエンジニアです。
もともとIT業界には携わっていましたが、実装経験が乏しく経験を積むため弊社に入社いたしました。## サービス概要
### CtoC音楽イベント同行者マッチングサービス
https://github.com/takm333/music-matching-appMELDというサービスの見た目と挙動を参考にフロントエンド、バックエンドの実装を行いました。
管理者画面は自分で設計、実装を行っています。
https://meld.co.jp/ライブ等の音楽イベントに一緒に行ける人を探して、マッチングすることができるサービスです。
以下のようなユーザーをターゲットにしています。
* チケットを持っていて、一緒にライブに行ける人を探している
* チケットが余っているので、持っていない人と行きたい
* チケットを持っていないので、余っている人と行きたいユーザーはイベントごとに自分の状態を登録できます。
自分のステータスに対し、適切なユーザーが表示されマッチング
【PHP】指定した値が配列のカンマ区切りに含まれてるか検索
やりたいこと。生息地が【丘陵】のポケモンを検索したい。
ただし生息地はカンマ区切りになっている
# コード
“`PHP
// 2次元の連想配列
$query_data = [
[‘id’=> 1,’name’=>’イシツブテ’,’place’=>’渓谷,洞窟’,’level’ => 10,’technique’=>’岩雪崩’],
[‘id’=> 2,’name’=>’イワーク’,’place’=>’砂漠,鉱山’,’level’ => 20,’technique’=>’岩石砲’],
[‘id’=> 3,’name’=>’ウソッキー’,’place’=>’鉱山,地中’,’level’ => 10,’technique’=>’メテオドライブ’],
[‘id’=> 4,’name’=>’ハガネール’,’place’=>’丘陵,窪地’,’level’ => 20,’technique’=>’アイアンローラー’],
[‘id’=> 5,’name’=>’サイドン’,’place’=>’渓谷,丘陵’,’level’ => 20,’technique’=
【PHP】Cookie管理「設定・取得・削除」
あえてCookieにデータ保持しなきゃいけないシチュエーションってそんなに多くない気もしますが…。
強いて言うならこれくらいな気がします。
– “HttpOnly“属性でセキュアにしたい
– データごとに保持期限を変えたいそこで今回は、PHPでのCookieの設定・取得・削除についてまとめてみました。
PHP標準関数とSymfonyが用意しているComponentを利用した2パターン紹介します。
## Cookie設定
### PHP標準関数の場合
“`php
setcookie(
‘cookie_name’, // Cookieの名前
‘cookie_value’, // Cookieの値
time() + 3600, // 有効期限(例:1時間後)
‘/’, // パス
null, // ドメイン
false, // セキュア
true, // HttpOnly
)
“`### HttpFoundationを使う場合
“`php
CodeIgniterについてアウトプットしてみた~概要編~
## はじめに
今使っている人は少ないかもしれませんが…
案件でCodeIgniterを使う機会があったので、簡単ではありますが備忘録も込めて、記事にしました!!!### CodeIgniterとは
PHPでWebアプリケーションを作っていく中で、みなさんフレームワークを使うことになると思いますが、その1つになります。
アメリカの会社`EllisLab`が2006年に初版をリリースし、2014年からは`ブリティッシュコロンビア工科大学`が開発を行っています。
2024/04/19現在の最新バージョンは、4.5.1になります。
※githubリポジトリは[こちら](https://github.com/codeigniter4/CodeIgniter4)### シェア
PHPのフレームワークで言うと現在日本では、新しいプロジェクトにおいてはLaravelを使うことがほとんどだと思います。
ただ、[Kinsta](https://kinsta.com/php-market-share/)によるとCodeIgniterを使ったサイトも多いことがわかるので、世界的に見たら
PDO (PHP Data Objects)
## はじめに
PDOについてまとめる
### PDOとは
PHPのデータベース抽象化レイヤー。
データベース抽象化レイヤーはデータベース毎の違いを吸収し、アプリがデータベースに対応して何んらかのアクセスを試みる際に共通の手段を提供する。### データベースへの接続
データベースへの接続を確立する
“`php:connect.php
$dsn = ‘mysql:dbname=testdb; host=127.0.0.1; charset=utf8’;
$usr = ‘testuser’;
$passwd = ‘testpass’;try {
$dbh = new PDO($dsn, $usr, $passwd);
echo ‘接続成功’;
} catch (PDOException $e) {
echo ‘接続失敗: ‘ . $e->getMessage();
} finally {
$dbh = null;
}
“`### PDOクラス
“`php
new PDO(string $dsn [, string $usernam
AtrisanとPHP UnitでAPIの単体テストを自動化してみた
はじめまして。
rexcornuでは主にフロントエンドを担当しているインターンのやーくんです。今回は、rexcornuで自社サービスとして提供しているTechMatchのサーバサイドの単体テストをArtisanとPHP Unitで自動化するにあたって実施したことや、このテスト工程を経験して感じたことをまとめます。
まず、単体テストという言葉ですが、私が担当しているTechMatchにおいてはモジュールやコンポーネントの動作確認と位置付けています。
# 目次
– [はじめに:担当しているTechMatchについて](#はじめに:担当しているTechMatchについて)
– [なぜ単体テストを自動化したのか](#なぜ単体テストを自動化したのか)
– [テストの準備や実施の内容](#テストの準備や実施の内容)
– [意識したこと](#意識したこと効率的な優先順位を付けたテスト作成実行)
– [単体テストの実施結果](#単体テストの実施結果)
– [テスト工程を経験して感じたこと](#テスト工程を経験して感じたこと開発でもテストでも自動化は良い)
– [今後の課題](#今後の課題)
LaravelでFirebase認証を使う
# 記事の内容
LaravelでFirebase認証を実装時にちょっと詰まったので、未来の自分が困らない&誰かのだめになればと記録に残しておきます。## 事前準備
Composerでkreait/firebase-phpとkreait/laravel-firebaseをインストールする。“`
composer require kreait/firebase-php
composer require kreait/laravel-firebase
“`.envにFirebaseのクレデンシャル情報を記載したjsonファイルのパスを記述する。
※jsonファイルはfirebaseからダウンロードしてください。“`
FIREBASE_CREDENTIALS=firebase_credentials.json
“`config配下に設定ファイルを作成。
“`
php artisan vendor:publish –provider=”Kreait\Laravel\Firebase\ServiceProvider” –tag=config
“`confi
Laravelを日本語対応させる方法
Laravel Breezeなどでログイン機能を実装したはいい物の、日本語の設定方法がわからず困っている方に必見です。
【前提条件】
Laravel Breezeのインスチールをお願いします。
方法は2種類あり、それぞれ解説しますが2つ目の方がおススメです。
# 1つ目
①config/app.php を修正して、言語と時間を日本に変更しておく。
“`config/app.php
// ‘UTC’から’Asia/Tokyo’に変更
‘timezone’ => ‘Asia/Tokyo’,// ‘en’から’ja’に変更
‘locale’ => ‘ja’,// ‘en_US’から’ja_JP’に変更
‘faker_locale’ => ‘ja_JP’,
“`
②langディレクトリの作成
“`
# Laravel sailで環境構築をしている人向けコマンド
$ ./vendor/bin/sail php artisan lang:publish# Laravel sail以外で環境構築をしている人向けコマンド
$ php ar
PHP の clone について、後輩に口頭で説明したのに理解して貰えなかったので記事で説明する
別に記事での説明も上手ではないんですけど…説明スキルが欲しいです
# PHP の clone について
PHP の clone はシャローコピー(浅いコピー)です!
シャローコピー(浅いコピー)って何だ!?
## シャローコピー(浅いコピー)とディープコピー(深いコピー)
### シャローコピー
プリミティブプロパティの値(int, string, float, bool, …etc)は新しいオブジェクトに複製し、別アドレスを指します。
オブジェクトプロパティの値は clone 元のオブジェクトと同じアドレスを指します。つまり、clone 先のオブジェクトプロパティの値が書き換えられると、clone 元のオブジェクトプロパティの値も書き換わります。
### ディープコピー
プリミティブプロパティの値もオブジェクトプロパティの値も新しいオブジェクトに複製して、別アドレスを指します。
文字だけだと口頭と同様で意味わからないため、下記サンプルコードです。
### サンプルコード(clone 元のクラス)
“`php
namespace App\ValueObje
エラーが怖い?それならSyntax Errorを「起こす」ことから始めよう
# はじめに
こんにちは! @RyoSakon001 です。 @Fignn [Fignny株式会社](https://fignny.co.jp/)でPython, PHP, TypeScriptのエンジニアとして働いています。
エンジニアとして業務を始めたての頃は、エラーにとにかく悩まされがち。そんなあなたにピッタリの情報をお届けできればと思います。## こんな人に読んでほしい
– 駆け出しエンジニアの方
– 駆け出しWebデザイナーの方
– 育成担当ベテランエンジニアの方## エラーの大半って、実はコレ
人括りに「エラー」と言っても、色々な種類があります。超〜アバウトに、大別してみます。1. **Syntax Error**
1. **Undefined**
1. **その他**その中で、1, 2番がおよそ8割を占めていると思います。そして、実は本当に難しい(可能性がある)のは3番だけで、1, 2番は初心者の方でも簡単に解決できてしまうのです。
## エラーへの恐怖心をなくすには、自分で「わざと」起こしてみること
**「最初は怖いけど、やってみると大したことなかった
QRコード
“`php
use ZipArchive;
use Illuminate\Support\Facades\Storage;public function createAndDownloadZip()
{
// ZipArchiveを作成してzipファイルを開きます
$zip = new ZipArchive;
$zipFileName = ‘archive.zip’;
$zipFilePath = storage_path(‘app/work/’ . $zipFileName);if ($zip->open($zipFilePath, ZipArchive::CREATE | ZipArchive::OVERWRITE) === TRUE) {
// QRコードのデータ
$qrCodeData = ‘https://example.com’;// QRコードをjpgファイルとして作成して直接zipに追加します
$qrCodeFileName = ‘qrcode.jpg’
バリデーションについて
Formを送信した際に内容が空だとエラー画面に移動してしまう際の対策
# バリデーションとは
テストとその後の生産で実行される手順、プロセス、または活動が、すべての段階で望ましいレベルのコンプライアンスを維持していることを証明する文書証拠を確立するプロセス。https://en.wikipedia.org/wiki/Validation_(drug_manufacture)
https://readouble.com/laravel/11.x/ja/validation.html#quick-writing-the-validation-logic
大まかに言えば、内容が正しいかチェックすること
“`php
$validatedData = $request->validate([ルール],[カスタムメッセージ]);
“`# コントローラー内にバリデーション追加
### ルールの追加
第1引数は、各フィールドに対するバリデーションルールの配列。
バリデーションの方法は数種あるが今回は簡単なcontrollerに直接書き込む方法でしてみる。
この方法だとcontroll
webアプリ開発で意識したこと
# 初めに
https://qiita.com/opatu07/items/be0d5e38710ba0854fb4この記事で書いていたWebアプリが完成したので、その開発過程で意識したことを紹介します。
# ソースコードと使い方
https://github.com/opatu07/portfolio# webアプリ開発で意識したこと
## webアプリの品質を担保するために
テストケースを作成しました。
https://qiita.com/opatu07/items/ceba265b439e20839ab9
この記事から読めます
## エラー解決について
https://qiita.com/opatu07/items/117192d3c829903c846e
https://qiita.com/opatu07/items/d0ac1cf830e6145165e5
開発過程で出たエラーをqiitaにまとめるように意識をしています。
## レスポンシブ対応
iPhone6/7/8のレスポンシブ対応動画です。
![responsive_fu
PHP 8.3の新規機能と改善
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2527282/5ae7029c-df9c-56d9-12e6-29a8afbf4f57.png)
# この記事について
PHPは、毎年恒例となっている新しいメジャーまたはマイナーバージョンのリリースを続け、2023年11月23日にリリースされたPHP8.3も例外ではありません。この新バージョンは、多くの新機能と改善を加え、PHPの汎用性と進化する言語としての地位をさらに固めています。
この記事では、PHP8.3に導入された注目すべき新機能を紹介します。
# 新機能
### クラス定数の型付け
クラス定数に型をかけるようになりました。“`php
// valid
class TestClass {
const string MY_TEXT = ‘my text’;
}// valid
interface TestInterface {
const string MY_TEXT = ‘my tex
webアプリ開発 テストケース作成
# 初めに
webアプリ開発でデプロイする前に入力フォームが正しく動作するのかを確認するためにテストケースを作成しました。# テストケース
## 1. 入力ができるかを確認
これは使われそうな入力内容で本当に入力できてデータベースに登録されるのかを確認するために実施しました。実施箇所は
– ユーザー登録
– ログイン
– パスワードリセットメール登録
– パスワードリセット画面
– プロフィール情報の変更
– パスワード更新
– アカウントの削除
– 新規記事登録
– 記事の変更
– コメント## 2. SQLインジェクション対策
入力フォームを使うのでSQLインジェクション対策で各項目に(INSERT INTO users VALUES (‘1’, ‘タカシ’);を入れてデータベースに不正なデータが入れられないかを確かめました。実施箇所
– ユーザー登録
– ログイン
– パスワードリセットメール登録
– パスワードリセット画面
– プロフィール情報の変更
– パスワード更新
– アカウントの削除
– 新規記事登録
– 記事の変更
– コメント入力## 3.XSS
PHPにおけるシグネチャ
PHPにおけるシグネチャは、主に以下の2つの意味があります。
**1. 関数シグネチャ**
関数シグネチャは、**関数の名前、引数の型と数、返り値の型**を定義する情報です。関数シグネチャは、以下の構文で記述されます。
“`php
function 関数名(引数リスト): 返り値の型 {
// 関数本体
}
“`**例:**
“`php
function calculateSum(int $num1, int $num2): int {
return $num1 + $num2;
}$sum = calculateSum(10, 20);
echo $sum; // 30
“`関数シグネチャは、以下の役割を果たします。
* **関数の識別:** 関数名を指定することで、関数を識別することができます。
* **引数の型チェック:** 引数の型を指定することで、引数の型が正しいことをチェックすることができます。
* **返り値の型チェック:** 返り値の型を指定することで、返り値の型が正しいことをチェックすることができます。
* **コードの可読性向上
PHPにおけるセッションの仕組み
PHPにおけるセッションは、**サーバ側でデータを一時的に保存し、複数のページにわたって共有する仕組み**です。具体的には、以下の流れで処理されます。
1. **セッション開始:**
– `session_start()` 関数を呼び出すことで、セッションを開始します。
– セッションが開始されると、セッションIDと呼ばれる一意の識別子が生成されます。
2. **セッションデータの保存:**
– `$_SESSION` スーパーグローバル変数を使用して、セッションデータにアクセスできます。
– `$_SESSION` 変数には、キーと値のペアでデータを格納することができます。
3. **セッションデータの取得:**
– セッションデータは、`$_SESSION` 変数を使用して取得できます。
– キーを指定して、対応する値を取得することができます。
4. **セッションの終了:**
– `session_destroy()` 関数を呼び出すことで、セッションを終了します。
– セッションが終了されると、セッションデータ
PHPにおけるビルトイン関数とユーザー定義関数
### ビルトイン関数
PHPには、あらかじめ用意されている関数が多数存在します。これらは**ビルトイン関数**と呼ばれ、言語仕様の一部として定義されています。開発者は、これらの関数を自由に利用することができます。
ビルトイン関数は、以下の利点があります。
* **すぐに使える:** インストールや設定などの手間をかけずに、すぐに利用することができます。
* **標準化されている:** すべてのPHP環境で同じように動作するため、移植性が高いです。
* **幅広い機能:** 文字列処理、数値処理、ファイル操作、データベース操作など、様々な機能を提供しています。代表的なビルトイン関数としては、以下のようなものがあります。
* `strlen()`: 文字列の長さを取得する
* `strpos()`: 文字列中の部分文字列を検索する
* `file_get_contents()`: ファイルの内容を読み込む
* `mysql_connect()`: MySQLデータベースに接続する### ユーザー定義関数
ビルトイン関数に加えて、開発者自身が**ユーザー定義関数**を作
FuelPHP の migrate Task
# 概要
FuelPHP では Database の Migration は `migrate` Task を用いて行う
`migrate` Task にはいくつかのコマンドとオプションが用意されているまた FuelPHP の Migration File は `fuel/app/migrations/nnn_xxx.php` のフォーマットとなっており
`nnn` にはバージョン番号、`xxx` には Class 名が入る
基本的には `nnn` も `xxx` も同じ値は利用してはならないもし被ってしまった場合
`nnn` は `php oil refine migrate:current` や `php oil refine migrate –catchup` を利用することで同じバージョンでも実行可能
`xxx` は `php oil refine migrate:up` や `php oil refine migratre:down` で1件ずつ処理するなどして、同じ Class を読み込まないようにすることで実行可能またバージョン (`nnn`) は3桁である
【覚え書き】AlmaLinux9.3でのLAMP環境構築手順(Apache+MariaDB+PHP)
## はじめに
CentOS Linux 7 は、2024 年 6 月 30 日にサポート終了 (EOL) となります。この後継としてAlmalinuxを選ぶことが多くなってきました。そこで現時点の最新のAlmalinux9のインストール後の初期設定とLAMP環境構築手順を、備忘録的に記しておきたいと思います。## 構築するLAMP環境
L: AlmaLinux 9.3 (Shamrock Pampas Cat)
A: Apache/2.4.57 (AlmaLinux)
M: mysql Ver 15.1 Distrib 10.5.22-MariaDB
P: PHP 8.3.6## この手順を始める前の前提
* 物理サーバーもしくは仮想サーバーへは、AlmaLinux9.3 がインストール済みであること
* インストール時に、言語を「日本語」に設定済みであること
* インストール時に、ネットワーク設定済みであること
* インストール時に、NTP設定済みであること## 1. dnfまわり
### 1-1. メタデータキャッシュの作成
“`ba