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

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

PHP 変数から変数名を取得する(PHP 変数名から変数を取得する)

# PHP 変数から変数名を取得する(PHP 変数名から変数を取得する)

どうしてこんな簡単な事が今までできなかったんだろう…

## 動機
PHP デバッグ時、「変数名・値」の対応表を出力したいことがあります。

変数が少ない時は、

“`
echo ‘$変数名1 = ‘.$変数名1;
echo ‘$変数名2 = ‘.$変数名2;
“`

で十分なのですが、

「多くの変数を、いろんな場所で、どのように変化しているかチェックしたい」
「時々、変数のリストを変更したい(増やしたい)」
「チェックのための行が増えるのは嫌!」

そうなってくると、たくさんの場所に、
「変数の配列をユーザー関数で処理したい」
というニーズが出てきます。

しかし、
「**変数**から**変数名**を取得する」のはなかなか大変なようです。そこで発想を転換し、
「**変数名**から**変数**を取得する」ことにしました。これなら get_defined_vars() を使って、割と簡単にできます。

## get_defined_vars()
get_defined_vars() は、それが呼ばれた

元記事を表示

Xdebug ブレークポイントで止まらない!

vscodeとxdegugで快適なデバッグ生活を送りたいと思いググりながら設定したのにブレークポイントで止まらない!

ハマった所をQiitaに残します

## 環境

Mac上にdocker環境を構築。

– docker
– php-fpm (PHP v8.0.8)
– xDegug v3.0,4
– laravel 8

php-fpmのコンテナにxdebugを入れる
(今回は直接コンテナ入って実行してます)

“`sh:
apk add autoconf build-base
pecl install xdebug
docker-php-ext-enable xdebug
“`

## xdebugの設定でまずハマる!

google先生に「vscode xdebug docker」等ででググるとxcodeのv2系の記事がヒットします。

https://qiita.com/gigosa/items/90431be7a6a79db78480

このような設定が書かれています。

“`ini:php.ini
[xdebug]
xdebug.remote_enable

元記事を表示

【Laravel】find()とfindOrFail()の違い

# find()とfindOrFail()とは
Laravelで提供されているデータ操作の為の機能であるEloquent ORMのメソッドのひとつ。指定したidのレコードを取得することができる。

# 2つのメソッドの違い
## 定義の仕方
### find()

“`PHP:
$flight = App\Flight::find(1);
“`

### findOrFail()

“`PHP:
$flight = App\Flight::find(1);
“`

## idが見つからなかったとき
* find():nullを返す。
* findOrFail():エラー(404HTTPレスポンス)を返す。例外処理。

# どちらを使うべきか
### findOrFail()の方が良い(と思う)
* 見つからなかった時に、nullかエラーか、どっちを出したいかで決めると良い。

## find()

* 全然違う場所にエラーが出てしまい、原因を見つけることが難しい。
* コントローラーでid番号を探すクエリを出したのに、エラー画面では、Viewファイルでエラーがあると出てしまう

元記事を表示

【Laravel】テーブルのリレーションについて

#リレーションとは
テーブル同士の関連付けのことを言います。
リレーションにはいくつかの種類があり、それぞれ関連付け方が異なります。
早速、リレーションの種類を1つ1つ見ていきたいのですが、ここでは主テーブルをuserテーブル、従テーブルをpostテーブルとして説明していきます。
※今回は、コントローラーやビューの記述は割愛させていただきます。

#リレーションの種類
##has One
「1対1」の関係で、主テーブルは従テーブルからデータを引っ張ってくることができます。
主テーブル側のUserモデルに以下のように記述します。

“`php:User.php
public function post()
{
return $this->hasOne(‘App\Models\Post’);
}
“`

##has Many
「1対多」の関係で、これも`hasOne`と同様、主テーブルが従テーブルからデータを引っ張ってきます。
主テーブル側のUserモデルに以下のように記述します。
`hasOne`は1対1でデータを1つしか取り出さないので`post`と単数形でしたが、`has

元記事を表示

[PHP] 集計期間等の範囲の決め方

どのサービスでも、一定期間内にどれだけのログインがあったか等の集計をするバッチはあったりするかと思います。

