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

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

AIと言えば簡単だが、AIと言わない私の信念。

はじめての投稿ですので、乱文や間違った表現はご容赦ください。
一部宣伝を含みますが、全体としては私個人的なAIに対しての考え方ですので、あわせてご容赦ください。

独学でプログラムを覚えて・・・

去年暮れぐらいから、独学でプログラミングを勉強してきました。
作りたいWEBアプリケーションがあり、制作会社に見積もりを出していただいたところ、200万円という金額だったので、「無理無理、自分でつくろう。」と思い自分で作りました。

結局勉強時間含め、10ヶ月ぐらいの歳月が経ってしまいました。
(見積もりでは3ヶ月だったので、3倍の時間がかかってしまいました。)
が、今回完成しました。

完成したサービスは…
「広告主とメディアをマッチングする広告の直売所」

というコンセプトでサービスを作成しました。
良ければ、御覧いただけると幸いです。
https://frame.adpentas.com/top_page

検索アシスト

このサービスの機能に検索アシストというサービスを実装しています。

この検索アシストは質問に答えて行くと「最適なアイテムを自動で

元記事を表示

DockerのMySQLに接続できなくて困った話

## 開発環境

M1Mac
PHP,Laravel
Docker
(nginx:1.17-alpine,php 7.4,mysql 8.0.32)

## Laravelとデータベースが接続できなくて困った( ´Д`)y━・~~

LaravelとDockerを使ってでサイトを作っていたのだが、
データベースに接続できなくて、php artisan migrateができない!
という所で詰まった。

.envファイルの内容もあっている様だが、どうにも接続できない、

## 解決方法

ターミナルからDockerに入ってphp artisan migrateしたらmigrateできましたとさ。

結局のところは、
ローカルのLaravelからDockerのMySQlに接続するのではなく、
DockerにあるMySQLにはDockerに入って接続すればよかった様です

自分が今ローカルで作業しているのか、Dockerで作業しているのかを考えるのが大事かも。

## まとめ

Dockerのデータベースに接続するには、Dockerに入って接続するべし!
ということで引き続き開発を進めてい

元記事を表示

Laravelを学んでいるエンジニアがPHPの基礎を勉強する日記

![PHP](https://upload.wikimedia.org/wikipedia/commons/2/27/PHP-logo.svg)

## はじめに
私は普段、Laravelを使ってWebアプリケーションを開発していますが、PHP自体をきちんと勉強したことがあまりありませんでした。そこで、プログラミングPHP 第4版というオライリーの書籍を手に取り、PHPの基礎を学ぶことにしました。

## 今日学んだこと
今日は字句構文や変数、配列の基本について学びました。

## 初めて知ったこと

### 1. 可変変数
PHPでは可変変数という特殊な機能があります。これは、変数の中身の値を別の変数として利用できるというものです。以下に簡単なコード例を示します。

“`
$foo = ‘bar’;
$$foo = ‘Hello, World!’;

echo $bar; // 出力結果: Hello, World!
“`

この例では、$fooの値がbarであり、それを可変変数として利用して新しい変数$bar

【速報】 #LaraconUS 2023 が開催された模様です

こんにちは。やまゆです。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/332028/a1cdcdbe-fde8-3070-30ba-8ec4c777d226.png)

https://laracon.us

Laravel で最大規模のイベントである **LaraconUS 2023** が日本時間の 2023/07/20~2023/07/21 の2日間、アメリカテネシー州のナッシュビルで開催された模様です。

現地参加は出来なかったので、 Twitter 等で情報収集して発表された内容をいくつかかいつまんでまとめてみます。

## スタート

8時半から受付開始とのことで、朝はえーすげーとなりました。

会場は 800 人の開発者で埋め尽くされたそうです!凄い活気!

https://twitter.com/jbrooksuk/status/168186862818

laravel10のログをCloudWatchに送信する方法

https://github.com/tarfin-labs/laravel-cloudwatch-logger
を実行する。

これだけだと下記のようなエラーが出る
```
Declaration of Maxbanton\Cwh\Handler\CloudWatch::write(array $record): void must be compatible with
Monolog\Handler\AbstractProcessingHandler::write(Monolog\LogRecord $record): void
```

その場合、monolog/monolog のバージョンを2.91に下げる

PHPで作った便利な自作関数集

