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

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

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 '

‘;
“`

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

元記事を表示

MysqlのデータをHTML, PHPで表示する

最近フリマアプリを使用して物を売ることが多くなってきたので、
Mysqlを使って在庫管理をしてみようと思いました。
(普段は中国語を使っていて文章をピンインでベタ打ちするのが習慣になってしまっているので、初見の人は画像の意味が分からないと思います。)

以下の画像中の上側のテーブルのテキストエリアに入れたデータが、Denglu(登録)ボタンを押すと、Mysqlに追加されて、下側に表で表示するものを作成してみました。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3120035/83de5690-393f-04ad-5602-f3456e893f90.png)
Mysqlのカラムは、
“`
ID: ID
CSSJ: 出售时间(出品日)
SPM: 商品名(商品名)
KC: 库存量(在庫量)
DG: 定价(定価)
CSJ: 出售价(売値)
FSFS: 发送方式(発送方式)
BZFS: 包装方式(包装)
BZF: 包装费(包装費)
YF: 运费(送料)
SXF: 手续费(手数料)
HJ: 合

元記事を表示

【2023年版】Dockerを使ったLaravelの環境構築

## はじめに

最近は現場でも、Docker環境下でLaravleを触ることが増えて少しは知見も溜まってきたので、得た知見を忘れないように忘備録として残しておきます.