今回初めて集計バッチの実装をしたのですが、その中で集計期間の範囲を決める
ロジックに対して指摘を受けたので、今後同じミスをしないためにも書き留めておきます。

## 要件

– バッチ実行日は毎週火曜日11時とする。

– 期間は実行日から見て1週間前の日曜日から先週の土曜日とする。
– 例 実行日が8月24日(火)の場合、8月15日(日) ~ 8月21日(土)になる。

## Carbon
PHPを使用してる人なら日付操作にCarbonを使ってる人は多いのではないかと思います。
CarbonとはPHPのDateTimeクラスをオーバーラップした
日付操作ライブラリのことです。→ [Carbon 公式](https://carbon.nesbot.com/)

## 指摘を受けた実装例

要件を満たす実装として下記の様な方法で実装してました。

“`AggregateReport.php

$count_to_start_day = now()->dayOfWeek

元記事を表示

[PHP] TraitのUnitテスト

PHPの`trait`のユニットテストを書く方法です。

## public関数
以下のような`trait`の`public`な関数を考えます。

“`php
greeet());
“`

もしくは、無名クラスでもOK。

“`php
$SUT = new class() { use SomeTrait; };
self::assertEquals(‘hello’, $SUT->greeet());
“`

## protected関数
以下の

元記事を表示

composer installでS3のregionが設定されていないというエラーが出る

## 現象
composer installすると以下のようなエラーが出る。

“`
> Illuminate\Foundation\ComposerScripts::postAutoloadDump
> @php artisan package:discover –ansi

InvalidArgumentException : Missing required client configuration options:

region: (string)

A “region” configuration value is required for the “s3” service
(e.g., “us-west-2”). A list of available public regions and endpoints can be
found at http://docs.aws.amazon.com/general/latest/gr/rande.html.

at /Users/shohei.hagiwara/s4bids_ponpare/admi

元記事を表示

Laravelのリソースコントローラー便利~~~!!

#リソースコントローラーとは
一般的なCRUD処理は以下の通り。
生成(Create)、読み込み(Read)、更新(Update) 、削除(Delete)

しかし気の利くLaravelちゃんには
「リソースコントローラー」という機能があり
7つの要素を持ったコントローラーを自動で作ってくれる。

|名前 |機能 |
|—|—|
|index |データを一覧表示 |
|create |新規作成用フォームの表示 |
|store |新規作成を保存 |
|show |作成データを個別表示 |
|edit |作成データ編集用フォームの表示 |
|update |編集したデータを保存 |
|destroy |データを削除 |

##実行方法
###コンソール画面

“`php
php artisan make:controller 任意のコントローラー名 –resource
“`

ふーん!やるじゃん!!
すごいじゃん!まだすごさを分かってないけど。
すごい予感がする。私の直感が!!鳥肌が立ってる!!

はい。リソースコントローラーでした!7つ

元記事を表示

【Laravel】SQLSTATE[HY000] [1045] Access denied for user ‘root’@’172.21.0.3′(using password: NO)エラーの解決方法(マイグレーション)

##【概要】
マイグレーション時、
SQLSTATE[HY000] [1045] Access denied for user ‘root’@’172.21.0.3′(using password: NO)
(意味:ユーザー’root’@’172.21.0.3’のアクセスが拒否されました。)
と返ってきた時の解決方法の一例です。

###1.開発環境
PHP 7.2.34
Laravel 6.20.32
Apache 2.4.6
mysql 8.0.26

###2.解決方法
キャッシュをクリアしてキャッシュを再作成した後、改めてphp artisan migrateをする。

“`
# php artisan cache:clear
Application cache cleared!

# php artisan config:cache
Configuration cache cleared!
Configuration cached successfully!

# php artisan migrate
Migration table created successful

元記事を表示

PHP を使用して Azure Blob Storage へアップロード

# 環境
– Windows10 Pro 64bit
– PHP 7.4.4
– Composer 2.1.5

ローカル環境にて PHP を使用した Azure Blob Storage へのアップロード検証。
以降、Cドライブ直下に `tutorial-azure-blob-storage` というフォルダを作成し、フォルダ内にて作業を実施。

# 事前準備

– Microsoft Azure Portal にてリソースグループ及びストレージアカウントの作成
– ホーム > ストレージアカウント名 > コンテナー
– コンテナーの作成(今回は `tutorial-container` を作成)
– ホーム > ストレージアカウント名 > アクセスキー
– 接続文字列をメモ

# microsoft/azure-storage-blob インストール
`microsoft/azure-storage-blob` をインストールする。

“`terminal
C:\tutorial-azure-blob-storage>composer require m

