- 1. インターフェース
- 2. ポリモーフィズム
- 3. 無名クラス
- 3.1. PHPのソケット通信(Client)でESP32と疎通してみる
- 3.2. 【PHP】PHP7技術者認定初級試験対策 ※用語の意味が中心
- 3.3. PHPのバージョンをプロジェクトごとに切り替える方法
- 3.4. Laravel で爆速ラクチン?に動的な機能を開発や!Livewire2.x 解説?
- 3.5. [PHP入門] テキストデータへの、送信、書き込み、読み込み
- 3.6. 【CodeIgniter4】form_dropdownの使い方
- 3.7. PHP 三項演算子の省略形
- 3.8. PHP smarty テンプレート変数取得 getTemplateVars
- 3.9. PHP array_slice() 配列の一部を取得
- 3.10. ポーカー判定 PHP
- 3.11. var_dumpの出力結果を改行
- 3.12. 【JWT】JWTとは?〜PHPライブラリでJWTを使ってみる
Laravel 上で CSV を作成して保存する
# はじめに
仕事で Laravel 内でcsv を生成するコードを作成したのでその上で知ったことに関して備忘録代わりにこちらで記載しておきます。
# 保存場所の検討
Laravel のコードは当然ながら PHP で動いているので、ファイルを生成するのであれば、“`fopen((パス), (オプション))“` を用いることになります。
(fopen から fclose までの一般的なファイル生成手法に関してはこの記事では割愛しますので、気になる方は各自お調べください)この時、
“`response()->streamDownload($callback, $filename, $header)“`
のようなファイルを生成したそばからレスポンスとして返すような場合は、$callback に渡すクロージャ内で“`fopen(‘php://output’, ‘w’)“`と
ファイルのパスを設定すれば問題ありません。しかし、生成を行って一度保存する場合、その保存先を用意するにあたって気を付けるべき項目が存在します。
例えば、 **/storage/app/csv/{
LaravelでAuth0のIDトークン(JWT)を検証・デコードする
# 環境
– [Laravel Framework 9.13.0](https://laravel.com/ “Laravel”)
– [PHP 8.1.6](https://www.php.net/ “PHP”)
– [auth0/auth0-php 8.2](https://github.com/auth0/auth0-PHP “auth0-php GitHub”)## 前提
Auth0で`Single Page Appliation`を作成し、`ID Token`を**発行できる状態**を前提とします。
詳細な説明・方法は[【Auth0】LaravelでAuth0を使って認証する:IDトークン編【Laravel】](https://qiita.com/akkino_D-En/items/9c2a8c0d13ac802b04e7 “”)@akkino_D-Enがわかりやすかったので参照してください。## 注意
`auth0-php`の**7系**では今回の方法で**実装できません**。
また、`auth0/login`という似たライブラリもあるので注意してください。#
PG見聞録 ~PHP編 インターフェース~
気分転換をして気を取り直してがんばるぞーと思った日はいろんなことが重なるもので
以前バックバンドやレコーディングでベースを担当させてもらってたシンガーの方から
2年ぶりくらいにライブでサポートの依頼を頂きまして。
コロナ禍でかなり厳しい状況にあってバンドでのライブは長いことお休みしてたんですが
かなりの時間が空いても真っ先に連絡をくれて「ベース弾いてくれると心強い」って言ってもらえるというのはミュージシャン冥利に尽きますね涙
そんなわけでインターフェースについて書いていきます涙インターフェース
前回書きましたポリモーフィズムですが、同名のメソッドで別々の挙動を取れるというのは非常に便利な仕組みなのですが問題もございまして。
例えば子クラス1と子クラス2があって抽象化した親クラスがいて、メソッドを定義したとします。
子クラス1でメソッドA,B,Cが必要なので定義して、継承元の親クラスにオーバーライドします。
しかし子クラス2はメソッドA,Bだけがあれば良いんだよなあとなった時、その二つだけ都合よくオーバーライドしようと思ってもそうはいきません.
PG見聞録 ~PHP編 ポリモーフィズム~
何だか日中は集中できず、休み休みやってたんですがやはり集中できず。
そんなときの気分転換、ワンコの散歩ついでにカフェラテ買ってきました。
多分ワンコ飼ってる人って自分ちの犬が世界一かわいいって思ってますよね。
そのうちの一人です。先日のトリミング後の写真みてください。
![ran.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2669556/877c3c6c-eadc-e7ad-e1fa-16ac907a4eba.jpeg)
ほらかわいい。ということでポリモーフィズム(多態性)についておさらいしていきます。
ポリモーフィズム
とは、多態性を意味する言葉です。態が多い性質です。
なんのこっちゃと思いますが要は「同じ名前を持つメソッドが違う動きをとる」ことです。
カプセル化、継承と並んでオブジェクト指向構文において大事な要素の一つですね。
学習がかなり溜まってしまったのでこれらもまとめていきたいと思います。“`php
PHP・Rubyのスタックトレースの出し方
## スタックトレース
スタックトレースとは、実行中のコンピュータプログラムにエラーが発生した際に、直前に実行していた関数やメソッドなどの履歴を表示すること。
ログよりも詳しいエラー箇所を特定することができる。https://e-words.jp/w/%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF%E3%83%88%E3%83%AC%E3%83%BC%E3%82%B9.html
## Ruby
ドキュメントには載ってないが、“`join(“\n”)“`しないとかなり見づらいのでした方がいい。
“`ruby
def methd
raise
endbegin
methd
rescue => e
logger.error e.backtrace.join(“\n”)
end
“`https://docs.ruby-lang.org/ja/latest/method/Exception/i/backtrace.html
## PHP
“`php
debug_print_backtrace();
“`https://www.p
Laravel9にバージョンアップしたらGoogle App Engineへデプロイするときにエラーが発生
## エラー内容
“`
$ gcloud app deploy…
– Installing laravel/tinker (v2.7.2): Extracting archive
– Installing league/flysystem-google-cloud-storage (3.0.15): Extracting archive
– Installing spatie/laravel-google-cloud-storage (2.0.3): Extracting archive
Deprecation Notice: Return type of Symfony\Component\Finder\Iterator\FilenameFilterIterator::accept() should either be compatible with FilterIterator::accept(): bool, or the #[\ReturnTypeWillChange] attribute should be used to temporarily su
gitの「pre-commit」を使って静的テストをする
## 概要
`git`に用意されている**フック機能**を使ってコミット直前に**静的テスト**を行えるようにしてみる。キーワードは、
– **pre-commit** : gitのhook機能でコミット直前の処理を定義できる
– **PHP Lint** : PHP標準のシンタックスチェック機能
– **phpmd** : PHPの静的コード解析ツールの3つになります。
## 実行環境
– CentOS 7.6
– PHP 7.2.24## ディレクトリ構成
検証用に作成したディレクトリ構成になります。
“`
app:
├─.gitignore
├─composer.json
├─composer.lock
├─test_success.php
├─test_error.php
│
├─vendor
│
└─git_template
└─hooks
└─pre-commit
“`
主なのだけ説明
– `test_success.php`、`test_error.php`
検証用のテス
PG見聞録 ~PHP編 無名クラス~
最近はjavascriptと並行して学習しているのですが、仕組みや構文が似ていて
併せて覚えやすい(ビギナーにとってはごっちゃになりそうですが)というのも
PHPが入りやすいとされる所以ですかね。javaの学習もスムーズに移れそうです。無名クラス
というわけで無名クラスについておさらいしていきます。
名前の通り、名無しのクラスで特定の文の中でしか使えないものです。
定義しておいて後から呼び出すとかも出来ない代わりにいくつかメリットがあります。
・コードをシンプルに表現できる
・許されている場所ならばどこでも記述できる
・名前が無いということは競合する恐れがない
というメリットがあります。
後にも先にもここでしか使わない、その場限りの少し特殊なクラスです。
例“`php
/** 無名クラス
* ・コードをシンプルにまとめられる
* ・許されている場所ならどこでも記述できる
* ・名前がないので他のクラスと競合しない
*/interface
PHPのソケット通信(Client)でESP32と疎通してみる
# はじめに
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/459889/3387ef68-d6bb-c624-8d4e-29fc23965e9d.png)
こんな感じのを作る
各バージョンはこちら
“`sh
$ apache2 -v
Server version: Apache/2.4.29 (Ubuntu)
Server built: 2022-03-16T16:53:42$ php -v
PHP 7.2.34-28+ubuntu18.04.1+deb.sury.org+1 (cli) (built: Nov 19 2021 06:36:36) ( NTS )
Copyright (c) 1997-2018 The PHP Group$ cat /etc/os-release
NAME=”Ubuntu”
VERSION=”18.04.6 LTS (Bionic Beaver)”
ID=ubuntu
ID_LIKE=debian
PRETTY_NAME=”Ubu
【PHP】PHP7技術者認定初級試験対策 ※用語の意味が中心
PHP7技術者認定初級試験を受けるにあたって勉強したところを備忘録として残しておきます。
自分用のメモのようなものなので、もし間違っている箇所等ありましたらご指摘いただけますと幸いです。## エイリアス(別名)
独自につけるニックネームと覚えれば良い。
クラスや関数に別名をつけることでコードの効率化、簡略化を図ることができる。## クロスサイトスクリプティング(XSS)
悪意あるユーザがフォームから悪いデータを送信することで、サーバに意図しない動作をさせること。#### ■防止策
1. データをそのまま送信できなくさせる。文字からHTMLタグを取り除くstrip_tags()関数を使用
2. 特殊なHTML文字(例 & < > “)を変換させるhtmlentities()関数を使用## $_SERVER(サーバー変数)
ヘッダ情報、パス情報、スクリプトの位置のような情報を提供する。#### 例
① $_SERVER[‘PHP_SELF’];
(例) http://example.com/test.php/foo.php というアドレスの場合
“`
PHPのバージョンをプロジェクトごとに切り替える方法
## はじめに
今回は**phpenvの導入~使用方法**までを紹介します。– **導入の発端**
Jenkinsの**ビルド時にジョブごとにPHPのバージョンの切り替えを可能**にして
**依存関係エラーの解消**をするために使用。:::note warn
Jenkinsのシェルからコマンドを打つ場合は、
最初にsource ~/.bash_profileを実行しないと`.bash_profile`は反映されない。
:::## インストール
#### phpenv
“`
$ git clone https://github.com/phpenv/phpenv.git ~/.phpenv
“`#### 環境変数へ追記
“`
$ echo ‘export PATH=”$HOME/.phpenv/bin:$PATH”‘ >> ~/.bash_profile
$ echo ‘eval “$(phpenv init -)”‘ >> ~/.bash_profile
$ exec $SHELL -l
“`#### シェルの再起動
“`
$ exec $SHELL –
Laravel で爆速ラクチン?に動的な機能を開発や!Livewire2.x 解説?
# この記事の目的
– Livewireの紹介
– 個人的によく使うlivewire逆引きリファレンス。https://laravel-livewire.com/docs/2.x/quickstart
どういう事が出来るのか知った上でドキュメントを見ると読みやすいと思います。
使い慣れてる人はここを見た方が早いですhttps://readouble.com/livewire/2.x/ja/reference.html
# Livewireって何
– Laravel7.x~ から使えるBladeとPHPの記述で動的な機能を作れるライブラリ
– jsを書かずに良い感じのUIが作れる。
– 学習コストも低く導入しやすい。以前に布教目的で書いた記事
https://qiita.com/sgrs38/items/89a6a59b896669dfd725
## 紹介サンプル
こういうのをjavascript書かずに簡単に実装出来ます。
![ダウンロード (2).gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws
[PHP入門] テキストデータへの、送信、書き込み、読み込み
# 初めに
PHPの学習を始め、よく使うけど、始めのうちは忘れて何度も見直すだろう。
という点を、メモ代わりにまとめていきます。## 基本的な書き方
**[開始タグ]** “`“**[HTMLへ表示]** “echo“
“`
echo “Hello”; //文字列
echo $hensu; //変数
“`
※jsのconsole.logのように()は不要だが、“ ; “を忘れるとエラーが出るので注意。**変数定義**
“`
$num = 1; //数列
$name = “hoge”; //文字列
“`
## HTMLフォームのデータをPHPファイルへ送信
PHPを使う事で、HTMLとCSSだけでは見た目だけだったお問い合わせフォームを実際に活用できるようになります。“`
【CodeIgniter4】form_dropdownの使い方
# はじめに
CodeIgniterに関して情報が少ないので、ドロップダウンの作成方法について投稿してみました。
良ければ参考にしてください。言語:PHP
フレームワーク:CodeIgniter4
# 使い方
codeIgniterのフォームヘルパー`form_dropdown`を使ってドロップダウンを作成します。
フォームヘルパーを使用する際は、ヘルパーを呼び出すために`helper(‘form’)`を記述する必要があるので忘れずに!
“`
form_dropdown($name, $options, $select)
“`
$name:name属性(データ送信時、controller側で受け取るnameとなる)$options:リスト表示させたい配列をここに設定する。
$select:画面レンダリング等の初期表示させたいリスト項目を設定する。
連想配列のkey値を渡してあげることで初期表示を実現させる。
また、この引数をうまく使ってバリデーションエラー時に選択したリストのkey
を渡すことで再度選択したリストを表示させることが出来る
PHP 三項演算子の省略形
## 三項演算子の省略形
三項演算子は可読性が下がる場合もありますが、今回は紹介します。
下記の2つは同じ結果になります。“`php:例文
$hoge ? $hoge : $hogehoge;
“`
**解説**
「$hoge」が `true` の場合は「$hoge」を返し、 `false` の場合は「$hogehoge」を返します。
“`php:例文
$hoge ?: $hogehoge;
“`
**解説**
「$hoge」が `true` の場合は「$hoge」を返し、 `false` の場合は「$hogehoge」を返します。
1つ目のコードと違う点は、 `true` の場合に返す値を省略している点です。
`true` の場合には「?」の左にある値が返されます。
※三項演算子の時点で可読性が下がる場合があり、省略することで更に可読性が下がる場合もあります。
PHP smarty テンプレート変数取得 getTemplateVars
## getTemplateVars
テンプレート変数の情報を取得します。“`php:例文
$smarty->getTemplateVar(‘hoge’);
“`
上記でテンプレート変数「hoge」の値が取得できます。assignされていた場合に処理を行うなどの、if文を記述する際にも使えます。
PHP array_slice() 配列の一部を取得
## array_slice()
配列の一部を取得する関数です。
取得した部分を配列にして返します。
※返り値の配列の添字は0から指定されます。
“`php:例文
$hoge = [“a”, “b”, “c”, “d”, “e”];
$hogehoge = array_slice($hoge, 1, 3, true);
var_dump($hogehoge);
“`“`:結果
Array
(
[1] => b
[2] => c
[2] => d
)
“`### 解説
`array_slice(第1引数, 第2引数, 第3引数, 第4引数)``第1引数` ※必須
取得の対象の配列`第2引数` ※必須
取得の開始位置
例文では「1」を指定していたので、2つ目が開始位置になります。
末尾から数えたい場合は、負の数を指定します。最後の要素が「-1」、最後から2番目の要素が「-2」になります。`第3引数` ※省略可能
取得する要素の数
デフォルトでは「NULL」が指定されていて、開始位置以降の全ての要素を取得します。
負の数を指定した場合、
ポーカー判定 PHP
なんとなくポーカーの役を判定するコードを書いてみる。参考なし。最適化はしない。
“`php
[0 => array_rand($suit), 1 => random_int(0, 13)], range(1,5));// 判定
$result = judge($cards);// 出力
$mark = [SPADE=>”♠”, CLUB=>”♣”, HEART=>”♥”, DIAMOND=>”♦”];
$c = array_map(fn($v) => $v[1]==0?’JOKER’:$mark[$v[0]].$v[1], $cards);
echo implode(‘, ‘, $c) . ” : “. $result
var_dumpの出力結果を改行
“`
echo ‘'; var_dump(); echo '‘;
die();
“`
【JWT】JWTとは?〜PHPライブラリでJWTを使ってみる
# JWTとは
– Json Web Tokenの略称、ジョットと読む
– JSON形式のデータをURLセーフな方法で送信するための技術
– 電子署名によりデータの改ざんを検知でき、ユーザー認証などで利用されている
– 仕様は[RFC7519](https://datatracker.ietf.org/doc/html/rfc7519)に定められているauth0のJWT特設サイトにサンプルとデバッガが用意されています。
https://jwt.io/
# JWTの構成
下記の要素をピリオドで連結した文字列です。
– Base64URLエンコードされたヘッダー
– Base64URLエンコードされたペイロード
– 署名[auth0のJWT特設サイト](https://jwt.io/)より
“`bash
# Base64URLエンコードされたペイロード.
# Base64URLエンコードされたペイロード.
# 署名
eyJ0eXAiOiJKV1QiLCJhbGciOiJSUzI1NiJ9.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG