- 1. Laravelで用意したファイルを使ってテストする
- 2. 【初心者】Cloud Spanner With Laravelのローカル環境構築
- 3. Chromeのページネーションと同じ動作するページネーションが実装できたっぽい
- 4. 「アプリケーションサーバ??」となったPHPerのお話
- 5. 【pythonメモ】回数指定のfor文(for .. in range)の使い方
- 6. [php] mysqli_fetch_array
- 7. [php] mysqli_fetch_assoc
- 8. {GRAYCODE} ひと言掲示板を作る に挑戦してみる。
- 9. PHP mb_strlen(), strlen()の違い
- 10. 【Laravel】最短で例外処理のcatchに落とすハゲホゲ
- 11. PHPとイスラエル ←便乗
- 12. プログラミング初学者が1ヶ月で得たスキルとコーディング以外のナレッジ
- 13. カラオケお役立ちアプリ制作記(制作中)
- 14. 例外処理は投球練習
- 15. パスワードのハッシュ化と比較
- 16. PHPでログイン機能
- 17. PHPでユーザー登録
- 18. PHP ログアウト
- 19. PHP 退会機能
- 20. 忘れやすいがよく使う PHPでログを取る方法
Laravelで用意したファイルを使ってテストする
## はじめに
CTIのサービスに携わっている為、音声ファイル関連の機能に関わる事が多く自動テストで音声ファイルを扱う機能をカバーしたいと考えていました。
初期実装では、“`UploadedFile::fake()“`を利用して以下のようにダミーデータ作り対応していました。“`php
use Illuminate\Http\UploadedFile;$record_file = UploadedFile::fake()->create(
name: ‘record-file-sample.wav’,
mimeType: ‘audio/x-wav’
);
“`
しかしダミーデータでは、ファイルサイズチェックなどの一部メソッドのテストが上手くいかなかった為(この辺りの調査は必要かもしれない)、自分で用意したテストデータを持つファイルをPOSTする方法を調べたのでまとめておきます。
## 環境
“`
Laravel8系
“`
## 実装方法
### 1, テスト用の音声ファイルを用意する
今回はテスト
【初心者】Cloud Spanner With Laravelのローカル環境構築
# 概要
自分のメモ用にローカルにCloud Spannerを立て、PHP(Laravel)から操作する手順をまとめました。
なるべくそのまま使えるように記載したつもりですが不明な点があれば、コメントいただければと。
Spannerは1ノードでもお高いと聞きますし、とりあえずPHPで検証してみたいっていう方のお役にも立てたら嬉しいです!
※今回の環境構築は、Docker Desktop for Mac上で行っています。# ローカルのSpanner環境の構築
以下ブログの通り、githubからcloneしてきて、`docker-compose up -d`するのみw
ローカル環境用のdocker-composeを公開してくれている方と、wrenchを公開しているメルカリの方に感謝です!![Cloud Spannerのローカル開発環境をdocker-composeでサクッと立ち上げる | フューチャー技術ブログ](https://future-architect.github.io/articles/20210323/)
# Laravel環境構築
今回は普段良く利用してい
Chromeのページネーションと同じ動作するページネーションが実装できたっぽい
####ページネーションを作ったきっかけ
PHPでページネーションを自作せよ!という課題が出ました。
簡単なページネーションのやり方はネットに大量に上がってるし、何か自分で考えた機能を一つ持たせてみたいと思い、参考にできるアイデアを探しがてらChromeのページネーションをポチポチしていると
「Goooooooooogle」という風に「o」がページの数だけ連続して、表示されているページの部分だけ赤くなるのが面白かったので、Chromeのページネーションを実装できるかチャレンジしてみたところ、とりあえずは実装できたっぽいので、記録として記事にしておこうと思いました。##実装
まずページネーションで表示するページ数と1ページあたりのリソース数を定数で持ちます。
“`php
// ページネーションで表示するページ数
const RANGE = 10;// 1ページに表示するリソース数
const ITEM_COUNT = 5;
“`クエリパラメーターからページ数を取得し、ページング対象リソースの件数をSQLを発行し取得します。(SQLの記述は省略しています)
“`
「アプリケーションサーバ??」となったPHPerのお話
# はじめに
業務でアプリケーションサーバについて調べる機会があったので、備忘録としてまとめたいと思います。
バックエンドの言語の中でPHPしか触ったことがないので、アプリケーションサーバについて全く知りませんでした(言い訳)。# アプリケーションサーバ(APサーバ)とは
アプリケーションを実行するためのサーバのことです。
詳細は[こちらの記事](https://kitsune.blog/ap-server-summary)からお願いします。この記事を読むと* Web三層構造システム
* APサーバとWebサーバの違い
* PHPは、なぜAPサーバがなくても動くのかが理解できます。そして、これらを中心に検索すると面白い記事がたくさん出てきます。
### WebサーバとAPサーバの分離について
https://ja.stackoverflow.com/questions/18417/web%e3%82%b5%e3%83%bc%e3%83%90%e3%83%bc%e3%81%a8ap%e3%82%b5%e3%83%bc%e3%83%90%e3%81%ae%e5%88%86%e
【pythonメモ】回数指定のfor文(for .. in range)の使い方
#1.はじめに
様々なプログラミング言語で使われるforループ。
pythonでは回数指定のforが3種類ある。
今更だけど、どうにも使いずらいので自分用のメモとしてまとめてみた。#2.実行環境
OS:windows10
Python 3.8.10(jupyter notebook上で実行)
PHPはpaiza.ioで実行#3.for .. in range
###`パターン1)for 繰り返し変数 in range(N1)`
N1:指定回数
指定回数だけある処理を実行したい場合使える。“`python
for i in range(5):
print(“Loto6”)
“`
“`:出力結果
Loto6
Loto6
Loto6
Loto6
Loto6
“`
ただし繰り返し変数も利用したい場合は、その値は__0~N1-1__となることに注意が必要になる。“`python
for i in range (5):
print(“Loto6トライ:”+str(i)+”回目”)
“`“`:出力結果
Loto6トライ:0回目
Loto6トライ:1回目
[php] mysqli_fetch_array
https://www.php.net/manual/ja/mysqli-result.fetch-array.php
mysqli_result::fetch_array
mysqli_fetch_array結果セットから1行取得し、それを配列として返します。 値を取得した後は、この関数をコールするたびに結果セットの次の行の値を返します 結果セットに対して行がなければ、null を返します。
データを数値添字の 配列に格納することに加えて、この関数は 結果セットのフィールド名をキーとする連想配列にもデータを格納できます。
[php] mysqli_fetch_assoc
https://www.php.net/manual/ja/mysqli-result.fetch-assoc.php
mysqli_result::fetch_assoc
mysqli_fetch_assoc結果セットから1行取得し、それを連想配列として返します。 値を取得した後は、この関数をコールするたびに結果セットの次の行の値を返します。 もう結果セットに行がない場合には null を返します。
{GRAYCODE} ひと言掲示板を作る に挑戦してみる。
リファレンスサイト
mainサイト(お馴染みのサイトの備忘録です)
https://gray-code.com/php/make-the-board-vol1/
その他
https://qiita.com/hayato787/items/64c6ce30b872cee75e11
file関係
https://ysklog.net/php/7450.html
pdo関係(sqlite)
https://slash-mochi.net/?p=904
csv関係(そのままコピペしました)
https://qiita.com/ryo-futebol/items/8fe86267c099fed05594
https://tech.arms-soft.co.jp/entry/2019/10/23/090000
css関係
#メッセージをjsonファイルにして保存一覧表示
##
PHP mb_strlen(), strlen()の違い
現在、転職のために「PHP」を学習しているのでそこで学んだことを書いています。
間違い等もあると思いますがご了承ください。####mb_strlenとstrlenの違い
mb_strlen() = 引数に指定した文字列の長さを取得する。
strlen() = 引数に指定した文字列の長さをバイト数で取得する。
実際にコードを書いてみると下記のような結果になります。“`
$a = “おーい、お茶”;
$b = “abcdef”;echo mb_strlen($a); // 出力:6
echo strlen($a); // 出力:18echo mb_strlen($b); // 出力:6
echo strlen($b); // 出力:6“`
strlen(#array1)が18を出力するのは「エンコーディング」によるものだそうです。(日本語は2バイトだと思っていました。)
エンコーディングについてはこちらのサイトに書いてありましたので下記サイトを参考にしてみてください
【Laravel】最短で例外処理のcatchに落とすハゲホゲ
### 例外処理がちゃんと動くか確認したい
Laravelプロジェクトで開発を進める時に例外発生時に、ログを出したい。Slackに通知したい。メールを送りたい。フラッシュで返したいなど色々なケースがあると思います。
catch側の実装は済んだけど、実際にエラーを発生させて確認したい時どうしましょう。
DBをデッドロックさせますか、環境変数を変えますか、LANケーブル抜きますか。
いやいや、そんなに頑張る必要はないです。### やり方
以下ハゲホゲでめでたしめでたし。“`
try {
$hage = $hoge;
// 処理
} catch (\Exception $e) {
report($e);
// 例外処理
Log::debug(‘hagehoge’);
}
“`
### よくあるミス(?)
エラーは発生しているのに、catchしてくれないぞという時。catchの後のExceptionに
\が抜けていたら、namespaceの問題で以下に直すだけで落ちてくれる可能性が高い。かもしれない。“`
× } catch (Exception e
PHPとイスラエル ←便乗
この記事への便乗です。
– PHPとイスラエル
– https://qiita.com/jkr_2255/items/06f58bef9a9de96b88ba“`
2箇所ほど存在します。
“`3箇所目を紹介。(といっても、もはや昔話ですが)
# calendar モジュール
その昔、C言語文字列リテラルでヘブライ文字をそのまま入れてました。
なお、UTF−8 とかでなく ISO-8859-8 です。“`
/* names for leap (13-month) year */
char *JewishMonthHebNameLeap[14] =
{
“”,
“˙˘¯È”,
“Á˘ÂÔ”,
“ÎÒÏ”,
“Ë·˙”,
“˘·Ë”,
“‡„¯ ‡'”,
“‡„¯ ·'”,
“ÈÒÔ”,
“‡Èȯ”,
“ÒÈÂÔ”,
“˙ÓÂÊ”,
“‡·”,
“‡ÏÂÏ”
};/* names for regular year */
char *JewishMonthHebName[14] =
{
“”,
“˙˘¯È”,
“Á˘
プログラミング初学者が1ヶ月で得たスキルとコーディング以外のナレッジ
# はじめに
・本記事は、プログラミング初学者の私が神戸に来て__取り組んだこと__、そしてその中で__得たこと__をまとめる記事になります。# 取り組んだこと
##### 主に大きく分けて“`4つのカテゴリー“`になります。
>__Potfy.me ( チーム開発 )__
>__Laravel sail ( 個人開発 )__
>__Kobe Engineer’s Lab ( イベント運営 )__
>__Qiita へアウトプット__# 得たこと
### ・ Potfy.me ( チーム開発 )
—
“`Potfy.me では、ユーザー自身のポートフォリオを 「 下書き 」 と 「 公開 」 で保存できる機能を実装しました。また、ポートフォリオの編集画面で 「 下書き 」 「 公開 」 の切り替えをできるようにし、公開タブと下書きタブで表示するポートフォリオの切り替え、ポートフォリオ一覧画面では下書きポートフォリオは非表示の機能も実装しました。“`
公開タブ
![スクリーンショット 2022-01-28 19.32.32.png](https://qiita-
カラオケお役立ちアプリ制作記(制作中)
# 開発環境
– MAMP
– vscode
– Macbook Pro# 利用バージョン
– Laravel Framework 6.20.44
– php 7.4.27#1. プロジェクト作成
プロジェクト作成
`composer create-project –prefer-dist laravel/laravel karaoke_app “6.*”`#2. 認証機能作成
Laravel ui インストール
`composer require laravel/ui:^1.0 –dev`
認証機能周りを生成
`php artisan ui vue –auth`
各種ライブラリをインストールしてビルド
`npm install && npm run dev`
簡易サーバを立ち上げる
`php artisan serve`
認証機能が生成されているか(ポートは環境や設定によって異なるかも)をブラウザで確認
`http://127.0.0.1:8000/`#3. .envの編集
.envファイルを修正“`
APP_NAME=karaoke_app
DB_CO
例外処理は投球練習
# Exception
#### それ程頭が言い訳でもない人がプログラミングを理解する過程を書いてます。
Exceptionは基底クラスで、RuntimeExceptionやlogicExceptionが有り、それぞれ…
いや、分かりにくいな。となったので走り書きではありますがまとめてみた。
別にオブジェクト指向やクラスを理解していなくても読めるのでご安心を。例外処理は、
– データベースに接続した際に接続できなかったり
– バリデーションでエラーが起きているときなどに
こういうエラーが起きてるよ! とエラーの報告をしてもらって、
そのエラーをキャッチすることでどのようなエラーが起きているか探りやすくする仕組みです。“`PHP
try{
//この中に処理を書きます
}catch(Exception $e){
//エラーをキャッチした後に行う処理を書きます
}
“`#### 投球練習
野球だとピッチャーがボールを投げます。
→キャッチャーが受けますコレを例外を投げる
→例外をキャッチする
と置き換えて考えてみる。
パスワードのハッシュ化と比較
ハッシュ化する時→password_hash
ハッシュ化していないパスワードとハッシュ化後のパスワードが同値か調べる→password_verify
PHPでログイン機能
# ログイン機能
1. POSTされてきた値を確認する
2. 変数に格納
3. バリデーション
4. エラーが無ければ例外処理を用いてDB接続
5. SQLを準備(Emailが同じもののpasswordとidを取得する)
6. プリペアドステートメントで値を入れる
7. クエリを投げる
8. ログイン有効期限をセットする(ログイン保持にチェックがあれば30日に延長)
9. ユーザーIDと最終ログイン日時を入れる
10. マイページへ遷移
PHPでユーザー登録
# ユーザー登録の処理フロー
1. POST送信を確認する
2. POST送信されて来た値を変数に代入する
3. 各種バリデーションを行う
4. Email重複チェックはDBに接続し、同じEmailが登録されていないか確認する
4. 例外処理を用いてDB接続する
5. SQLを用意する
6. プリペアドステートメントで値を入れる。現在時刻は`date(‘Y-m-d H:i:s’)`として入れる
5. クエリがきちんと投げられていた場合、ログイン有効期限を1時間にし、最終ログイン日時を現在時刻に更新
6. SessionにユーザーIDや最終ログイン日時・ログイン有効期限を格納する
6. headerでマイページへ遷移
PHP ログアウト
1. session_destroyでSessionIDとそれに紐付くSession変数の中身を削除する
2. loginページへ遷移
PHP 退会機能
SessionにユーザーIDが入ってるので、そのユーザーIDをもとにDBに接続してdelete_flgを1にするだけ。
今回の場合は、user情報・退会するユーザーの登録商品・退会するユーザーのお気に入りを論理削除するので、
3つSQLが必要。
忘れやすいがよく使う PHPでログを取る方法
# ログの設定
`ini_set(‘log_errors’, ‘on’);`
ログを取るか`ini_set(‘error_log’, ‘php.log’);`
ログの出力ファイルを指定するログを吐かせる
`error_log(‘SUCCESS’);`