元記事を表示

【2枚目】おっさんが入門CakePHP (動画第3回)

第3回:CakePHPインストール【環境構築】

フレームワークのインストールですが動画見ていくと、
phpが動くか?まで確認するようです。
XAMPP入れた後何もしてないので
phpにpathが通っているはずもなくpathの設定手順まで説明してくれています。
Apacheのconfigを変更して再起動するとブラウザで確認できます。
![PHP_home.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/0fe0ba13-5522-d066-10b9-a9e872b5d3f7.png)

5年ほど前にcake使ったときは一個づつ入れてた気がするんだけど
今回はcomposerを使うようです。
![composer.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/6ab367d0-204f-8781

元記事を表示

【Laravel】seeder(シーダー)の使い方

#はじめに
テーブルの用意ができている前提で話を進めていきます。

seederを使うと…
####テストデータをデータベースに挿入することができます。

#seederの使い方
1) まずは、ターミナルもしくはコマンドプロンプトで以下のコマンドを実行し、シーダーファイルを作成します。

“`
php artisan make:seeder UserTableSeeder
“`

2) コマンドを実行すると、「database」内の「seeders」内に「UserTableSeeder.php」が作成されるので、runメソッドに以下のようにコードを記述していきます。

“`php:UserTableSeeder.php
public function run()
{
DB::table(‘users’)->insert([
‘name’ => ‘yusuke’,
‘mail’ => ‘yusuke@example.com’,
‘age’ => ’32’,
]);
}
“`

3) デフォルトで用意されている「D

元記事を表示

[PHP][Laravel]重い処理行うAPIの実行を止めたい

ローカルで動かしているLaravelで、重い処理行うAPIの実行を止めたい時の忘備録。
サーバー再起動やそれっぽいプロセスをkillしても動き続ける時。

### 結論

以下のコマンドで停止できる。

“`bash
$ sudo kill $(sudo lsof -t -i:8000)
“`

https://stackoverflow.com/questions/63913946/php-artisan-serve-keeps-working-even-after-i-shut-the-process-down-windows

### コマンド解説

lsofはオープンしているファイルを一覧表示するコマンド。
-iオプションで特定のポートで実行しているプロセスを表示できる。

“`bash
$ lsof -i:8000

COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
Google 91524 xxxxx 35u IPv4 0x6f9544b817401ad3

元記事を表示

はじめての投稿。マークダウンを練習します。

#初投稿です!
みほと申します。今からLaravelを勉強していきます。
毎日学んだことをQiitaの記事に投稿していくのでベテランエンジニアさん暖かく見守ったり辛口コメントも大歓迎です!!
反応いただけると嬉しいです。よろしくおねがいします 🙂

##今日学んだこと
【create.blade.php】

“`php
@extends(‘layouts.app’)
@section(‘content’)

モツ鍋食べたい!

@endsection
“`

元記事を表示

CodeIgniter 3 のクエリビルダで Nプレフィックスを付与する

# 環境
– CodeIgniter 3.1.11
– SQL Server 2016 SP2

# 発端
“`php
$sql = ‘
INSERT INTO user (id, name)
VALUES (
\” . $id . ‘\’,
N’ . $this->db->escape($name) . ‘
)’;
$this->db->query($sql);
“`
Nプレフィックスが必要な箇所で毎回、上記のように自力でクエリを書きたくない。

“`php
$data = [
‘id’ => $id,
‘name’ => $name
];
$this->db->insert(‘user’, $data);
“`
クエリビルダを使った際にいい感じに Nプレフィックスを付与させたい。

# 対応方法
`vendor\codeigniter\framework\system\core\Loader.php` 内の `database` メソッドを拡張する。

– `MY_Loader.php` を作成し `data

元記事を表示

グローバル変数の整理法

# 言語

PHP

グローバル変数と書きましたが、ローカル変数でも応用できます。

