PHP関連のことを調べてみた2021年09月19日

PHP関連のことを調べてみた2021年09月19日

【Laravel】enumを使った方が良い場合、使ってはいけない場合

# はじめに
この記事ではタイトル通り、Laravelでenumを使える場合、使えない(非推奨の)場合を説明していきます。
本題に入る前に筆者の紹介を軽くすると、筆者はWeb系の企業で働いているインターン生です。実務でenum型を使う機会があったのですが、Laravelで扱うときに若干のクセがあり、そのクセをまとめようと考えました。
Laravelでenumを使うか迷っている方の参考になれば幸いです。
本題の部分だけ見たい方は[こちら](#enumを使える場合)

# enumとは何か
enumを使おうと思っているけどあまり詳しく知らないという方もいるかと思います。enumとはSQLのデータ型の一つで、挿入するデータを制限することができます。
詳しく説明されている記事があったので[こちら](https://qiita.com/igm50/items/8c9788d4ba5868642c69)を読んでからこの記事を読むことをお勧めします。

# enumのメリット
enumを使う一番のメリットはデータの取得・更新などが楽なことです。リレーションのためにテーブルを分ける必要がなくなり、デー

元記事を表示

Yahoo!のキーフレーズ抽出API(v2)のPHPサンプルプログラム

Yahooが提供するキーフレーズ抽出APIがありますが、つい最近V2にバージョンアップされました。このAPIを利用されている方も多いと思いますが、2022年1月末に廃止予定とのことで早急に移行しないとなりませんが、V1にあったPHPのサンプルプログラムがV2ではPythonのみとなっています。

いろいろ試行錯誤してサンプルプログラムを作りましたので公表します。
すでに利用している人向けのドキュメントですので「どうやったら利用できるか?」などの基本的な話はここでは取り扱いません。

# ソース

“`PHP






Document

元記事を表示

Google Fontが拡充されたので、Cloudinaryに全フォントファイルをアップロードする

#はじめに
最近、Google Fontsにたくさんの日本語フォントが追加になりました。[^2]
[^2]: https://fonts.google.com/?subset=japanese

画像加工のクラウドサービスCloudinaryで新しい日本語を使えるようにするために、全ファイルをアップロードしました。

その時に使ったスクリプトを共有します

#おさらい
Cloudnaryは画像を保存して配信するサービスです。画像を配信するときに、変形や文字入れの加工ができます。

[詳しくはこちらへ](https://qiita.com/kanaxx/items/7d88948c9f8f43cdf760)

Cloudinaryは文字入れ(オーバーレイ変換)をするときにフォントを指定することができるのですが、サポートされている日本語フォントがいまいちです。はっきり言ってしょぼいです。

フォントの種類が足りない場合は、フォントファイルをアップロードすることができるようになっています。[^1]
面倒なので、Google Fontsにある日本語フォントファイルを全部アップロードしてし

元記事を表示

Roundcubeでトラブル発生した場合にできる対応

AWSのEC2のマーケットプレイスでRoundcube by bitnamiというツールを入手しました。
WEBメールツールで非常に便利なのですが、接続不良などのトラブルを起こします。
こういったことの対処についてサポートしてくれそうなところがなくて困っているのですが
(AWSではマーケットプレイスのものはサポート外扱い)ようやく見つけました。

### サーバにまずはSSHでログイン

“`
ssh -i *** bitnami@XX.XX.XX.XX
“`

### 診断ツールを起動します。

“`
$ sudo /opt/bitnami/bndiagnostic-tool
—————————————————————————-
Welcome to the Bitnami Diagnostic tool.

—————————————————————————-
Please re

元記事を表示

laravel PHP-CS-Fixerを導入してみた PSR1 及び PSR2準拠のルール設定

# 目的

– すでに紹介されているPHP-CS-Fixerの導入方法を見ながら実際にインストールしてみてソース整形を実施してみたのでまとめる

# ご注意

– 本記事は下記で紹介されている内容を参考にPHP-CS-Fixerを導入したときのメモです。
– [https://qiita.com/suin/items/4242aec018d086312fe7](https://qiita.com/suin/items/4242aec018d086312fe7)
– [https://qiita.com/ucan-lab/items/7d4180462347a42009d5](https://qiita.com/ucan-lab/items/7d4180462347a42009d5)
– もともとの情報は参考にさせていただいた記事の筆者さんがまとめてくださったものです。

# 情報

– ハードウェア環境

| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.5) |
| ハー

元記事を表示

【PHP】for文を使って配列に値を格納する

以前作ったポートフォリオアプリの、レコードを作成してDBへ保存する処理。

https://qiita.com/hinako_n/items/d9b7c51972c18556a1e7

このコードをふと見ていると、繰り返しの処理がベタ書きされていて気になりました。
for文を使って短縮できたので、メモしておきます。

##元のコード
一気に複数の値をDBに保存するため、配列に値をまとめてinsertメソッドを使用しています。

**※insertメソッドの注意点**
タイムスタンプがnullとなる、複数代入から保護されていないのでセキュリティ的に危険というデメリットもあります。今回はユーザーからの入力の可能性がないので、insertメソッドを使うこととします。

“`php
$players = [
[“name” => null,
“room_id” => $room_id,
“user_id” => 1],
[“name” => null,
“room_id” => $room_i

元記事を表示

WordPressの「エディターで予期しないエラーが発生しました」を解決する

#はじめに
Wordpressでは,以下のエラーがよく出るみたいです.
私の場合は,固定ページを設定において,ページ属性の設定項目を開こうとすると
以下のように「エディターで予期しないエラーが発生しました」とエラーが出ます.
![wordpress_error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/262828/3353d274-f8e9-9c85-1960-6a33a603ba3a.png)
「復旧を試みる」をクリックしても,なにも反応しませんでした.

調べてみると,固定ページにおいて,「公開」もしくは「更新」をすると,
このエラーに陥ることもあるみたいです.
代表的な解決方法としては,ブラウザのキャッシュの消去をすると治るみたいですが,
キャッシュをリフレッシュしても,同じところでコケたので,備忘録として解決方法を残します.

###環境
・Ubuntu : 18.04
・Wordpress : 5.8.1
・php : 7.3.30
・nginx : 1.14.0

#解決方法
/etc

元記事を表示

【Laravel】コレクション型の空値

#はじめに#
 LaravelのEloquentを用いてgetメソッドやfirstメソッドで値を取得すると戻り値はCollection型になります。値がある時とない時で条件分岐させようとしてもemptyやissetなどでは判定ができません。

#isEmptyメソッド#
 Collection型の空値の判定にはisEmptyメソッドを使います。
公式ドキュメントを見てみましょう。
>isEmptyメソッドはコレクションが空の場合にtrueを返します。そうでなければfalseを返します。

実際には下記のように使います。

“`controller.php
public function judge()
{
$user_id = \Auth::id();
$comments = Comment::where(‘user_id’,$user_id)->get();
return view(‘view’,compact(‘comments’));
}
“`

“`view.php
//・・・略
@if($comments->isEmpty())

コメ

元記事を表示

PHPでかんたんな自作言語のコンパイラを書いた

[ブログに書いていたもの](https://memo88.hatenablog.com/entry/2020/09/18/193844)を引っ越してきました。元の記事公開日は 2020-09-18 です。

やっつけなので汚いです。ライフゲームのコンパイルが通ったのでヨシ、という程度の雑なものです。

https://github.com/sonota88/vm2gol-v2-php

# 移植元

自作言語の概要などについてもこちらを参照してください。

https://memo88.hatenablog.com/entry/2020/05/

元記事を表示

?インターネット老人?のためのホームページ(死語)リフォーム術

# この記事の対象
~00年代初頭にホームページ作っていて、現在放置中……という人、あるいはそういう人から依頼されて昔のフォルダを受け取った人が対象になります。
スキル的にはjQuery(Bootstrap)なら何とか勢~(バックにも関心がある)SPA初心者勢を想定しています。

# 手順
## 1.本当に自前でやる必要があるか考える
Webサービスが氾濫する現在、現在サイトにある機能を本当に自前で提供する必要があるか考えましょう。

### 日記
まぁ**最有力はブログへの移行**ですね。黒歴史を消す人も多いですが、逆に過去の日記みたいなもんで、残しておきたいと思う人もいるかと思います。ていうかホームページは放置してて日記にあたる部分だけ流石にブログに移行してる人も多いかと思いますね。
何らかの理由でブログに移行できない、不適切だと思う場合はスクレイピングして文章データをmdやらjsonに纏めて、今流行りのGatsbyあたりに手を出すのも良いのではないでしょうか。

### イラスト
これは現行のシェアとしてもシステム的にも**[pixiv](https://www.pixiv.ne

元記事を表示

タイトル

テスト本文

元記事を表示

タイトル

テスト本文

元記事を表示

タイトル

テスト本文

元記事を表示

【PHP】array_unique関数で配列の重複したデータを削除

#array_unique関数#
array_unique関数を使うことで、配列の重複したデータを削除することが出来ます。

“`array_unique.php
$fruits = [‘apple’,’lemon’,’strawberry’,’apple’,’orange’,’strawberry’,’lemomn’];
$result = array_unique($fruits);
var_dump($result);
“`

“`result
array(5) {
[0]=>
string(5) “apple”
[1]=>
string(5) “lemon”
[2]=>
string(10) “strawberry”
[4]=>
string(6) “orange”
[6]=>
string(6) “lemomn”
}
“`

このように重複している値を削除することが出来ました!

元記事を表示

Laravel コントローラをtinkerから実行する

tinkerからコントローラを実行できると便利なので、その方法をご紹介します。

## 環境

– PHP: 8.0.10
– Laravel: 8.58.0

## モデル、コントローラを作る

“`shell
$ php artisan make:model Book
$ php artisan make:controller BookController
“`

– `app/Models/Book.php`
– `app/Http/Controllers/BookController.php`

### index: 引数なしのメソッドを実行する

“`php:app/Http/Controllers/BookController.php

元記事を表示

Carbon 生成の罠

#はじめに

何度か php の carbon を利用している際に気付かずに起こしていた事象を、備忘録として記載します。

#null を入れて生成

ユーザーの入力等をカーボンに変換する際は、

“`
new Carbon($input)
Carbon::parse($input)
“`

とすることが多いと思いますが、この`$input`が空文字、null、空配列、falseなどの場合、生成されるインスタンスの日時は実行時点の日時になります。
入力をCrbonに変換してDBに登録、といった実装を注意せずに行うと、
 `null`等を入れて生成
   ↓
 実行時点での日付で登録
といったコンボがエラーが起きずに発生し、後で入力していないのに日付が入っているといった事態になります。

#対策

`is_null()`を用いて`null`かどうかを判定するのも良いですが、空文字、空配列、false の回避も考えると、`empty()`の方が広範な判定を行うことができます。

大まかな構文としては以下の通りです。

“`
$datetime = empty($input) ? nu

元記事を表示

curl_execの使い方

#とりあえず結果

“`curl_exec.php
‘GET’,
CURLOPT_URL => ‘api url’,
CURLOPT_HTTPHEADER => [‘X-API-Key: api key’],
CURLOPT_RETURNTRANSFER => true,
CURLOPT_TIMEOUT => 3
];
curl_setopt_array($ch, $options);

$response = curl_exec($ch);

$statusCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);
$result = json_decode($response, true);

curl_close($ch);

var_dump($statusCode);
var_dump($result);
“`

curl_execでapiを叩きたいとの話があ

元記事を表示

504 Gateway timeout 解決方法 on AWS

# 504 Gateway timeout 解決方法 on AWS

Webシステムで、バックエンドで少々長い時間が掛かる処理が終わるまで待つ必要があるケースがありますが、デフォルト設定だと、大体60秒程でタイムアウトとなり、「504 Gateway timeout」が発生するという事が多いです。

AWSで、ELB->Apache->PHPと言うよくある構成で、どの様に設定して行くと良いかをメモがてら残しておきます。

## 構成

クライアント(ブラウザ) -> ELB(ALB) -> WEB(Apache -> PHP) -> DB(RDS on MySQL)

今回、DBは割愛します。

## タイムアウト調整

ユースケース次第ですがAWSのナレッジでは、KeepAliveTimeoutなどをロードバランサーのアイドルタイムアウトよりも長いキープアライブタイムアウトにするように推奨されています。
https://aws.amazon.com/jp/premiumsupport/knowledge-center/apache-backend-elb/

例)無限にはできませんの

元記事を表示

フレームワーク無しHTMLテーブルをBootstrapで再現する場合

過去に作ったフレームワーク無しのHTMLテーブルを、Bootstrap(5)で再現しようとすると、
過去、手抜き、つまりborder-bottom: noneなどで罫線を消してセル結合っぽくしている場合、
(HTML的にはダメですが、ループを回してDBを表示する場合めんどくさくてつい…)
融通がきかなくて困る場合があります(した)。

##こういうテーブルです
![テーブルサンプル.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/458322/95270db3-5f40-70b3-90fe-3c011720d443.png)

##手抜きをBootstrapで再現
###HTML

* 罫線無しのテーブル(table-borderless)にして、個別にborderを設定する
* 同列の前行が違う値だったら、border-topを追加設定する

“`html

【PHP】平日のみの日付リストを日数指定で取得

土日祝日を除いた平日の日付リストを日数指定で取得します。
祝日判定には以前作成した[祝日取得クラス](https://qiita.com/akebi_mh/items/82cf4dbe70ac9913beb1)を利用してみました。

“`php:weekdays.php
holiday = new Holiday;
$this->startDate = new DateTimeImmutable;
}

public function setStartDate($ymd = ‘now’) {
$this->startDate = new DateTimeImmutable($ymd);
}

private function isHoliday($date) {