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

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

Laravelの開発環境をDockerで構築する

## はじめに
最初にディレクトリを作成します。

“`
mkdir laravel_app
cd laravel_app
“`

### docker-compose.yml の作成
`laravel_app`ディレクトリのルートに`docker-compose.yml`という新しい名前のファイルを作成します。

“`
touch docker-compose.yml
“`

こちらはコンテナのビルド方法をはじめコンテナにアクセス可能なネットワークやボリュームまで、アプリケーションの設定で作成するコンテナのすべての設定が保持されます。

`docker-compose.yml`に以下を記述します。

“`yaml:docker-compose.yml
version: ‘3’

services:
“`

## データベースコンテナをビルドする
`docker-compose.yml`で*services*エントリを以下のように更新します。
“`yaml:docker-compose.yml
services:
db:
image: my

元記事を表示

[WIP] PHP で セッションを管理するとは

– ウェブページが表示されるまで
– ステートレス
– セッションとは
– Cookie とは
– セッションID,セッション変数,セッションクッキー
– 主なメソッドたち

元記事を表示

laravelでCRUDを理解するためにまたTodoを作った!

# LaravelでCRUDするのにやったこと

Laravelを使うための環境設定は別の記事で紹介します。

今回はXampp環境で最小構成のTodoを作成しました。

作成・修正を行ったファイルとその意味について整理します。

## フォルダが多くてきついと思っていた!

**一通り作ると結構すくないもんなんだな。**

使用ファイル

– マイグレーションファイル
– フロント用bladeファイル
– コントローラファイル
– ルーティングファイル:web.php
– modelファイル
– 使う人には.env

## マイグレーション:DBテーブルの作成

マイグレーションは、アプリフォルダ内にDBの構成を記録しておくファイルです。

xamppの環境下であればphp artisan migrateコマンドを打てば、DBが自動で作成されるため便利です。

今回は、テーブル名のposts、カラム名(id,title,content,timestamp)のDBを作成します。

database\migrationsフォルダの中にあるよ。

“`p

Laravelで複数検索機能を実装する手順

検索機能の実装にはたくさんのアプローチがあると思いますが、その中でも個人的に理解しやすかった方法があったので備忘録としてまとめています。
## やりたいこと
viewsの一覧画面からgetで検索したい内容を渡し、その検索結果を一覧画面に反映させます

## 前提
マイグレーションを作成します。同時にモデルも生成します。

