- 1. 色々な言語の Dictionary のキーの型の扱いについて調べてみた
- 2. 【Laravel】Swagger UIのドキュメントをLaravelのソースの外に出す
- 3. PHPのselfと$thisの違い
- 4. 【PHP8.4】PUTやPATCHでもリクエストボディを簡単に取得できるようになる
- 5. PHP バリデーションの設定の学習の振り返り
- 6. 🔰独学でサッカーの試合通知をするwebアプリ『Kickoff Reminder』を作成しました ⚽️【Laravel / Vue / AWS】
- 7. 【Laravel】Swagger UIを使用してドキュメントをブラウザで確認する
- 8. LaravelとFirebaseでプッシュ通知を実装する
- 9. 【PHP】API触ったことないけどハッカソンに参加してPokeAPIをたたいてみた
- 10. フォーム入力欄と入力確認画面にホームページと性別と年齢及びお問い合わせ内容、Cautionの追加をする
- 11. 【Laravel】Swagger-PHPを使ってSwagger(OpenAPI)仕様を作成する
- 12. Composer の自作パッケージの作成を通して php 開発環境を整えてみた
- 13. PHPの配列で和集合,差集合,積集合
- 14. PHP フォームセキュリティの学習振り返り FWなし
- 15. PHPでファイルのタイムスタンプをマイクロ秒精度で取得するには
- 16. PHPでフォーム入力、確認、完了画面の学習(FWなし)
- 17. 【PHP】マイナーフレームワーク「Flow」を試してみる~認証編~
- 18. CSRF対策について
- 19. Github private リポジトリを composer installするときの注意点
- 20. Laravelのpluckは便利ですよって話
色々な言語の Dictionary のキーの型の扱いについて調べてみた
Dictionary や object のキーに複数の型を指定した場合、どういった扱いになるのかが非常に気になったので、自分の知っている範囲の言語で試してみました!
# Python の場合
“`python:Python
a = {}
a[1] = “int”
a[1.0] = “float”
a[“1.0”] = “str”
# => {1: ‘float’, ‘1.0’: ‘str’}
“`int と float は同一視されるようです。Python では `1 == 1.0` が成立するので、これは合理的な気もしますね。使う側は非常に安心できます。他にも、True, False, Fraction, Decimal なども同一視されるようです。
> Numeric values that compare equal have the same hash value (even if they are of different types, as is the case for 1 and 1.0).
https://docs.python.org/3.5/lib
【Laravel】Swagger UIのドキュメントをLaravelのソースの外に出す
# はじめに
こんにちは、プログラミングを始めて約3年のエンジニアのkeitaMaxです。
前回Laravelのpublicファイル下にSwagger UIのdistをおきました。
今回は、public下ではなくLaravelのソース外において違うポート番号でアクセスしてみれるようにしようと思います。前回の記事
Dockerの設定をした記事
https://qiita.com/keitaMax/items/7bc51212a32a6418aa1c
# Docker修正
以下を`docker-compose.yml`ファイルに追加しました。
“`yml:docker-compose.yml
swagger:
build:
context: ./docker/swagger
dockerfile: Dockerfile
ports:
– 8082:81
depends_on:
– app
volumes:
– ./swagger/:/app/swagger
“`do
PHPのselfと$thisの違い
## はじめに
Swiftと違うからごっちゃになったのでメモ## $this
$this は、インスタンス自体を指す特別な変数です。インスタンス化されたオブジェクトの中からプロパティやメソッドにアクセスするために使われます。
“`php
class MyClass {
private $prop = “property value”;public function showProp() {
echo $this->prop;
}
}$obj = new MyClass();
$obj->showProp(); // property value を出力します。“`
## self
self は、静的(static)なプロパティやメソッド、または定数にアクセスするために使われます。self キーワードを使うことで、インスタンス化しなくてもクラスの静的メンバにアクセスできます。“`php
class MyClass {
const CONSTANT = “constant value”;
privat
【PHP8.4】PUTやPATCHでもリクエストボディを簡単に取得できるようになる
PHPでは、POSTでリクエストを送るとリクエストボディが自動的に[スーパーグローバル変数`$_POST`に格納されます](https://www.php.net/manual/ja/reserved.variables.post.php)。
これは非常に便利なのですが、注意点としてPOSTでないかぎり入ってきません。
たとえリクエストメソッドGETやPUTにリクエストボディを入れて送ったとしても`$_POST`は空です。そしてPHPには何気にリクエストボディをパースする関数がなく、自力でパースするのは[たいへんに面倒で誤りも入りがち](https://stackoverflow.com/questions/5483851/manually-parse-raw-multipart-form-data-data-with-php)です。
この対応案としてスーパーグローバル変数`$_PUT`を追加したいみたいな話が出たこともあるのですが、それでは`$_PATCH`とか`$_DELETE`とかも必要なのかということになってあまり現実的ではないでしょう。
ということで、リクエストメソ
PHP バリデーションの設定の学習の振り返り
# 下記の入力フォーム($pageFlag = 0)にバリデーションの設定をする
“`php:form.php
‘; var_dump($_POST); echo ‘‘;
}$pageFlag = 0; // 入力画面のフラグ(Topのフォーム画面)
// $_POST[‘btn_confirm’]が空でなければ $psteFlag = 1 に切り替える
if (!empty($_POST[‘btn_confirm’])) {
$pageFlag = 1;
}// $_POST[‘btn_submit’]が空でなければ $psteFlag = 2 に切り替える
if (!empty($_POST[‘btn_submit’])) {
🔰独学でサッカーの試合通知をするwebアプリ『Kickoff Reminder』を作成しました ⚽️【Laravel / Vue / AWS】
# はじめに
**この記事では、実務未経験から独学で作成したwebアプリ「*Kickoff Reminder*」について紹介しています。**
また、webアプリを作成するにあたって、工夫した点、学習プロセスなども書かせていただいております。良ければご一読ください。:bow:# 作成者
– 1999年生まれ
– 大学までサッカー部 :soccer:
– フリーター中にwebエンジニアに興味をもつ
– 2023年から独学でwebアプリ開発を開始
– 現在バックエンドエンジニアを目指して就職活動中 :muscle_tone1:
– X(Twtter) :# 目次
1. [作成したアプリ紹介](#1-作成したアプリ紹介)
2. [このアプリを作った理由](#2-このアプリを作った理由)
3. [使用技術](#3-使用技術)
4. [基本設計](#4-基本設計)
5. [作成から完成までをふりかえって](#5-作成から完成までをふりかえって)
6. [独学での学習プロセス :runner_tone1:](#6-独学での学習プ
【Laravel】Swagger UIを使用してドキュメントをブラウザで確認する
# はじめに
こんにちは、プログラミングを始めて約3年のエンジニアのkeitaMaxです。
https://qiita.com/wrbss/items/258394193e5ffd1b926a
この記事にあるように、Swagger UIを使用してブラウザでドキュメントをみようと思います。
前回の記事
https://qiita.com/keitaMax/items/03acb4ae30345fb50891
# `swagger.json`ファイルの作成
記事にあるように、`swagger-xxx.php`ファイルを作成してみます。
今回は、appフォルダ下に`swagger-001.php`として作成しました。
“`php:swagger-001.php
LaravelとFirebaseでプッシュ通知を実装する
# はじめに
APIなどのバックエンドをLaravelで実装したアプリがあったとして、そのアプリにどうやってプッシュ通知を飛ばすのでしょうか?調べてみたのですが全体を通して解説されている情報が意外と少なかったので、ここに備忘録として記録したいと思います。
以下の点については省略しているのでご了承を:pray:
– クライアントサイド(アプリ側)の実装
– プッシュ通知で必要なAPNs Keyの発行など
– Laravelの環境構築https://qiita.com/kokogento/items/18f5d1642f6f915f8961
全体ぞについては👆を参考に。
# Firebase側の準備
まずはFirebase側の準備をします。と言っても、Firebaseプロジェクトを作って秘密鍵のファイルを取得するだけです。https://firebase.google.com/docs/admin/setup?hl=ja#initialize_the_sdk_in_non-google_environments
>サービス アカウント用の秘密鍵ファイルを生成するには:
【PHP】API触ったことないけどハッカソンに参加してPokeAPIをたたいてみた
# はじめに
今回はPHPでPokeAPIをつかってポケモンの画像と名前をランダムに表示する方法を説明したいと思います。
以下がイメージしているものです。![PokeApiサンプル.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3554505/9936059c-1f13-b145-0002-1b0ef4284c1f.gif)
今回はページを更新するたびに全国図鑑からランダムなポケモンの画像と名前を表示するようにします。# 触ろうと思ったきっかけ
ハッカソンに友人と参加したときにPHPを使ったアプリを作ることになり面白要素としてPokeApiを使おうという話になり自分はAPIを触ったことがなかったので挑戦しました。# 全体のコード
“`php:pokeapi.php
$randamnumber=rand(1,1025); $urlname = "https://pokeapi.co/api/v2/pokemon-species/".$randamnumber; $urli
フォーム入力欄と入力確認画面にホームページと性別と年齢及びお問い合わせ内容、Cautionの追加をする
# フォーム入力画面($pageFlag = 0) にホームページとホームページ(URL)と性別と年齢及びお問い合わせ内容、Cautionの追加
type属性:
– ホームページ = `url`
– 性別 = `radio`
– 年齢 = `select` , `option`
– お問い合わせ内容 = `textarea`
– caution = `checkbox`“`php:form.php
‘; var_dump($_POST); echo ‘‘;
}$pageFlag = 0; // 入力画面のフラグ(Topのフォーム画面)
// $_POST[‘btn_confirm’]が空でなければ $psteFlag = 1 に切り替える
if
【Laravel】Swagger-PHPを使ってSwagger(OpenAPI)仕様を作成する
# はじめに
こんにちは、プログラミングを始めて約3年のエンジニアのkeitaMaxです。
今回はSwagger-PHPを使ってみたいと思います。
https://zircote.github.io/swagger-php/guide/
# Swagger-PHPとは
>swagger-phpは、PHP ソース コード ファイルから API メタデータを抽出するライブラリです。
>
>アイデアは、アプリケーション内の関連する PHP コードの隣にswagger-php 注釈または属性を追加することです。これらには API に関する詳細が含まれており、swagger-phpそれらは機械可読なOpenAPI ドキュメントに変換されます。
(引用:https://zircote.github.io/swagger-php/guide/)PHPでAPIを作成したら、自動的にSwagger(OpenAPI)仕様を作成してくれるライブラリのことらしいです。
# インストール
https://zircote.github.io/swagger-php/guide/installa
Composer の自作パッケージの作成を通して php 開発環境を整えてみた
# はじめに
これまではノリと雰囲気で php と関わってきましたが、ついに真っ向から向き合っていかなければいけない時期が来たようです…!
というのも最近、Laravel フレームワークで作成されたアプリの本番コンテナを作成するという業務に関わったことで、アプリを弄れないとインフラ側で強引に頑張らねばならなくなり、労力の割に複雑で認知負荷が高くなってしまったり拡張性に乏しかったりと、非常に辛いことを実感しました。
そこで、PHP の基礎を理解するにあたってとりあえずは Composer の自作パッケージの作成を通して色々と学んでみましたので、得た知見や疑問・課題などを書いてゆければと思います。
ノウハウ共有というよりかは、体験談・感想文 的な要素が強いかもしれませんが、よければご覧下さい。
# ネタとして Composer パッケージ作成を選んだのはなぜ?
PHP のパッケージ管理といえば Composer であり、色々と使いこなせていない機能があることをなんとなく知っていました。
自分は SRE なので、PHP アプリの CI/CD のベストプラクティスを身につけるにあた
PHPの配列で和集合,差集合,積集合
## はじめに
SQLでUNIONやEXCEPT,INTERSECTを使った際,PHPで和集合とかあるのか気になって調べたメモPHPでは、配列の和集合や差集合を直接扱う組み込み関数は提供されていませんが、array_mergeやarray_diff関数を使用してこれらの操作を行うことができます.
## 和集合
“`php
$array1 = [‘apple’, ‘banana’, ‘cherry’];
$array2 = [‘banana’, ‘cherry’, ‘date’];// 和集合の計算
$union = array_merge($array1, $array2);// 重複を削除するためにarray_uniqueを使用
$union = array_unique($union);print_r($union);
Array
(
[0] => apple
[1] => banana
[2] => cherry
[5] => date
)“`
## 差集合
“`php
$array1 = [‘apple’, ‘b
PHP フォームセキュリティの学習振り返り FWなし
# XSS (Cross-Site-Scripting) 対策
対策方法: サニタイズをする。
phpの標準関数 `htmlspecialchars`を使用する。
下記のコードはサニタイズを施していない。
“`php:form.php
PHPでファイルのタイムスタンプをマイクロ秒精度で取得するにはLinux系OSなら素直に`stat`コマンドを使ったほうが早い。
## ファイルのマイクロ秒単位での最終修正タイムスタンプ
“`php
/**
* ファイルのマイクロ秒単位での最終修正タイムスタンプを返します。
*
* @param \SplFileInfo|string $file ファイルパス
* @return string|false ファイルのマイクロ秒単位での最終修正タイムスタンプの文字列表現 取得に失敗した場合はfalse
*/
function micro_mtime(\SplFileInfo|string $file): string|false
{
$pipes = [];$process = \proc_open([‘stat’, ‘–format=%z’, \is_string($file) ? $file : $file->getPathname()], [
0 => [‘pipe’, ‘r’],
1 => [‘pipe’, ‘w’],
PHPでフォーム入力、確認、完了画面の学習(FWなし)
# 1. 入力画面、確認画面、完了画面のフラグを定義する
$pageFlagは下記のように定義してみる
入力画面のフラグ : $pageFlag = 0;
確認画面のフラグ : $pageFlag = 1;
完了画面のフラグ : $pageFlag = 2;
“`php:form.php
Document
入力画面
【PHP】マイナーフレームワーク「Flow」を試してみる~認証編~
# 初めに
前回は[こちら](https://qiita.com/nnhkrnk/items/ffe50dd90d886f50f73e)の記事で、Flowにおけるイベント管理について書きました。
今回はFlowで**ログイン処理**を実装してみましょう。# 前提知識
まずは、Flowで認証処理を実装するために抑えておきたい知識を説明します。## どの認証方式を使うか
認証といっても、**パスワードやキーやSSOなど、様々な種類があります**。
Flowでは、それらの**認証方式の実現するための2つのインターフェース**が用意されています。
* **[1. 認証プロバイダ](https://github.com/neos/flow/blob/8.3/Classes/Security/Authentication/AuthenticationProviderInterface.php)**
* **[2. トークン](https://github.com/neos/flow/blob/8.3/Classes/Security/Authentication/TokenInterfac
CSRF対策について
PHPでのCSRF対策についてアウトプットとして記事をまとめる。
## 1.初めに
CSRFとはWebアプリケーションに存在する脆弱性、もしくはその脆弱性を利用した攻撃方法のこと。## 2.具体例
**ワンタイムトークン**を利用した対策を紹介する。## 3. ワンタイムトークンとは
簡単に1度きりの**合言葉**を生成し、その合言葉が一致した場合のみログインを認め、それ以外は不正リクエストとして拒否する。### 3.1 実装手順
1. トークンによるリクエストチェック
2. ユーザ操作によるリクエストの送信時にトークン(合言葉)をランダム生成する
3. リクエストと共に、トークンをセッションに格納かつPOST送信する
4. 受け取ったトークンとセッションに格納されているトークンを照合する
5. 一致していれば正規リクエストとして正常処理し、
6. 不一致なら不正リクエストとして拒否する### 3.2 実装
“`php:form.php
Github private リポジトリを composer installするときの注意点
## 記事対象者
(一般ユーザとしてcomposer installしており、)後述のエラー事象が発生してる方。## 前提
organization/repos-name というプライベートリポジトリをcomposer installしようとする。
## エラー事象
composer install 時に以下のエラーが発生。
“
Failed to download laravel/framework from dist: The “https://api.github.com/repos/organization/repos-name/zipball/xxxxxxx” file could not be downloaded (HTTP/2 404 ): {“message”:”Not Found”,”documentation_url”:”https://docs.github.com/rest/repos/contents#download-a-repository-archive-zip”} Now trying to download from source
`
Laravelのpluckは便利ですよって話
### はじめに
Laravelで開発していると必ずと言っていいほど出てくるpluckですが、Collection型配列を整頓するだけではない魅力も感じたので記事に起こそうと思いました。
状況に次第ではありますが実はEloquentで使用するとselect関数が必要なくなるんです
### 基本機能
Readoubleからそのまま引用してしまいますが、基本的な機能としては、
指定したキーのコレクション値を取得します
第1引数にvalueを、第2引数にはkeyを入れます
第1引数のみであれば、valueだけを
“`php
$collection = collect([
[‘product_id’ => ‘prod-100’, ‘name’ => ‘Desk’],
[‘product_id’ => ‘prod-200’, ‘name’ => ‘Chair’],
]);$plucked = $collection->pluck(‘name’);
$plucked->all();
// [‘Desk’, ‘Chair’]
“`さらに、コレクションの