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

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

docker-laravel の Docker 構成をちゃんと理解する【Dockerfile 編 – PHP】

昨日は[ブッチ](https://zenn.dev/t_kitamura)さんのミライトデザインに入ってからの1年を振り返る記事でした。

https://zenn.dev/t_kitamura/articles/3b85d2c331f0ad

ブッチさんとはお互いがミライトデザインに入る前から知り合いだったので、今同じ会社で仕事をしているのが不思議な感じですね。

## この記事について

@ucan-lab さんの [docker-laravel](https://github.com/ucan-lab/docker-laravel) をちゃんと理解したいので調べるという目的の記事です。

https://qiita.com/tkek321/items/9c0c5cec1dc349c67f5f

前回の記事では飛ばしていた Dockerfile について調べていきます。

docker-compose.yml の他の記述に関しては前回の記事で解説しています。

## Dockerfile のコマンド

各 Dockerfile の詳細を見る前に docker-laravel で使わ

元記事を表示

Laravelのログを一日より早くローテーションさせる

「[PONOS Advent Calendar 2021](https://qiita.com/advent-calendar/2021/ponos)」22日目の記事です。
昨日は[@abcdeff](https://qiita.com/abcdeff)さんの記事でした。
# ログがスゴイ貯まる
最近Laravelのログがすぐインスタンスを圧迫するサービスが出てきたので、毎日ローテーションするかつ1日分のログしか残さない運用をしていました。
しばらくは順調だったのですが今度はローテーションする前に満杯になるようになってきました。
Laravelデフォルトのログ設定では`daily`しかない、困った。
というわけで時間毎にローテーションさせるための設定を作成しました。
# Hourlyローテーション
Laravelのログ設定で`daily`を選ぶと`Monolog\Handler\RotatingFileHandler`クラスが使われるので、これを少しいじって1時間毎にローテションされるようにします。
まずは`RotatingFileHandler.php`を適当な場所にコピーしてきて以

元記事を表示

[MySQL] too many placeholders の解消

##php/Laravelでのクエリ発行はEloquent/Query Builderを使用してDB処理を行うことが多い
と思います。

それを使用するとクエリで使用する文字列をインジェクションができないようにクリーンにすることなくSQLにバインドすることができるので、非常に便利。シンプルなSQLであれば直感的に記述しやすいですね。
__使いやすい反面、SQLデータにバインドするデータの量は注意が必要__ です。

##MySQLのプリペアドSQLで使用できるplaceholderは65,535 (2^16-1)個までしか使えない
という制約があります。制約の数を超えてSQLは実行エラー`Prepared statement contains too many placeholder`になります。

リストをフィルタしたとの結果に対して全チェックして処理をしたい場合に、対象データの数、更新対象カラムが多いとMySQLを利用したアプリケーションだと対応が必要になります。
***
今回の事象は一括更新処理にて発生しました。
記述されている処理の内容、対象データとしては下記のような状態でした

元記事を表示

PHP で簡単なインタプリタをつくる

この記事は [オープンロジアドベントカレンダー](https://qiita.com/advent-calendar/2021/openlogi) の5日目の記事です。

## はじめに

最近読んだ [Go言語でつくるインタプリタ](https://www.oreilly.co.jp/books/9784873118222/) という書籍がとても面白かったので、復習も兼ねて弊社のサーバーサイド開発で利用されている PHP で再実装してみようと思います。インタプリタといっても、今回は四則演算のみをサポートする簡易なものに留めます。

例えば、 `1 + 2` という入力を受けると、`3` という出力を返します。スペースは含まれていても無視されます。

“`bash
$ ./run.sh
> 1 + 2
3
“`

また、優先順位もサポートします。例えば `1 + 2 * (3 + 4)` を受けると `15` を返します。

“`bash
$ ./run.sh
> 1 + 2 * (3 + 4)
15
“`

完成したソースコードは [こちら](https://github.c

元記事を表示

LAMP環境で「?(つちよし)」をDBに格納するのに手こずった話。(MariaDB)

## 初めに

こちらの記事は、私が「寿司ビール問題」を解決した方法です。
サーバーの設定を触っておりますので、お試しの際は開発環境などで正常な動作を確認後に行なってください。
いきなり本番環境でサーバーの設定を変更しないようにお願いします。(そんな人いないと思いますが一応)

## 寿司ビール問題とは
寿司ビール問題は結構有名なので調べていただいたらすぐにたくさん記事が出てくると思います。

簡単に言うと、以下の絵文字が同じモノとして扱われる的なことです。
?=?
ちなみに僕は、吉野家の「?(つちよし)」をDBに格納したくて試行錯誤しました。

エンジニア初学者の僕は
「文字コードはUTF-8やろ」
ぐらいに思っており、深く考えたことはありません。。。(だめだめです。)

調べてみると、文字コードは符号化文字集合、文字符号化方式の二つの要素があるらしい。
▼符号化文字集合
用いる文字の集合のこと、またその文字の対応する識別子のこと。Unicode,JIS X 0213などのこと。

▼文字符号化方式
上記の文字集合で得た識別子を符号化するときに用いる方式のこと。つまりエンコード。

元記事を表示

Carbonの「CarbonPeriod」を使ってみたよ。

## まず初めにCarbon とは

phpで日付処理を行う時にとっても便利なのがCarbonです。
今日の日付や指定した日付など、支持してあげれば欲しい日にちを持ってきてくれます。

### 使えるようになるまで(インストール)
“`
composer require nesbot/carbon
“`

“`
//Laravelなら、利用したいファイルでuseしよう
use Carbon\Carbon;
“`

## 基本的な利用法

“`php
$date = new Carbon();
$date = Carbon::now(); // 現在時刻
“`

とまぁ、こんな感じで便利に利用できるのがCarbonさんです。
今回は、Carbonさんを利用して以下のような配列を作ってみようと思います。

“`
現在 2021年12月14日
array:49 [▼
0 => “2019年12月”
1 => “2020年01月”
2 => “2020年02月”
3 => “2020年03月”
4 => “2020年04月”
5 => “2020年05

元記事を表示

Laravel5.5にて、Authのログイン後にアクセス元にリダイレクトする処置

さっと書きます。
今回実装したいのは、
ログインが必要なページにアクセスした際ログイン画面にリダイレクト
↓
ログイン
↓
アクセスした元のURLにリダイレクトされる
といった簡単な内容です。

すぐ答えです。以下です。
Laravel 5.5の場合、LoginController.phpを更新するだけで次のコードが機能しました

“`php
public function showLoginForm()
{
session([‘link’ => url()->previous()]);
return view(‘auth.login’);
}

protected function authenticated(Request $request, $user)
{
return redirect(session(‘link’));
}
“`

セッションに残して、それにリダイレクトさせる簡単なコードで実装できました。
参考文献
https://www.it-mure.jp.net/ja/php/laravel-5%E3%83%AD%E3%82%B0%E3%

元記事を表示

PHPで期間(日時)に応じて表示内容を自動的に切り替える

日時によって表示内容を変える

“`

2021年12月21日 13時前です。

2021年12月25日 17時半前です。

2021年12月25日 17時半前を過ぎました

“`

元記事を表示

PHP

ユーザー定義関数
渡された値を指示通りに処理し、結果を吐き出す
処理の材料となる値を引数(パラメータ)、結果を戻り地(返り値)という。

function seiza($a, $b){
if((($a == 3) && (21 <= $b && $b <= 31)) || (($a == 4) && (1 <= $b && $b <= 20 ))){ return "牡牛座"; function → 関数の書き始めを宣言 seiza → 関数名。自分でつける。 ($a, $b) → 引数とする変数。 { } → 実行される処理 $m = isset($_POST['month']) ? $_POST['month']:''; $d = isset($_POST['day']) ? $_POST['day']:''; if($m && $d){ $s = seiza($m, $d); print "$m 月 $d 日生まれは $s で

元記事を表示

Laravelでコメント機能を実装する

# はじめに
Web系自社開発企業への転職を目標にLaravel+VuejsでWebアプリケーションを作成しています!
今回は、Laravelでコメント機能を実装するまでの流れを解説していきます。

# 目次

1. [モデルを作成](#Chapter1)
2. [リレーションを設定](#Chapter2)
3. [ルーティングを追加](#Chapter3)
4. [コントローラーを作成](#Chapter4)
5. [ビューを作成](#Chapter5)
6. [参考教材](#reference)



# モデルを作成

– Commentモデルとマイグレーションファイルの作成

“`
php artisan make:model Comment –migration
“`

– マイグレーションを編集

“`php

元記事を表示

VSCodeのPHP Intelephenseで構文エラーが消えない問題

## 環境

– MacBook Pro(Catalina 10.15.7)
– VSCode(1.63.2)
– PHP(8.0)
– Docker Desktop(4.3.1)

## はじめに

普段はフロントエンドメインの開発を行なってますが、Laravel で API 周りの実装もしないといけなくなったので、使い慣れてる VSCode にいくつか PHP の Extension を入れてみました。
その中で、ハイライト、コード補完、構文チェックなどなど、開発にあたり一通りの機能が揃ってて、評価の良い [PHP Intelephense](https://marketplace.visualstudio.com/items?itemName=bmewburn.vscode-intelephense-client&ssr=false#overview) も導入しました。
機能としては申し分なく期待通りだったんですが、なぜか、PHP8.0 から導入されたであろう名前付き引数で、変数名が補完されるにも関わらず構文エラーが発生。

![スクリーンショット 2021-12-21 9.27

元記事を表示

【Python・PHP】SQM-LEを用いて夜空の明るさを測ってみた

#初めに
夜空の明るさを計測するために、[Sky Quality Meter – LE](http://unihedron.com/projects/sqm-le/)を使用する。
マニュアルやサンプルコードは[公式サイト](http://unihedron.com/projects/darksky/cd/SQM-LE.html)からダウンロードした。
設置やIP固定はマニュアルや[国立天文台の公開しているPDF](http://globeatnight-network.org/presentations/03%20configuration%20and%20installation%20of%20SQM-LE%20unit%206.pdf)を参照すること。

>SQM-LEとは:[国際光器](https://www.kyoei-osaka.jp/SHOP/unihedron-sqm-le.html)より引用
>リモート制御が可能な「SQM-LE」夜空の「暗さ」を測定しましょう!
しかもこの「SQM-LE」は、インターネット回線を通じてリモート制御で「星空」の暗さを数値化出来てしまいます

元記事を表示

Apache2.4 + Laravel6 + PHP8 + Windows サーバーで 502エラー

#はじめに
Windowsサーバーで、Apache + laravelの502エラーのときの対処方法についてまとめます

#環境
– Apache2.4
– Windows10
– laravel6
– PHP8.1

#502のエラーログ
以下のエラーログが`C:\Apache24\logs\error.log`ファイルで確認されていました。
windows環境では、「子プロセスの最大数は1」、この子プロセスでは、デフォルトで64のスレッドを生成可能とのことだが、これだと足りないため、再起動している?という意味かと推測しました。
windowsとApacheの組み合わせ特有のもののようです。

“`C:\Apache24\logs\error.log
#Webサーバは再起動処理を開始します。
[mpm_winnt:notice] [pid 1964:tid 760] AH00428: Parent: child process 2560 exited with status 3221225725 — Restarting.

[mpm_winnt:notice] [pid 196

元記事を表示

【PHP8.1】リリースページが日本語訳されてなかったので深い悲しみに包まれた

[PHP8.1のリリースページ](https://www.php.net/releases/8.1/)がありますね。

右上のChange languageに日本語がありませんね。

![01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/cb14f5de-464b-4778-b09e-463eeb046060.png)

深い悲しみに包まれたので[増やした](https://www.php.net/releases/8.1/ja.php)。

![02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/26088/372bbc11-6e75-8d7f-7bee-37bdd439b93a.png)

# fork

リリースページの最下段、`View Source`ってところから[ドキュメントのソース](https://github.com/php/web-php)に進めます。
そこで右上の`Fork`ボタンを押

元記事を表示

SwiftでMySQLを扱う時にPHPを経由する理由を調べてみた

## はじめに
最近、データベースにMySQLを使ってXcodeのシミュレータで取得する練習をしていました。その際MySQLから直接取得するのではなく、PHPを経由するやり方が多く紹介されていました。今回の記事では、なぜPHPを使うのかについてのイメージが掴める記事に出来ればと思ってます。

## データベースの種類
個人開発でデータベースを使う場合、以下のものがよく候補として挙げられると思います。
これらはNoSQLらしいです。

– Realm
– Firebase Realtime Database
– Cloud Firestore

次の4つはSQLで操作するRDBMS(Relational DataBase Management System)です。
リレーショナル型は表で構成されたデータのイメージです。
 
– MySQL
– Oracle Database
– PostgreSQL
– SQLite

## RDBMSとNoSQLの比較
比較については[こちらのサイト](https://it-trend.jp/database/article/89-0066)がわかりや

元記事を表示

PHPerKaigi 2022のプロポーザルを開始しました。

この素晴らしいカンファレンスにいくつかの講演を提出する

“PHPerKaigi(ペチパーカイギ)は、現在PHPを使用している、過去にPHPを使用していた、これからPHPを使いたいと思っているエンジニアが、技術的なノウハウを共有するためのイベントです。”

https://fortee.jp/phperkaigi-2022

元記事を表示

コーヒーのポートフォリオサイトを作りました!!

# どんなポートフォリオサイトなのか??

こちらが実際のサイトです!!⬇

https://what-kind-of-coffee.link/

GitHub

https://github.com/koheihida/what-kind-of-coffee

今回はlaravelを使用してコーヒーの診断機能がついたメモアプリを実装しました!!
[![Image from Gyazo](https://i.gyazo.com/9655662a0522f07bb9effbb47d88eb8b.gif)](https://gyazo.com/9655662a0522f07bb9effbb47d88eb8b)

# 何故メモアプリなのか??
私は今まで12年間ずっと様々なコーヒーを口にし続けてきたのである程度反射的に整理したり言語化しているものがあるのですが、それはあくまで言語化をかなり意識してきたからだと思います。

具体的に上記YouTubeのような競技会に携わってきたので言語化は必須でした・・・!!
言語化する為に”駆け出し

元記事を表示

laravelでscopeを使って複数のカラムを検索

#会員管理画面

“`index.php
@extends(‘admin.layout’)
@section(‘content’)

会員管理

{!! Form::open([‘url’ => route(‘member_users’), ‘method’ => ‘get’]) !!}

{{Form::label(‘name’,’ユーザー名’)}}
{{Form::text(‘name’, null, [‘class’ => ‘form-control’, ‘id’ => ‘name’])}}
元記事を表示

クリスマスに向けてリア充を逃がさず爆破する弓を作る

もうすぐクリスマスな時期になりましたね!リア充がわきますね!目障りなリア充は爆破してしまいましょう。逃げられても大丈夫なように矢を追尾させ、確実に〇れるようにしてしまいましょう。

##動作環境
php 8.0以降
PMMP4.0.0

##仕様
弓を放った際に一番近いエンティティを取得し、それに向けて弓の進行方向を変えます。
また、着弾時に爆発するようにします。
実装方法は矢のクラスをオーバーライドする方法で行きます。

##ソースコード

“`php

元記事を表示

【PHP】組み込み関数のまとめ

PHPの学習を始めたため、備忘録として保存します。

## 組み込み関数のまとめ
### 出力系

| 関数 | 処理の内容 |
| —- | —- |
| print|文字列を出力する|
|print_r|データ型と値を出力する|
|var_dump|データ型・値・長さなどを詳細に出力する|

###文字列操作系

| 関数 | 処理の内容 |
| —- | —- |
| strlen | 文字列の長さを返す |
| mb_strlen | 文字列の長さを返す(日本語対応) |
| substr | 文字列の一部分を返す |
| str_replace | 検索文字列に一致したすべての文字列を置換する |
| implode | 配列から文字列を生成する |
| explode | 文字列から配列を生成する |

### 数学系

| 関数 | 処理の内容 |
| —- | —- |
| floor | 小数点以下を切り捨てた値を返す |
| max | 引数の中の最大値を返す |
| min | 引数の中の最小値を返す |
| mt_rand | 乱数を生

元記事を表示

OTHERカテゴリの最新記事