“`php:2023_01_21_122803_create_items_table.php

縦書きジェネレーターを作りました。

### 二番煎じ感が強い縦書きジェネレーターですが、作ってみました。
飽きたら削除するかもです。

使用した言語等はJavaScript、php、Sqlite3、html、cssになります。
※[html2canvas](https://html2canvas.hertzen.com/)というライブラリを使っています。これがあったので短時間で創ることが
出来ました。ありがとうございます。

ソースコードの一部を抜粋します(下記になります)。

動作は下記より確認できます。
https://358tool.com/tategaki-tool/

“`javascript
document.getElementById(“tategaki-input”).addEventListener(“input”, function (e) {
document.getElementById(“tategaki”).innerText = this.value;
});
document.getElementById(“btn”).addEventListener(“click”, f

Laravelで主に使用してきたデバック方法

## 前置き
Laravelでの開発をスムーズに進めるために必要な方法になると思います。
実務経験から主に使っているデバック方法を紹介します。

## 紹介するデバック
以下3つを紹介します。

・dd()
・dump()
・Logファザード(Log::~)

dd()とdump()はビューに出力を行い、Logファザードはlogs/laravel.logに出力されます。

## dd()
dd()は、使用した時点で処理を終了させます。
その為、それ以降の処理を行うことはありません。
“`php
$array = [
‘a’ => ‘あ’,
‘i’ => ‘い’
];
dd($array);// ここで処理止まる

$a = $array[‘a’];
“`
上記の場合、最後の行の$aの部分の処理は行われません。
?出力結果
![スクリーンショット 2023-01-29 13.16.56のコピー.png](https://qiita-image-store

PHPのタイプヒンティングはどのくらいコストフリーではないのか

# はじめに

CakePHP のコーディング規約を見ていて、気になる一文があったため、実際にどのくらいコストがかかるのかを確認します。

> オブジェクトや配列を期待する引数はタイプヒンティングを指定することができます。しかしながらタイプヒンティングはコストフリーではないので、public メソッドにだけ指定します。

https://book.cakephp.org/4/ja/contributing/cakephp-coding-conventions.html#id12

# 結論

:::note info
タイプヒンティングすることで処理時間が約 110% となる
:::

# バージョン

– PHP
– 8.2.1
– Docker Desktop
– 4.16.2

# 確認

## 確認したリポジトリ

https://github.com/q23isline/study_php

## 検証プログラム

タイプヒンティングありのメソッドを 100万回実行するプログラム

“`php:src

CURLMOPT_MAX_TOTAL_CONNECTIONS curl_multi_exec の使い方

“`php

生のPHPでフリマサービスを作る_part3

### この記事のシリーズ
– [生のPHPでフリマサービスを作る_part1](https://qiita.com/daichi_hasegawa_stars/items/22f12b7c9aa019781b27)
– [生のPHPでフリマサービスを作る_part2](https://qiita.com/daichi_hasegawa_stars/items/286c5f8ea49ea79e4aa6)

## フリマサービス作成の流れ
1.機能を洗い出す
2.画面設計(今回はPHPの深掘りがメインなので割愛します)
3.テーブル設計
4.クラス設計 ← 今回もここ
5.実装

## クラス設計
前提として、私自身、勉強中の身なのでこれから作っていくクラス設計が合っているかどうかは未知数です。
ただ、基本は単一責任の原則に従って作っていく。
そうすれば、とりあえずは訳のわからないことにはならないはず。

### ユーザー登録機能のクラスを作成
まず、DBへの接続とSQLを実行するクラスを作成する

1. Databaseクラスを以下のように作成
※これ、接続情報ベタ書きしてますが、

ChatGPTにモナドを教えてもらった

# 教えてもらう前

– モナドという名前は知っている
– Haskellの世界で有名らしい言葉(Haskellの事はよく分からない
– 「HaskellはIO無いけどIOモナドで何とかなるよ!」というモノらしい

# 教えてもらった後

[Option型](https://doc.rust-jp.rs/rust-by-example-ja/std/option.html)に`unwrap_or`と`unwrap_or_else`を生やして好きな[振る舞い](https://elixirschool.com/ja/lessons/advanced/behaviours)をセットにしたもの

“`typescript:こんな感じで
class Maybe {
private value: T | null;

private constructor(value: T | null) {
this.value = value;
}

static some(value: T): Maybe {
return new Maybe(value

【Builtin web server】php -S 0.0.0.0:8000をマルチスレッドで並列処理【PHP_CLI_SERVER_WORKERS】

# PHP_CLI_SERVER_WORKERS=16 php -S localhost:8000
16スレッドで並列処理する場合
“`bash
PHP_CLI_SERVER_WORKERS=16 php -S 0.0.0.0:8000
“`

https://man.plustar.jp/php/features.commandline.webserver.html

Apache + PHP8の設定と動作確認 – Windows11

前提条件:
としてはApache + PHPは個別ごとインストールされている。
各インストール方法は以下を参照してください。

https://qiita.com/taidong5588/items/779928804a6f4eb98890

https://qiita.com/taidong5588/items/f250ab10e4122a04046a

Apache を利用版VS16 x64 Thread Safeをインストールすること。
 WEBサーバーとして IIS を利用のPHP版はphp8apache2_4.dllは存在しない。
# Apacheでのhttpd.confの設定
「C:\Apache24\conf」フォルダにあるhttpd.confファイルをテキストエディタで編集します。以下のコードをhttpd.confファイルの末尾に追加します。
“`php
PHPIniDir “c:/php”
LoadModule php_module c:/php/php8apache2_4.dll
AddType application/x-httpd-php .php
“`

.theia/launch.jsonとphp

https://shell.cloud.google.com でF5でデバッグできます

“`json:.theia/launch.json
{
// Use IntelliSense to learn about possible attributes.
// Hover to view descriptions of existing attributes.
“version”: “0.2.0”,
“configurations”: [
{
“type”: “php”,
“request”: “launch”,
“name”: “Launch Program”,
“program”: “${file}”
}
]
}
“`

Factoryで生成されるUserのidに合わせて他テーブルのFactoryを生成する方法

Factoryで生成されるUserテーブルのidと他テーブルのuser_idカラムと紐付けしたかったのでその備忘録です

## ItemFactoryの作成
UserFactryは既存のものを使用します。
ItemFactoryを生成する時は事前にuser_idのカラムがあるテーブルをマイグレーションしてください

コメントアウトをしている’user_id’=>$this->faker->numberBetween(1,10)は1~10のランダムな数字を生成することで10人のUserのidに対応するように最初記述したのですが、これでは10人以上のUserがFactoryされた時に対応ができないので、その対処法を考えます。
“`php:ItemFacrtory
class ItemFactory extends Factory
{
/**
* Define the model’s default state.
*
* @return array
*/
public function definition()
{

【Codeigniter】 メールクラス 文字化け

# 紹介

初めまして、日本でPHPエンジニアとして働いてる韓国人です。
よろしくお願いいたします。:relaxed:
恥ずかしながら日本語が未熟なので、ご指摘ほどよろしくお願いいたします。
CodeIgniterのメールクラスを使用する中、
エンコーディングとデコーディングを間違ってないのにも関わらず
文字化けがある場合参考すれば良いと思います。

# 環境情報

この記事はCodeIgniter4基準で作成させていただきました。
ただ、Emailクラスに対してはCodeIgniter3も大きい差はないですので、
ご参考のほどよろしくお願いいたします。

# CodeIgniter メールクラスとは?

メールクラスに詳しいではない方や詳細は下記のリンクをご参考ください。
公式文章
https://codeigniter.com/user_guide/libraries/email.html

CodeigniterにはSMTP設定が用意すれば、メールを簡単に送信できるクラスがあります。
ただ、あくまでも英語を基づいたメールなので日本語を使用する場合、文字化けが起きる場合があります。

PHP ダウンロード&インストール方法

PHPの公式ページからダウンロードします。

https://www.php.net/downloads
“`
それぞれ、次のような基準で必要な物を選択すれば良いでしょう。

種類 選択すべきシーン
VS16 x86 Non Thread Safe 32bit版のWindowsを利用しており、WEBサーバーとして IIS を利用する場合。
VS16 x86 Thread Safe 32bit版のWindowsを利用しており、WEBサーバーとして Apache を利用する場合。
VS16 x64 Non Thread Safe 64bit版のWindowsを利用しており、WEBサーバーとして IIS を利用する場合。
VS16 x64 Thread Safe 64bit版のWindowsを利用しており、WEBサーバーとして Apache を利用する場合。
“`

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/592268/395df7fc-fdf8-9505-5aba-03b1

簡単にModelの配列をviewsに反映させる方法

LaravelでModelにある配列を呼び出す方法についての備忘録です。
カラムから紐づけるテーブルを新しく作る必要がない時などに使用できると思います。

### やりたいこと
– Modelにある配列をViewに渡し、int型のデータを任意の文字列に置き換える。

### モデルに配列を挿入
モデルに配列を追加します。

“`php:Model
‘カジュアル’,
1 => ‘モード’,
2 => ‘キレイめ’,
3 => ‘ナチュラル’,

Laravel サーバーでのログデバッグ方法まとめ

## 始めに
サーバーのログデバッグ方法(Laravel)について
よく使う、便利な方法を備忘録として記事にしました。
随時更新していきます。

## 環境
| 開発環境 |バージョン |
|———–|————|
| __Laravel__ | 8.83.19 |
| __PHP__ | 7.3.10 |

## 通常デバッグ
“`PHP:DebugController.php
use Illuminate\Support\Facades\Log;

// 通常デバッグ
Log::debug($value);

// 通常デバッグ(PHP)
var_dump($value);
exit;

// 通常デバッグ(Laravel)
dump($value);
exit;

dd($value);
exit;
“`

## デバッグ(マジック定数)
“`PHP:DebugController.php
use Illuminate\Support\Facades\Log;

// クラス名の表示(マジック定数)
Log::debug(__CL

PHPの基礎 文字列の出力

PHP で文字列を出力するには echo または print を使います。この 2 つは関数ではなく PHPに言語構造として含まれているものです。言語構造とは「if」や「for」などのように言語の基本的な仕組みとして組み込まれている要素です。ここでは PHP で echo と printを使って文字列を出力する方法について説明します。

# echo

`echo`は1つの文字列も複数の文字列も出力することができます。`echo`の後に半角スペースを入れて出力する文字列を記述します。複数の文字列を出力するには文字列をカンマ(`,`)で区切って記述します。

“`PHP
echo ‘おはようございます!’;
echo ‘現住所:’, ‘奈良県’;
“`

# print

`print`は1つの文字列を出力するときに使います。`print`の後に半角スペースを入れて出力する文字列を記述します。`print`は複数の文字列を出力することはできません。

“`PHP
print ‘こんにちは’;
“`
1つの文字列を出力する場合は、`echo`でも`print`でも違いはありません。

Laravel 「In Container.php Class request does not exist」の解消方法

表題のエラーにハマってしまったので備忘録。

## 状況

実装したアプリの見た目の修正を行ったあと、バッチ処理の動作確認を行っている際
バッチが止まってしまうので確認したところ
“`
In Container.php line 877: Target class [request] does not exist.
“`
こちらのエラーが発生していました。

## 原因

– `config`ディレクトリ以下の設定ファイルに`request()`ヘルパを使用してしまっていたため

“`config/adminlte.php
path() == ‘login’) {  // ここ
$logo = ‘logo.png’;
}

return [

“`

バッチ処理等コンソール上での処理ではリクエストを使用しないので
`request()`の箇所でエラーとなっていたようです。

## 対策

今回は設定ファイル上でログイン画面を判定する必要があり`request()`ヘルパを使用しない