PHP関連のことを調べてみた2022年06月24日

PHP関連のことを調べてみた2022年06月24日

LaravelでAPI仕様書(OAS)と実装の乖離を簡単に防ぐならSpectatorがおすすめ!

皆さんはAPI仕様書(OAS)と実装の乖離を防ぐためにどのような対応をされていますでしょうか?

– コードからOASを自動生成することで乖離を防ぐ
– OASからコードを自動生成することで乖離を防ぐ
– PRレビュー時に目視で乖離を防ぐ
– 自作の検証ツールで乖離を防ぐ

などなどいくつかのアプローチが考えられるのかなと思います。

良い感じに自動生成ができれば乖離の心配はないかもしれませんが、少なからず手動作業が入る場合は何らか乖離を防ぐ検証が必要になると思います。

今回は、Laravelでそんなシーンに出くわした際にぜひ検討いただきたい [Spectator](https://github.com/hotmeteor/spectator) というツールを紹介させていただきます。

# 前提

php: 8.1.6
laravel/framework: 9.17.0
hotmeteor/spectator: 1.5.0
サンプルコード: https://github.com/TsukasaGR/laravel-spectator-sample

# Spectator is 何?

元記事を表示

フォルダを指定してマイグレーションファイルを作成したい

マイグレーションファイルを作成する際にフォルダを指定して行う必要があり、その方法を調査したため、備忘録としてメモしておきます。

# 必要になった理由

ファイル構成は次のとおり。
“`
– bootstrap/
– config/
– core/
– database/
– migrations/
– develops/
– modules/
– Test

– database/
– Migrations/ ← ここのフォルダを指定したい!

– public/
– resources/
– routes/
– strage/
– tests/
– vue/
“`

今回のプロジェクトは上記のようなファイル構成となっており、プロジェクトのトップで通常のマイグレーションファイルを作成するコマンドを入力しても、
希望の`/module/Test/database/Migrations`配下にマイグレーションファイルを作成できません。

それなら、`/module/Test`まで移動して、通常のマイグレーションファイルを作成するコマンドを入力すれ

元記事を表示

Laravel UI登録画面で画像保存処理を実装


# 概要
Laravel UI導入後に登録画面に画像保存処理を実装したので記録します。
![スクリーンショット 2022-06-23 23.59.17.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2724488/5592c7d7-e3f2-6e0a-dd89-97ea319a6f85.png)


1. [バージョン](#Chapter1)
1. [View](#Chapter2)
1. [Controller](#Chapter3)



# バージョン
Laravel Framework 9.6.0
PHP 8.1.0
Laravel UI 8.5.19
bootstrap導入済み
シンボリックリンク作成済み


# View
formタグにenctype=”multipart/form-data”

元記事を表示

Macにiterm2を入れてみた!

Macでデフォルト以外のターミナルが使いたくてiterm2をインストールをしてみました。

コマンドとかが全くわからなかったのでとりあえず調査。
最初に見た記事のコマンドを叩くと、以下のエラーメッセージが。。

$brew cask install iterm2
Error: Unknown command: cask

いくつか調べたところ、cskコマンドの使い方が変わったらしいことが判明。
コマンドではなく、オプションに変わったらしい。
cskコマンドすら知らなかったのに、
なんでオプションになってるんや。。と悲鳴を上げつつ以下のコマンドを実行。

$ brew install iterm2 --cask

なんやかんや、ぶわーっとメッセージが出力され、インストール成功!!

iterm2 was successfully installed!

以下の記述の「iterm2」の部分を
インストールしたいアプリ名に変更すれば応用可能だと思われる。

$ brew install iterm2 --cask
元記事を表示

【PHP基礎⑯】ループ処理の終了-do…while文

[問題]
整数値を入力させ、入力値が0でなければ値を表示かつ再度入力してループ処理を続け、0であれば終了するプログラムを作成しなさい。

# コード
```php
do{
$a = intval(fgets(STDIN));
echo $a, PHP_EOL;
}while($a <> 0);
```

↓↓↓

5
-6
0
1  と入力

↓↓↓

# 結果
```
5
-6
0
```

☆do…while文
指定した条件がどうであれ、初回は必ず実行するという繰り返し処理。
2回目以降は、条件を満たす限りずっと処理を繰り返す。

$a = ○ ← 初期値。あれば入れる。
do{
 条件を満たす場合に行う処理;
 増減式;  ← あれば入れる。
}while(条件)

元記事を表示

機種依存文字を置換 PHP

```

元記事を表示

PHP7.4で、$_SESSIONとACPuはどのようにキャッシュされるのか

|[../](https://qiita.com/taconana/items/3f5424f9abfc755772c2) |
|---|

PHP7.4での値渡しと参照渡しについて、もう少し調べてみた。`$_SESSION`や`ACPu`で保持した場合、値はコピーされるのか、参照として取得できるのか。

前回、「[PHPのforeachでは、多くの場合、参照渡しの方がいい?](https://qiita.com/taconana/items/e1a568de0b39b60c4dce)」でforeachにおいて、配列要素がユーザー定義のクラスをインスタンス化したオブジェクトの場合、値渡しにしても参照渡しになることを確認した。もちろん、配列要素が整数などプリミティブな型、文字列、配列の場合、値渡しにするとコピーされることも確認した。

## foreachでの値渡しと参照渡しの確認

再度、復習を兼ねて確認しておく。ユーザー定義のクラスをインスタンス化したオブジェクトとして、Userクラスを使う。`$name`という属性を持たせている。以下の4つが確認できる。

- 配列要素がUser

元記事を表示

【PHP基礎⑮】ループ処理-5. 2ずつカウントアップ

[問題]
整数値を入力させ、0から入力値を超えない値まで2ずつ増やして表示するプログラムを作成しなさい。

# コード
```php
$a = intval(fgets(STDIN));
for($m = 0; $m < $a; $m = $m+2){ echo "$m \n"; } ``` ↓「10」と入力 # 結果 ``` 0 2 4 6 8 ``` ↓では、入力値から0を下回らない値まで2ずつ減らす場合は? ```php $a = intval(fgets(STDIN)); for($m = $a; $m > 0; $m = $m-2){
echo "$m \n";
}
```

結果
```
10
8
6
4
2
```

☆2ずつ減らす場合の増減式は、
 $m = $m-2 または$m-=2

元記事を表示

IoTのプロダクトを作りたくてG's ACADEMYに入った変わり者の制作記録

# 始めに、
はじめまして、 G's ACADEMY(ジーズアカデミー)TOKYO LAB12期のI_Tetsuと申します。
この記事では私がジーズアカデミー LABコース6ヶ月間で制作したプロダクトの中から、
JS選手権、PHP選手権、卒業制作で制作したプロダクトを紹介したいと思います。
(JS選手権、PHP選手権とはそれぞれ一通りの講義の後に行われる選手権で、そこまでに学んだことを活かして制作したプロダクトを発表し、発表の際に投票で順位まで決める発表の機会です。)
※ジーズアカデミーでの講義内容や経験談等は他の方がQiitaやnoteで書かれているのでそちらを参考にしてください。
ykiyoshimaさんのnote:[ジーズアカデミー現役生が前半戦(BOOTCAMPフェーズ)を終えて感じたこと](https://note.com/ykiyoshima/n/n03c5d256d449)

前提として、ジーズアカデミーでは**IoT**に関する講義は**ありません。**

元記事を表示

【Zoom API】クラウド録画をPHPで一括ダウンロードする

この記事は、[「Qiita Engineer Festa 2022」](https://qiita.com/official-campaigns/engineer-festa/2022)に参加するために執筆した記事です。

[**Zoom API/SDKを使ってみよう! - Qiita**](https://qiita.com/official-events/86d8555146e1b14fef24)
'**Zoom APIを実装してみた**'のテーマで執筆します!

# 環境
- PHP8.0
- Composer 2.3.5

# こんな人に読んでほしい
- Zoomにクラウド録画が溜まってきた
- 期間を指定して、ローカルに一括でダウンロードしたい
- ダウンロード時にフォルダ作成、ファイル名もわかりやすく付けたい

# ごあいさつ
はじめまして。KeiOTNです。福岡の小さな会社でコード書いたり事務作業したり何でも屋さんしています。プログラミング歴は約1年。実は、Qiita記事を投稿するのは初めてです。
「アウトプットしなければ、、」と思いつつきちんと記事にまとめることをしてこ

元記事を表示

オリジナルアプリのデータベース登録で、createを使った。

オリジナルアプリのデータベース登録で、悩みに悩み試しにcreateを使ってみることにしました。

# モデルにfillable属性を追加
```Playerdata.php

元記事を表示

【Zoom API】クラウド録画をPHP curlでダウンロードする(Postman併用)

# 環境
PHP 8.0

# 準備
### 1. JWTトークン発行
[Zoomマーケットプレイス](https://marketplace.zoom.us/)でJWTトークンを発行してください。
私が参考にさせていただいた記事は[こちら](https://qiita.com/yosuke-sawamura/items/d8ec07ac8b7b0335a22b)です。

定期的に動かす場合は、プログラム側でJWTトークン生成した方が良いです。当初、生成する方針で進めていましたが、エラー解消できず、今回はZoomマーケットプレイスから発行しました。
参考: [https://qiita.com/gentuki/items/d64f15447cb556eafd3b](https://qiita.com/gentuki/items/d64f15447cb556eafd3b)

### 2. ZoomユーザーIDを取得
postmanを使用してユーザーIDを確認しました。postmanの使用方法については省略します。
[ZoomAPIテンプレート](https://www.postman.c

元記事を表示

php で csv を読み込む上での備忘録

# はじめに

仕事で Laravel 内でcsv を読み込むコードを作成したのでその上で知ったことに関して備忘録代わりにこちらで記載しておきます。

# Shift-JIS な CSV を読み込む

windows 向けを前提とした CSV の場合、 **Shift-JIS** の CSV を扱うことになるかと思います。

その際、php 側は utf-8 で動いているような状態であるなら、当然ながら文字コードの変換が必要になります。

php において文字コードの変換の手法はいくつか存在しますが、保存されているファイルを読み込むような場合においては、以下の様に書くことで一行で文字コードの変換フィルターをかけたうえで読み込むことができます。

```php
$path = '(本来のCSVファイルのパス)';
$file = new \SplFileObject('php://filter/read=convert.iconv.cp932.utf-8/resource=' . $path);
```

```php://filter``` については **php 入出力ストリーム*

元記事を表示

【PHP】期間を指定すると、月初と月末を返してくれる関数を作ったよ

# 環境
php 8.0
# この記事の内容
開始年月YYYY-mmと終了年月YYYY-mmを渡すと、月初日と月末日を配列で返す関数をPHPで作りました。
```php:例
//例えばこんな値を渡すと
$from = '2021-04';
$to = '2022-03';

//こんな配列が返ってきます
[
['2021-04-01','2021-04-30'],
['2021-05-01','2021-05-31'],
['2021-06-01','2021-06-30'],
['2021-07-01','2021-07-31'],
['2021-08-01','2021-08-31'],
['2021-09-01','2021-09-30'],
['2021-10-01','2021-10-31'],
['2021-11-01','2021-11-30'],
['2021-12-01','2021-12-31'],
['2022-01-01','2022-01-31'],
['2022-02-0

元記事を表示

【PHP基礎⑭】ループ処理-4.カウントダウン

[問題]
整数値を入力させ、入力値から0まで数を1ずつ減らして表示するプログラムを作成しなさい。
なお、入力値に0以下の値を入力した場合は考慮しなくてもよい。

# コード
```php
$a = intval(fgets(STDIN));
for($m = $a; $m >= 0; $m--){
echo "$m \n";
}
```

↓「7」と入力

# 結果
```
7
6
5
4
3
2
1
0
```

☆1ずつ減らす→ $m--

元記事を表示

【PHP基礎⑬】ループ処理-3.カウントアップ

[問題]
整数値を入力させ、0から入力値まで数を1ずつ増やして表示するプログラムを作成しなさい。
なお、入力値に0以下の値を入力した場合は考慮しなくてもよい。

# コード
```php
$a = intval(fgets(STDIN));
for($m = 0; $m <= $a; $m++){ echo "$m \n"; } ``` ↓「7」と入力 # 結果 ``` 0 1 2 3 4 5 6 7 ```

元記事を表示

【PHP基礎⑫】ループ処理-2

[問題]
整数値を入力させ、その値の回数だけHello Ruki!を繰り返して表示するプログラムを作成しなさい。

# コード
```php
$a = intval(fgets(STDIN));
for($m = 1; $m <= $a; $m++){ echo 'Hello Ruki!',PHP_EOL; } ``` ↓「5」と入力 # 結果 ``` Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! Hello Ruki! ``` ☆$m++は$m=$m+1と同じなので、  2ずつ増やしたい時は$m = $m+2とする。  または、$m+=2 でもOK。 ↓ 2ずつ増やした場合(入力値は「5」) ```php $a = intval(fgets(STDIN)); for($m = 1; $m <= $a; $m = $m+2){ echo 'Hello Ruki!',PHP_EOL; } ``` 結果 ``` Hello Ruki! Hello Ruki! Hello Ruki! ```

元記事を表示

dockerを使ってサクッとPHPとMySQL環境を手に入れる

ちょっと何かを試したいときdockerは便利です。
環境構築と破棄を気軽にできるからです。
というわけで今回は、dockerでサクッと作れるPHPとMySQL環境を作ってみようと思います。
何かを検証したいときにこういった環境を手軽に作れると時短になるので便利です。

# ディレクトリ構成
```
./
│ docker-compose.yml

├─app
│ └─htdocs
│ index.php

└─docker
├─db
│ │ Dockerfile
│ │ my.cnf
│ │
│ └─init
│ 1.create-db.sql
│ 2.grant-user.sql
│ 3.create-table.sql
│ 4.insert-data.sql

└─web
Dockerfile
php.ini
```

# 各ファイルの説

元記事を表示

【Laravel】Mailable jsonを受け取りメールを送信するAPIを作る

Mailableを使ったメール送信方法を試してみました。
今回は外部から以下に記述するJSONをPOSTで受け取り、JSONに記述されているメールアドレス(email)宛に内容(name, body)をメール本文に記述して送信するというAPIを作成します。GmailのSMTPサーバーを使用します。

#### 受け取るJSONファイル
```json:json
{
"name":"example name",
"email":"target@xxxxxx.com", //送り先のアドレス
"body":"test body"
}
```

## .env の編集
.envファイルにGmailのSMTPサーバーを使う設定を行います。
事前にGmailのアプリパスワードを生成する必要があります。
参考: https://pc-karuma.net/google-account-generate-app-password/

```
MAIL_DRIVER=smtp
MAIL_HOST=smtp.gmail.com
MAIL_PORT=587
MAIL_USERNAME=xxxx

元記事を表示

オリジナルアプリ作成進捗(スクレイピング処理記述もあと少し)

オリジナルアプリ作成も終盤に入り、スクレイピング処理の記述ももう少しのところまで来ています。

# スクレイピング処理のコードはこんな感じです。
```ScrapingController.php
request('GET', 'https://baseball.yahoo.co.jp/npb/teams/3/memberlist?kind=p');
$info = $crawler->filter('.bb-playerTable__row')->eac

元記事を表示

OTHERカテゴリの最新記事