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

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

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()`ヘルパを使用しない

元記事を表示

for文の条件式に、count()等のサイズを取得するメソッドを使用すると処理速度が遅くなる

# 概要
for文を書いた際、静的解析で何故か指摘されたので、PHPの公式リファレンスを見ていたら、条件式の部分に`count()`メソッド等のサイズを取得するメソッドを記述しない方が良いと記載がありました。条件式の部分に、配列のサイズを取得するメソッドを使用すると毎回サイズを取得する為、速度が遅くなるみたいです。この件は初めて知る内容だったので、備忘録も兼ねて記事にまとめました。

# 従来の書き方
for文でループ処理を書く際、条件式の部分に`count()`等のメソッド使い、配列等の最大値を取得するメソッド記述しているかと思われます。
私も、今まででしたら1行でもコードを減らして書きたい派なので、下記の記述でfor文を書いていました。
`(下記に参考式)`
“`php
# for文の定義
for (初期値; 条件式; 増減式){
# 処理
}

# 一般的なfor文の書き方
$test = [
0 => ‘aaa’,
1 => ‘bbb’,
2 => ‘ccc’,
];

# count()メソッドを使い配列の最大値を取得
for($i = 0

元記事を表示

php.iniの設定を変更して同時接続可能数を増やす

## 同時接続可能数を増やすには?
webアプリの同時接続可能数を増やすには、コードの最適化をしてデータベースアクセス回数を減らしたり、AWSを使用している場合であれば、スペックの高いインスタンスを使ったり、ロードバランサーを導入したり、コンテナ技術を使用してアプリケーションをコンテナ化するなど様々なアプローチが考えられますが、今回はphpの設定ファイルの内容を変更することで多少なりとも、同時接続可能数を向上させる方法について書いていきたいと思います。

## php.iniの変更するべき設定
– max_execution_time
スクリプトの最大実行時間を設定できる
– max_input_time
PHPスクリプトが入力を受け付ける最大時間を設定できる
– memory_limit
PHPスクリプトが使用できる最大メモリ量を設定できる
– post_max_size
PHPが受け取ることができる最大POSTデータサイズを設定できる
– upload_max_filexize
PHPがアップロードできる最大ファイルサイズを設定できる
– max_file_uploads
PHPが

元記事を表示

phpの配列について基本的なことを実際試してみた

# 概要
ドキュメント見ればわかることをあえてやってみた

# なぜ今更?
– ふと、javaではArrayとArrayListってのがあったよなと思いだした
– 混乱して何気なく書いていたphpの配列が急にどんな書き方していたかわからなくなった

# 結論
①配列だと思っていたものはほとんど連想配列だった
②インデックスにする値は型を一定にしておかなければ大変なことになりそう

# 本文
## 初期化してない配列の50番目とかにいきなり値を突っ込んだらどうなるのか
こんなコードを動かしてみた
“`php:array.php
$array = [];
$array[50] = true;
print var_export($array, true);
“`
出力結果
“`
array (
50 => true,
)
“`
**連想配列やん**
じゃあこうしたら…?
“`php:array.php
$array = [];
$array[50] = true;
print $array[10];
“`
結果…
“`
PHP Notice: Undefined

元記事を表示

Laravelを基本からまとめてみた【ルーティング】

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/939638/d5369436-02a3-e40c-c194-7bc2e13c6fd4.png)

## Laravelルーティングの基本形

Route::リクエスト方法(‘URL’,’コントローラー名@メソッド名’)

– リクエスト方法(GET,POST等)
– URL
– コントローラー名
– メソッド


Route::(’/’,’HomeController@index’)

## ルーティングのURLパラメーター

Route::get(‘show/{id}’,’homeController@show’)

– URLの組み込める変数
– パラメーターはコントローラーで
– DBに関わる事が多い
– 利用可能になる

具体例
http://uchida.link/article/111 ⇨ 記事ID = 111の記事を指定

## 参考サイト
[【Laravelの使い方】「ルーティング」の基本を実践解説!簡単なページの

元記事を表示

Laravelでアプリを作成してみた【ミニ受注入力システム】

## 環境開発の作成

①ターミナルを起動し、プロジェクトフォルダーを作成する

“`
mkdir cd “`
②次にルートフォルダにファイルを作成し、内容(dockerの構成)を以下にする
docker-compose.yml
Dockerfile

“`docker-compose.yml
version: ‘3.7’

services:
php:
build: .
volumes:
– ./src:/var/www/html
ports:
– ‘8000:8000’
mysql:
image: mysql:5.7
ports:
– ‘3306:3306’
volumes:
– ./db:/var/lib/mysql
environment:
MYSQL_ROOT_PASSWORD: password
MYSQL_DATABASE: laravel
“`

“`
//Dockerfile

FRO

元記事を表示

PHPでLINEのMessaging APIと連携し、LINEBotを作成してみた。

## はじめに
PHPを使ってLINE Messaging APIと連携し、LINE Botを作成する方法について説明します。
自分の為の備忘録も含むw

APIも定期的にバージョンアップする事もあるのでAPIの部分は公式ページもよく確認しましょう。
もし、下記のサンプルコードでエラーになった場合は仕様が変わっている可能性もあります。

公式ページ:https://developers.line.biz/ja/services/messaging-api/

## 必要なもの
– LINEの公式アカウント
– LINE Messaging APIと連携するPHPファイルを実行させるサーバー
– LINEの公式アカウントに紐づくチャネルIDとチャネルシークレットキー
– PHPのスキル

### LINEの公式アカウントの作成方法~チャネルIDの取得まで
LINEの公式アカウントの作成方法は、@yuki0716 さんのLineDevelopers 公式アカウント

元記事を表示

PHPファイルでファビコンが表示されなくて困った話

画像のURLとかもあっていて1つだけファビコンが表示されなくて困った。
原因はデバッグ用にpreタグをそのまま出力していたこと。

“`
echo ‘

';
//var_dump($show_data);
echo '

‘;
“`

なぜ表示されないのかは謎ですが、調べても出てこない内容なので同じことで詰まっている人の救いになれば幸いです。

元記事を表示

OTHERカテゴリの最新記事