```php
$val ) {
if ( is_array( $val ) ) {
$key = htmlspecialchars( $key, ENT_QUOTES, 'UTF-8' );
$_input[ $key ] = _h( $val );
} else {
$key = htmlspecialchars( $key, ENT_QUOTES, 'UTF-8' );
$_input[ $key ] = htmlspecialchars( $val,

PHPの正規表現のuフラグっていつ使うの?

PHPの`preg_*`系関数で使う正規表現は、区切り文字の後ろにいろいろなフラグを付けることができます。
その中で私が用途をすぐ理解できなかった`u`フラグについて書きます。

## tl;dr
- `u`フラグなしだと、マルチバイト文字のマッチが思った通りにできない可能性がある
- `u`フラグによって`\d`や`\w`の挙動が変わる

注:以降の記述では、扱う文字列はすべてUTF-8であることを前提とします。

## preg正規表現の`u`フラグ
なにはともあれ公式マニュアルを確認します。

> u (PCRE_UTF8)
この修正子は、Perl 非互換な PCRE の機能を有効にします。パターンと対象文字列は、 UTF-8 として処理されます。 無効な対象文字列を preg_* 関数に渡しても、何もマッチしません。 無効なパターンを渡すと、E_WARNING レベルのエラーが発生します。 5オクテットおよび6オクテットの UTF-8 シーケンスは無効とみなされます。

https://www.php.net/manual/ja/reference.pcre.pattern.m

dh key too small を試す

# はじめに

通信先が脆弱なキーサイズを使っているとクライアント側が自衛のために発生するらしい

クライアント側のセキュリティレベルを下げると発生しなくなる(下げるな)

https://weakdh.org/

> What Should I Do?
If you run a server…
If you have a web or mail server, you should disable support for export cipher suites and use a 2048-bit Diffie-Hellman group. We have published a Guide to Deploying Diffie-Hellman for TLS with step-by-step instructions. If you use SSH, you should upgrade both your server and client installations to the most recent version of OpenSSH, which prefers

Javaしか知らない10年目プログラマが転職を機にPHPを学び始めた話 #1

# 対象読者

* これからPHPを学ぼうとしている方
* ある程度プログラミング経験がある方
* 転職による環境の変化に不安を抱いている方

# 今回の結論

* PHPは*Hypertext Preprocessor*である
* 語弊はあるがHTML生成を目的としていると言える
* PHPの文字列リテラルの`"`と`'`の特徴について
* 複数行になる、またはテンプレートが必要な場合は`"`が適している
* 単行で短い文字列の場合は`'`が適している

# 本記事作成の経緯

アルバイトから数えて10年ほどJavaとSpringbootで受託開発を行っていましたが、
初めての転職を機にPHPとLaravelを使った自社サービス開発の環境へ飛び込んで得た、
知見と感想を共有させてください。

# PHPとは?

私: 「PHPとは?」

ChatGPT:
>‐‐‐
PHPは、主にウェブ開発に使用されるスクリプト言語です。
PHPは「PHP: Hypertext Preprocessor」という再帰的な略称であり、
動的なウェブページやウェブアプリケーションを作

Amazon AWS Cloud9 でPHP8.2系のLAMP開発環境を速攻で作る方法

# はじめに
https://qiita.com/qwe001/items/d3270b0de7f8b17a4f85

上記の記事で書いた内容を8.2版にしただけです。
詳しい作り方は上記記事を参考にしてください。
最近php8.2環境を作ることが増えたので、ターミナルで実行するコマンドだけ絞って書きます。

# PHP8.2など必要ライブラリをインストール