# 整理法1

こんなグローバル変数があるとします。

“`php
$bara = 1; //バラ
$kiku = 2; //菊
$sakura = 3; //桜
$ume = 4; //梅
$tulip = 5; //チューリップ
“`

これらを関数内で使う場合、いちいち `global $bara;` `global $kiku;` ・・・ と宣言しなければなりません。

こんな時は、関連する複数の変数を1つにまとめるとよいです

“`php
$flower = array();
$flower[‘B’] = 1; //バラ
$flower[‘K’] = 2; //菊
$flower[‘S’] = 3; //桜
$flower[‘U’] = 4; //梅
$flower[‘T’] = 5; //チューリップ
“`

関数内で使うときも `global $flower;` と1行でOKです

`$flower[0], $flower[1]` のような単なる連番だと保守性が

元記事を表示

【1枚目】おっさんが入門CakePHP (動画第1回~第2回)

チャンスラボの岡本です。

弊社の東京メンバーが、CakePHPの入門動画を作成して公開しているのですが
諸事情により当動画を見て勉強することになりました。

第1回:webシステムとは

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/40db93d2-4a4c-df73-3320-9006360596c1.png)
動画短いな。
7分弱なんで気楽に見れるかもだが。
一応技術者として理解しているつもりなので1.5倍速で見ました。
なるほど、初心者にも分かり易いと思われる。
技術系サイト見る様な人なら抑々知っとるわい。って感じ。

—-

第2回:XAMPPインストール

WEBシステムのおさらいとXAMPPの説明を簡単にした後は
ダウンロード

元記事を表示

AWS ES2にデプロイしたPHPファイルを表示させる

#AWS ES2にデプロイしたPHPファイルを表示させる
AWS ES2にデプロイしたPHPファイルをブラウザ上で表示する方法についてまとめます。(少しずつ精査してわかりやすい記事にしていきます)

##手順
*パブリックサブネットにEC2を配置する
[WEBサーバー用EC2の起動からWEBページの表示まで](https://qiita.com/ebtiag/items/c75140c59d59a620f89e)
*EC2にファイルをPHPファイルをデプロイ
[ローカルPCからAWS EC2にファイルをデプロイ](https://qiita.com/ebtiag/items/dd61ef90dcccefc1066c)
*デプロイしたPHPファイルをドキュメントルートの移動する
*EC2インスタンスにLAMPサーバーをインストールする
[Amazon Linux 2 に LAMP ウェブサーバーをインストールする](https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-lamp-amazon-linux-2.html

元記事を表示

【Laravel】ページネーションの実装方法

#はじめに
今回は簡単にできるページネーションの実装方法について説明します。

#ページネーションとは
たとえば、1ページに投稿を100件も表示すると、ユーザーも見づらいし、表示速度も落ちるし、システムの負荷も増えてしまいますね。
そこで、そのような長いコンテンツを複数のページに分けて表示させることをページネーションといいます。

#ページネーションの実装
1) コントローラーに以下のように記述します。

“`php:MenuController.php
public function index()
{
$menus = Menu::paginate(5);
return view(‘menus.index’, [‘menus’ => $menus]);
}
“`
`paginate`の引数に渡されている数字が1ページに表示する件数です。

2) テンプレートファイルに以下のように記述します。

“`php:index.blade.php
{{ $menus->links() }}
“`

#おわりに
これだけでページネーションを実装できるなんてびっくりで

元記事を表示

【Laravel】入力フォームの値の複合バリデーション

## やりたいこと

* Laravel で 生年月日が 年、月、日でバラバラにPOSTされるケース。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/21391/c030e098-1eef-1b5e-21fc-38081dc1d38e.png)

* 以下のように、単純にバリデーションすると 日付として成立しているかの検証ができない。
* 年、月、日 を 合わせて、日付として成立しているか評価したい!

“`php:example
// リクエスト例
request()->birthday_year;
request()->birthday_month;
request()->birthday_day;

// それぞれバリデーションする場合
‘birthday_year’ => ‘required|integer|date_format:Y’,
‘birthday_month’ => ‘required|between:1,12’,
‘birthday_day’ => ‘requ

元記事を表示

OTHERカテゴリの最新記事