ここでは、`docker`や`docker-compose`のインストールに関しては触れませんので、まだの方は[こちらの記事](https://qiita.com/zembutsu/items/dd2209a663cae37dfa81)がわかりやすかったので参考にしてみてください.

## 構成
任意のディレクトリに`SampleProject`を作成して下記のディテクトり構成で環境を構築します.

“`
SampleProject
├── docker-compose.yml
├── docker
│ ├── php
│ │ ├── Dockerfile
│ │ └── php.ini
│ └── nginx
│ └── default.conf
└── src
└── Laravelのプロジェクトファイル
“`

## d

元記事を表示

input type=”file”の未選択時はnullではなく空文字列””になる!

# input type=”file”未選択時は…
## 例
“` html

“`
上記で画像ファイルを選択しなかった場合は、PHP側で既存の画像をS3に保存しようとしました。
ですのでPHP側の該当箇所記述は下記かなと思って…
“` PHP
// リクエストに画像が存在しない場合
if(is_null($request->hoge_imagefile))
{
$request->hoge_imagefile = $fuga->image;
}
// S3、DBへの保存アクションが以降で実装される
“`
つまり、リクエスト画像が存在しない場合はすでに保存されている画像のパスをそのまま使用する、という形になっています。
(実装方法があまりよろしくないとは思いますが、本記事の趣旨とは異なるので無視)
いずれにせよリクエストが無くても従来画像が保存されると思ったのですが、思い込みとは恐ろしいもので…

## どうなったのか?
“` PHP
// $image_pathは上記の$request

元記事を表示

WordPressで独自テーブルにフォームデータを格納する。バリデーションや非同期通信もやってみる。

## ■背景

仕事のため、必要だったため。
あまり記事もなく、調査が面倒だった。
自分共有用として。

mysqlのテーブル作成は記載していない。

## ■概略

処理の流れは以下

1. フォームの送信ボタンをクリック時に、javascript起動(バリデーション、送信前の確認メッセージ、非同期で自身の固定ページにpost送信)

2. 自身の固定ページにpost送信するので、配置しているショートコードがキック

3. 使用しているテーマのメソッドがキック

## ■固定ページ

### html

“`html

アンケート

氏名:
→注意:wordpressはname属性に「name」とすると、post送信時にエラーとなる

〜その他フォームなど〜

元記事を表示

wordpress関数をjsファイルで扱えるようにする

ワードプレスである便利な関数をjsでも扱えるようにする方法のメモです。
今回は`home_url()`関数を使えるようにしてみます
~~~ php
function custom_enqueue() {
$tmp_path_arr = array(
‘home_url’ => home_url(),
);
wp_enqueue_script(‘my_js’, get_stylesheet_directory_uri() . ‘/js/script.js’, array(), date(“ymdHis”, filemtime(get_stylesheet_directory() . ‘/js/script.js’)));
// home_url()関数をjsで使えるようにする
wp_localize_script(‘my_js’, ‘tmp_path’, $tmp_path_arr);
}
add_action(‘wp_enqueue_scripts’, ‘custom_enqueue’);
~~~
`functions.php`に上のコードを記述します。

元記事を表示

【Laravel】イミュータブルにCollectionのN番目の要素を取り出す

# ゴール
– 元のCollectionの値を変えずにCollectionのN番目の要素を取得する
– `Undifined Index`, `Undifined Offset`を発生させない

以下5番目の値を取得する場合の方法を記載する

# 方法1

“`php:OK1
$item = $collection->values()->get(4);
“`

`get()`の引数はindexで指定する。

https://stackoverflow.com/questions/24443949/how-to-access-the-nth-object-in-a-laravel-collection-object

https://gist.github.com/vielhuber/cf35a39fcbd7115c1e94a25e0d9fc491

https://readouble.com/laravel/8.x/ja/collections.html#method-values

# 方法2

“`php:OK2
$item = $collection->skip(4)

元記事を表示

public function の public ってなに!?【アクセス修飾子】

public function の public とはアクセス修飾子と呼ばれるもので、アクセス修飾子とは、プロパティ(クラス内で定義された変数)やメソッド(クラス内で定義された関数)を使用する時にどのクラスからでも呼び出せるようにしたり、特定のクラスからしか呼び出せないようにしたりするものです。

今回は public function の public や、そのお仲間たちについて紹介していきたいと思います。

https://beyondjapan.com/blog/2023/01/what_public

***

■ 株式会社ビヨンド

・コーポレートサイト:https://beyondjapan.com​​​
・採用サイト:https://recruit.beyondjapan.com
・Youtube(びよまるチャンネル):https://www.youtube.com/@beyomaruch
・Twitter:https://twitter.com/beyondjapaninfo
・Instagram:https://www.instagram.com/bey

元記事を表示

Laravel Fortify メールアドレス以外でログインする

Laravel Fortify でログイン方法をメールアドレスから別のカラムに変更したい人向け。
簡単2ステップで、終わりです。

### ①FortifyServiceProviderに追記する
FortifyServiceProviderのbootメソッドに下記の通り、追加

“`FortifyServiceProvider.php
public function boot()
{
Fortify::authenticateUsing(function (Request $request) {
$user = User::whereLoginId($request->login_id)->first();

if ($user &&
Hash::check($request->password, $staffMember->password)) {
return $user;
}
});
}

元記事を表示

Laravelを基本からまとめてみた【入門】

## Migration(PHPファイルでDBを管理)

– DBのテーブル定義は必ず『migration』で定義する!
– テーブル定義は後戻りができない
– 一度作ると後が超ラク

## Laravel/UI(シンプルデザインを生成)

– CSSとJSのテンプレート
– 誰でもデザインができ、初心者はベースに作ると良い
– 後から入れるとデザインが崩れる

## 固定データの取得先は『.env』から取る

– 『.env』は環境情報
– 開発用PCと本番サーバーなど、データの出し分け
– 直接PHPファイルに値を書くと後で大変になる

##### 環境に依存する情報・機密情報は『.env』で管理

## 初心者が気にしなくて良い機能と設定3選

## Seeder

– PHPファイルでデータを生成
– 初心者は手入力でOK
– 意外と躓くクラス問題を回避

## テスト駆動開発

– 初心者は辛いだけ
– まずはLaravelを楽しむ事が大切
– サービスの規模が大きくなってからでも間に合う

## DI(依存性注入)
– Laravelのメリットではあるが、初心者の手に負えな

元記事を表示

スペース区切りの文字を配列に格納する

スペースで区切られた文字を配列に格納して出力するプログラムを実装しました。
explode関数を簡易的に実装しています。

“`html






スペースで区切られた文字を配列に分ける


元記事を表示

MAMPについての概要&インストール方法(Mac)

# 背景
PHPを使った開発をするため、macでの環境構築が楽そうな**MAMP**を使ってみた。
今回は**MAMP**の概要とセットアップの方法について記す。
# MAMPとは
Macintosh、Apache、MySQL、PHPの各頭文字を取った略称。
Web開発に必要な上記のソフトウェアを一括でインストールし、ローカルにサーバー環境を構築することができるソフトウェアである。
# インストール方法
## ①MAMPをダウンロード
[MAMP公式サイト](https://www.mamp.info/en/mac/)から「Free Download」をクリック。
![image01.jpeg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/453680/a2d9a7b8-fb62-0a55-d5bc-c584d3d03f48.jpeg)
Macに搭載されているCPUによってダウンロードするパッケージが異なる。
– Intelの場合:MAMP & MAMP PRO(Intel)
– M1/M2チップの場合:MAM

元記事を表示

Array Shapes/ジェネリクス記法とPHPStanを使って配列要素の型をチェックする

## PHPの配列要素の型がチェックできない問題
この、PHPの配列要素の型をチェックできない問題ですが、みなさん一度は思われたことがあるのではないでしょうか?関数やメソッドの引数や返り値、オブジェクトのプロパティにについては型はつけやすくなりましたが、配列の内部構造はまだまだです

例えば関数の戻り値に`array`を指定している場合、配列以外の型を持った値を返そうとするとエラーになりますが、配列の要素に関しては何が入ってこようとエラーは出ません。そのため、思わぬバグに繋がってしまうことがあるのです

そこで本記事ではその解決策となるテクニックをご紹介していきます

## 結論:Array Shapes/旧PSR-5形式のジェネリクス記法で記載し、PHPStanを使用して解析する
早速結論ですが、**PHPDocのArray Shapes記法とPHPStanを組み合わせて配列要素の型をチェック**します

ざっくりと言うと、Array Shapes/旧PSR-5形式のジェネリクス記法でDocコメントを記載し実装を進め、その後に静的解析(PHPstan)を実行することで、型チェックをす

元記事を表示

OTHERカテゴリの最新記事