```bash
# とりあえずyumアップデート
sudo yum -y update
# php7.2系をアンインストールする
sudo yum remove php*
# php8.2系をインストールする
sudo yum install -y --enablerepo=epel,remi,remi-php82 php82-php php82-php-{fpm,mbstring,mysqlnd,xml,xdebug,intl}
# phpのパスを通す
sudo ln -s /usr/bin/php82 /usr/bin/php
# MySQLサーバ(mariadb)をインストールする
sudo yum install -y

LaravelのFormatter(Pint)の導入

## 1. はじめに

PHPのFormatterで有名な`PHP-CS-Fixer`がありますが、Laravelでは`Pint`というFormatterがv9.3から標準搭載されました。

https://github.com/laravel/laravel/releases/tag/v9.3.0

本記事では`Pint`の使い方とプリセットの解説をしたいと思います。

## 2. 対象読者

- Laravel開発者
- コードの品質を向上させたいと考えている方
- チーム開発で一貫性を保つための方法を探している方

## 3. 目次
- [1. はじめに](#1-はじめに)
- [2. 対象読者](#2-対象読者)
- [3. 目次](#3-目次)
- [4. インストール方法](#4-インストール方法)
- [5. プリセット`laravel`](#5-プリセットlaravel)
- [5-1. **フォーマットとインデントに関する設定**](#5-1-フォーマットとインデントに関する設定)
- [5-2. **クラス、関数、制御構造に関する設定**](#5-2-クラス

掲示板の検索機能

最近掲示板の検索機能の実装方法を学んだのでこちらにアウトプットしておきます。
# 検索機能の実装
検索バーを`ransack`というgemを使って実装していきます。
Ransackはデータベースから特定の条件に一致するレコードを探すための検索クエリを生成する機能を提供します。

#### 手順
①`ransack`のインストール
②コントローラーの編集
③viewの編集
④国際化(任意)

# ①`ransack`のインストール
Gemfileに以下のコードを記入
```ruby:Gemfile
gem 'ransack'
```
```
$ bundle install
```

# ②コントローラーの編集
```ruby:boards_controller.rb
#編集前
def index
@boards = Board.all.includes(:user).order(created_at: :desc).page(params[:page])
end
↓↓
def index
@q = Board.ransack(params[:q])
@boards =

Swagger-PHP @OA\Items() is required when @OA\Schema() has type "array"の解決法

