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

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

stechstudio/laravel-zipstreamでファイル名に日本語を使えるようにする。

stechstudio/laravel-zipstream(v4.8)でファイル名に日本語を使えるようにする方法について記載。

stechstudio/laravel-zipstreamdeを使ってzipファイル保存するとファイル名に日本語が入っている場合、日本語名が消える。


1_日本語file.pdf

1_file.pdf

以下のファイルを確認すると、ここでStr::asciiで文字コードをASCIIに変換しているので、日本語が消えている模様。
vendor\\stechstudio\\laravel-zipstream\\src\\Models\\File.php

“`

    /**
* @return string
*/
public function getZipPath(): string
{
$path = ltrim(preg_replace(‘|/{2,}|’, ‘/’, $this->zipPath), ‘/’);

return config(‘zipstream.fi

元記事を表示

PG見聞録 ~PHP編 メール送信~

技術書をペラペラと見てたらメール送信のための関数があって面白いなあと思って読んでみました。
こんな時間に読んだことを後悔しつつも書いております(笑)
日本語でメールを送る場合もmbを付けるというのは変わらんようです。
もしmbなしの場合は文字エンコードの変換を自前で設定すればいいようですが、mb推奨とのこと。

mb_send_mail関数

引数に渡す変数の構成としては誰しも使ったことのあるメールの中身ですね。
LINEしか使ったことないからわかんないなんて言わないでください。

“`php
// メールの構成情報を設定
$to = ‘example@example.com’;
$subject = ‘test mail’;
$body = ‘Hello!this is test mail\n Howdy?’;
$headers = [
‘From’ => ‘test@test.com’,
‘Cc’ => ‘user01@example.com’,
‘X-Mailer’ =

元記事を表示

ライブ会場の座席検索サービス

今回、ポートフォリオとして**ライブ会場の座席検索サービス**を作ったので、少し解説します。

# 目次

[1.作った経緯](#1-作った経緯)
[2.実際のページ](#2-実際のページ)
[3.使用技術](#3-使用技術)
[4.工夫した点](#4-工夫した点)
[5.苦労した点](#5-苦労した点)
[6.これからの課題](#6-これからの課題)

# 1. 作った経緯

僕はよくアーティストのライブに行くのですが、チケットの席番号を見て毎回思うことがありまして、**「自分の席の位置がよくわからない」** ということです。

**特にスタンド席などは、会場全体を囲むように色々な方向に席があり、なおかつ 2階,3階とフロアも分かれているので、会場内で迷ってしまうこともあると思います。**

そんな悩みを解決するために今回作ったのが、**ライブ会場の座席検索サービス**です。
意外とありそうで無いサービスだったので、**だったら作ってしまおう!!** ということで作ってみました。

# 2. 実際のページ

[ライブ座席検索](http://www.search-venue-seat

元記事を表示

PG見聞録 ~PHP編 文字列操作関数2~

引き続き文字列の操作について深堀していきます。
動物の名前は飼ってる犬と知り合いの猫と実家の猫です。

explode,mb_strpos,str_contains

“`php

元記事を表示

Eloquent のイベントをインスタンスメソッドに

## クロージャを使用したイベント定義

Eloquent モデルにイベントを直接記述する手段として、Laravel ドキュメントには「クロージャの使用」として例示されている。

“`php

元記事を表示

オリジナルアプリ作成を通して

オリジナルアプリ作成を通しての進捗や心境をお伝えします。

# オリジナルアプリ概要
プロ野球チーム(DeNA)の選手の成績表示アプリ(通算型)
## アプリの動作
①プロ野球サイト(ヤフー)からチーム情報を取得(スクレイピング)
②取得したデータをデータベースに保存後、トップページに選手一覧を表示させる。(seederを使用)
③選手一覧画面から投手・打者別の画面に遷移
## 情報更新
情報は固定ではないので(日々更新)、herokuでアプリが落ちないように設定。(今後実装)
## 成績
成績については、すべて計算式で指定。
## ユーザー操作
特に、ユーザー登録などのページは作る予定はなく、誰でも見ることが出来るようにする。

# 心境
seederの記述が分からず、迷っています。あとは後に必要になるスクレイピングの記述も今のところ考えていないので、スクールの講師の人と一緒に考えていくつもりです。

元記事を表示

PHPには0とfalseを返す標準関数がある

## はじめに
PHPでは、値の比較をする場合は下記の比較演算子を使うことが多いと思います。
この書き方では**正しい処理ができない標準関数**があります。
“`php:sample.php
$a == true;
test() != false;
!test()
“`

## 注意点
PHPの関数には、**エラーが発生した場合**に`false`を返すケース
処理に該当しない場合に`0`を返すパターンがあります。
この場合の比較には、`===`演算子を活用しましょう。

> [**preg_match**](https://www.php.net/manual/ja/function.preg-match.php)
> (PHP 4, PHP 5, PHP 7, PHP 8)
>
>preg_match() は、pattern が指定した subject に**マッチした場合に1**を返します。
**マッチしなかった場合は 0** を返します。 **失敗した場合にfalse**を返します
>
> **警告**
> この関数は論理値 false を返す可能性がありますが、fal

元記事を表示

PG見聞録 ~PHP編 文字列関数1~

どうでもいいですけどphpって大文字か小文字どっちなんでしょう。
ということで文字列を操作する関数をいくつか書いていきます!

文字列関数その1

文字列を操作する関数だけでも多々あります。
文字列の長さや数を数えたり、バイト数を数えたり
大文字小文字に変換したり、検索したり、置き換えたりもできます
文字に関してはデジタルデータになると少しややこしいところがありまして
半角英数字は1バイト、日本語は全角なので2バイトになります
さらにはUTF-8やJISコードなど文字コードでもバイト数の数え方が変わってきます。

“`php

元記事を表示

PG見聞録 ~php編 組み込み関数~

関数とは…

今日から主な学習テーマとして関数について深堀していこうと思います。
PHPの組み込み関数(ビルトイン関数や内部関数ともいう)、ユーザー定義関数ですね。

まずは「関数とは」ということですが
”何かしらの入力(パラメータ)を与え、予め決められた処理を行い結果を返す仕組みのこと。
パーツがパラメータ、組み立てる仕組みが関数、返ってきた結果が車みたいな感じですね。
ベルトコンベアでういーんてパーツが運ばれて機械に入っていって組み立てて車が完成するみたいな流れを想像すると分かりやすいでしょうか。
この時のパーツを引数、車を戻り値といいます。
PHPではもともといろんな関数が用意されてますね。
var_dump,print_r,defineなどなど、多くの機能が関数として用意されており、それらを呼びだすだけでプログラムが書けちゃいます。
この直感的に書けちゃうところがPHPの人気の理由の一つでしょうか。賛否ありますが自分は好きです。ちなみにifやforなどは制御構文といって関数ではないです。

元記事を表示

【Laravel】クエリビルダ/whereIn/whereHasを使った情報取得

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## リレーション先の条件での絞り込み

organization -> user -> post
(->は1対多の関係)

同じ“`organization“`に所属する“`user“`の“`post“`一覧を最新順に表示したい。

### 書き方①

“`php
$orgUsersIds = User::where(‘organization_id’, $user->organization_id)
->with(‘organization’)
->pluck(‘id’)
->toArray();
Post::whereIn(‘user_id’, $orgUsersIds)
->latest();
->paginate(25);
“`

“`SQL
array:3 [
0 => array:3 [
“query”

元記事を表示

【Laravel】socialiteとsanctumを使った新規登録・ログイン機能

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## 新規登録・ログインの流れ
Slackに近い新規登録・ログイン機能の実装をやりたかった。

“`
Googleアカウントでログイン
(未登録の場合)
->Googleアカウントの名前とメールアドレスで自動的に新規登録される
->トークンが発行される
->ログイン

(登録済みの場合)
->トークンが発行される
->ログイン
“`

## 実装

“`/auth/google/redirect“`にアクセスしたら“`/auth/google/callback“`にリダイレクトされる。

“`routes/web.php
Route::get(‘/auth/google/redirect’, function () {
return Socialite::driver(‘google’)->redirect();
});

Route::controller(OAuthController::class)->group(function() {
Route::get(‘/auth/google

元記事を表示

Bootstrap 基礎知識・基礎コード

## 本記事の内容
Bootstapについて最低限の理解を得るために必要な知識、および簡単なコード例を記載します

なお、各リンクは以下の公式ドキュメント該当箇所につなげているので、ぜひそちらも参考にしてください

https://getbootstrap.jp/

## 基礎コード

### 両端に余白を作り要素を中央にまとめる

“`html

“`

### 要素を両端に配置する

“`html

~~~
~~~~

“`

– class属性が付与できるものであればなんでもいい(formタグとか)
– class=”row”の中にclass=”col~~”を記述することは絶対条件

### グリッドを用いた中央寄せ

“`html

“`

– まず

元記事を表示

PHP 文字列検索 str_starts_with()

# 概要

– PHPの文字列検索組み込み関数のstr_starts_with()を簡単にまとめる。

# 前提

– 筆者は下記を用いて動作確認を行った。
– [https://paiza.io/ja](https://paiza.io/ja)

# 組み込み関数 str_starts_with()

– 公式ドキュメント
– [str_starts_with](https://www.php.net/manual/ja/function.str-starts-with.php)
– 検索対象文字列の最初に検索文字列が存在するかの確認
– 戻り値
– 検索対象文字列内の最初に検索文字列が存在する: trueを返却
– 検索対象文字列内の最初に検索文字列が存在しない: falseを返却
– 例

“`php
str_starts_with(検索対象文字列, 検索文字列);
“`

– 実例(trueになる例)

“`php

元記事を表示

【Laravel】認証系ライブラリの簡単まとめ

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## はじめに
Laravelでログイン機能やトークン認証をやろうとした際にそれぞれの違いがよく分からず、どれを使えばいいのか混乱したので簡単にまとめる。
(Laravelは標準で認証系のライブラリが揃ってるのがすごい。)
元々Railsをやってたので、Railsでいうとこれなんじゃないかと思うものも挙げてみた。

## socialite

– ソーシャルログイン(Googleログインetc)を簡単に実装できる
– 外部サービスのアクセストークン発行とかをやってくれる
– Railsでいう“`OmniAuth“`
https://github.com/omniauth/omniauth

https://readouble.com/laravel/9.x/ja/socialite.html

## sanctum

– APIトークンをユーザーに発行し、トークン認証をする
– Railsでいう“`devise-token-auth“`
https://github.com/lynndylanhurley/d

元記事を表示

PHP 文字列検索 str_contains()

# 概要

– PHPの文字列検索組み込み関数のstr_contains()を簡単にまとめる。

# 前提

– 筆者は下記を用いて動作確認を行った。
– [https://paiza.io/ja](https://paiza.io/ja)

# 組み込み関数 str_contains()

– 公式ドキュメント
– [str_contains](https://www.php.net/manual/ja/function.str-contains.php)
– 検索対象文字列内に検索文字列が存在するかの確認
– 戻り値
– 検索対象文字列内に検索文字列が存在する: trueを返却
– 検索対象文字列内に検索文字列が存在しない: falseを返却
– 例

“`php
str_contains(検索対象文字列, 検索文字列);
“`

– 実例

“`php

元記事を表示

【Laravel】 独自のカスタムコマンドを作成したときのテスト

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## 独自のカスタムコマンドを作成したときのテスト
下記コマンドを作成。
“`
php artisan command:sample
“`

“`php

元記事を表示

【Laravel】Fakerで日本語テキストを使う方法

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## Fakerで日本語テキスト

以前、テストを書くときはFakerを使おうという記事を書いた。

https://qiita.com/kat0/items/5b7190e61df0163ee3d7

テキストのFakerを見つけたが、デフォルトだと英語のテキストになってしまう。
(第一引数に文字数指定できる)

“`database/factories/PostFactory.php
public function definition()
{
return [
‘content’ => $this->faker->realText($maxNbChars = 35),
];
}
“`
Fakerを日本語に設定することで日本語テキストのFakerを入力できた。

“`config/app.php
‘faker_locale’ => ‘ja_JP’,
“`
ちなみに日本語バージョンでは『銀河鉄道の夜』の文章がランダムで表示される。

“`
“content”: “げしいよう

元記事を表示

【Laravel】配列のバリデーション

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## 配列のバリデーション
Requestクラスでバリデーションする際に
リクエストパラメータがarrayで、そのarrayの中身のバリデーションをしたいときはワイルドカードを使う。

“`php
$requestParams = [
‘post_ids’ => [1, 2, 3],
]
“`

“`php
public function rules(): array
{
return [
‘post_ids’ => ‘required | array’,
‘post_ids.*’ => ‘integer’,
];
}
“`

元記事を表示

PHPでESRI Shapefileを出力してみた

# 目的
 作ったシステムで、ESRI Shapefileの入出力機能を求められ、先日エクスポート(ダウンロード)機能を実装できたので、その時のメモになります。

# 前提
 php 7.4+Laravel 7、PostgreSQL 13+PostGISなCentOS7環境。たぶんubuntuでもいいと思う。
 本人Laravel学習道半ば(かつオブジェクト指向やMVCモデルも道半ば)なので、Fat Controller作りがち。

# ESRI Shapefileの入出力
 [PHP Shapefile \- Gaspare Sganga](https://gasparesganga.com/labs/php-shapefile/)を使わせていただきました。
 Shapefileのアップロードは、フォームで.shp, .shx, .dbfの3つのファイルを指定させ、フォーム受信したら一時ディレクトリ上に3つのファイルを置いて読ませる、という流れになりました。
 Shapefileのダウンロードは、publicなディレクトリ上に出力用.shpファイルを指定したら.shp, .shx,

元記事を表示

ツリー構造を持つモデルをLaravelで使ってみる

# はじめに
E-kanの前中です。
Laravelを業務で使うようになって2年以上経ちました。
最初は見よう見まねで取り組んできましたが、整理のために備忘録を兼ねて記事にしてみました。

# Eloquentでツリー構造に挑戦する
LaravelではEloquentモデルを使ってDBのテーブル同士のリレーションを定義して、関係のあるテーブルのデータをまとめて扱うことができます。
実務上では「1対多」のリレーションを使う機会が多いと思いますが、「1対多」のリレーションの応用として、ツリー構造を持つモデルを定義できないか、試してみました。
ツリー構造というのは、PCのディレクトリ構造が良く例として挙げられますが、他にも上司と部下の関係をあらわす場合などに使われます。
例えば
“`text
社長
├部長1
│ ├課長A
│ ├課長B
│ └課長C
└部長2
├課長D
└課長E
├係長a
└係長b
“`
のような構造です。
データベースで扱う場合は、以下のように上司をあらわすカラムを持つテーブルになります。
| ID | 上司 | 名前 | 役職 |
|:-:|:

元記事を表示

OTHERカテゴリの最新記事