# はじめに
Laravel + Swagger/OpenAPI でAPIを開発する際に書くアノテーション(`@OA\`から始まるコメントみたいなの)に問題があり、Swaggerのドキュメントを出力する際にエラーが発生した。。。

```console
$ php artisan l5-swagger:generate

Regenerating docs default

ErrorException

@OA\Items() is required when @OA\Schema() has type "array" in \App\Http\Controllers\Mobile\Version1\SearchController->getJobs() in /var/www/html/app/Http/Controllers/Mobile/Version1/SearchController.php on line 247

at vendor/zircote/swagger-php/src/Loggers/DefaultLogger.php:31
27▕

株式会社ゆめみコーポレートエンジニアリングチームの新卒研修を全部公開します

# はじめに
株式会社ゆめみ(以下, ゆめみ)には,「コーポレートエンジニアリングチーム(以下, CE)」というチームがあります.
内製化支援がメインの事業であるゆめみの中で,CE は少し異質なチームで,組織の問題解決をすることに特化したチームです.普段は社内で使う Web サービスを開発しています.

詳しくは僕の過去のスライドや QiitaZine, CodeZine をご覧ください.

https://codezine.jp/article/detail/15419

「組織改善にダイレクトに関われるから面白い」ゆめみが語るコーポレートエンジニアの魅力〜Qiita Conference 2022イベントレポート

# ゆめみのコーポレートエンジニアに求められる力
以下は,コーポレートエンジニアを志望してくださる方のカジュアル面談や面接を担当していただく社内の担当者向けに私が用意した資料の抜粋です.

## 求める人物像
### 自分から率先してコミュニケーションが取れるひと
CE が開発・運用しているア

Laravel Herdを試してみた【PHP/Laravel環境爆速構築ツール】

# Laravel Herdとは

Herdは、macOS向けの高速で便利なネイティブなLaravelとPHPの開発環境です。Laravelの開発を始めるには、PHP、nginx、そしてdnsmasqなど、必要なすべての要素が含まれています。

さらに、HerdはLaravel Valetの基盤になっているため、Laravel Valetの素晴らしい機能をすべて活用できます。

Valetとは異なり、HerdではHomebrewのインストールが必要ありません。なぜなら、Herdにはあらかじめコンパイルされたバイナリが含まれているからです。そのため、Herdをインストールして実際にPHPを使い始めるまでが非常に高速です。

https://herd.laravel.com/

つまり、これさえダウンロードすればLaravelをすぐに使い始めることができるってわけらしいです。
今回は、Laravel Herdを使ってLaravelのトップページを表示するところまで試してみます。

# 必須条件

- MacOS 12.0([Monterey](https://www.apple.com/b

本当に手動でトランザクションを管理する必要がありますか?

# はじめに
Laravel には,データベーストランザクションの管理方法が大きく分けて 2 種類あります.
* `DB::transaction()` を使う方法
* `DB::beginTransaction()`, `DB::commit()`, `DB::rollBack()` を自分で組み合わせる方法

僕は圧倒的に `DB::transaction()` 派なんですが,レビューで指摘すると「なぜそこまで強く推すのか」と聞かれることがあるのでここに僕の考えをまとめておこうと思います.

今後聞かれたら「この記事読んで!」ができるぞ〜〜(怠惰)

# 簡単なサンプル
以下に, `DB::transaction()` を使ったパターンと(以下トランザクションの自動管理,自動管理) `DB::beginTransaction()`, `DB::commit()`, `DB::rollBack()` を使ったパターン(以下トランザクションの手動管理,手動管理)を簡単に書いてみます.

### 自動管理

```php
use Illuminate\Support\Facades\DB

filter_input関数(メソッド)の分かりやすい?記事

# 概要
filter_inputってどうやって渡ってくるんだっけ?
忘れちゃうなーって思ったので記事にしました。
# バージョン
- php 8.1

# html

``` html



チェックデジットを比較してみた

# チェックデジットを比較してみた

チェックデジットは、バーコード・ISBN・クレジット番号と様々なものに使われている。少し前マイナンバーカードのチェックデジットは性能が悪い、という話もあったらしい。
チェックデジットにはどのような方式が有るのかを調べ、それぞれの性能差を比較してみた。

## 比較対象のチェックデジット方式

* 単純な足し算
* Luhnアルゴリズム
* ISBN-10
* ISBN-13
* マイナンバー
* Verhoeffアルゴリズム
* DAMMアルゴリズム

## 各方式のPHP実装

比較テストのためPHPで各方式を実装した。フォーマットをそろえるため以下の仕様とした
* 1つの方式を1つの関数で実装する
* 入力はN桁の数字(0-9)で構成された文字列型
* 出力は数値型。入力文字列を処理した結果で主に0-9の数値が返る

正しく動作すれば良いので最適化はしていない。

### 単純な足し算
```php5
function sum1($str) {
$cs = 0;
for($i=0,$len=strlen($str); $i<$len; $i

AtCoder 入茶しました

AtCoder入茶しました。なんか色変したら記事書く文化の様なので書きます。
ABC310にて、BでつまづいてAとCのみACで絶対スコア落としたと思ったのになんか入茶できました、逆に納得いかない。

前向きな勉強法とかこんなことしました的なのは多いので、自分は反省書いていきます。

問題文の読み違いをやらかす
--

AtCoderの問題文は丁寧に読めば論理的に解釈の余地が入るようなものはないです。しかし、制限時間付きでやってると問題文を斜め読みして、入出力サンプルをざっと見て、憶測の入った解釈で解答に臨んでしまうことも多く、実際それでも9割ぐらいは正答できるんですが、やっぱり1割ぐらいはなんか勘違いや読み違いをしてしまうもので、その間違った解釈でコードを書き、WAでもコードが間違ってるんだと思って何度やっても通らない修正を繰り返してしまうというパターンに数度ハマりました。おおよそコードが思った通りに書けているのにサンプルすら正答にならないなら問題文を読み直すべきでした。
プログラマーが最も学ぶべき言語は日本語というのは至言です。

直近のやらかし案件です
[ABC309 B](htt

Setup Unit Test with PHP Laravel in windows

# Outline
前回、Laravel + MariaDB + IIS といろんな環境を構築して、phpunitを使う環境のドキュメントを作成した。
今回はシンプルに、phpunitを学習するための最低限の環境を構築、かつサンプルコードで1つ書いてみるところまでをドキュメントとして残す

# PHP

## install PHP

https://www.php.net/

php windows versionのzipをダウンロードする。
今回、Non Thread Safe versionを使う。

Thread Safeに関する記事は、以下参照。使用環境によって異なる。

https://techplay.jp/column/504

zipをdownload後、解凍し任意の場所に配置する。
今回、一般的に使われる、c:\phpに配置した。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/267085/5ffb719f-9d79-6ae4-9783-596109ab9090