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

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

【PHP】余り計算の活用方法

“`PHP

“`

元記事を表示

Laravel ミドルウェアでIP制限をする

開発環境等、IPでアクセス制限をかけたい場合
例えばAWSを使っていればセキュリティグループでIP制限をかけたりします。

しかしIP制限をかけるエンドポイントを柔軟に変更したり、複雑な条件によってIP制限をかけたりしたい場合はLaravel側でIP制限をかけた方が良い場合があります。

## 環境

– PHP 8.0.10
– Laravel 8.58.0

## ミドルウェアを作成する

– [Laravel 8.x ミドルウェア](https://readouble.com/laravel/8.x/ja/middleware.html)

“`shell-session
$ php artisan make:middleware Firewall
“`

Laravelではリクエストの検証、フィルタリングする場合はミドルウェアという便利な機能が用意されています。
IP制限をかけるので名前は`Firewall`にしてみました。

“`php:app/Http/Middleware/Firewall.php

元記事を表示

Laravelで”could not find driver”が発生する原因(MySQL)

##原因

PHPとデータベースサーバー間を接続するPDOドライバが見つからないこと。

##解決

php.iniファイル(939行目)のコメントアウトさせたコードを直す必要があります。
windowsであればwhereコマンド、Linuxであれば、whichコマンドでphp.iniのpathを調べてください。

“`php:Command
where php.ini
//windowsの場合

which php.ini
//Linuxの場合
“`
次に以下のコードを直します。

“`php:php.ini
//extension=pdo_mysql
“`

“`php:php.ini
extension=pdo_mysql
“`

##結論
PHPとデータベースサーバー(今回はMySQL)を接続するPDOドライバが使えていませんでした。

元記事を表示

Laravel で長いコールバック関数を関数化する方法

## この記事について

関数を関数化するって意味がわからないですが、適切なタイトルがわからなかったので、こうしました。本文を読んでいただければ言わんとすることはわかってもらえると思いますので適切なタイトルが思いつくまではこれでいきます(どなたか適切なタイトルを思いついたらコメント欄にて教えてください)。そもそもこれは Laravel 関係なくて PHP のトピックですが、Laravel 使ってるとやたらコールバック関数を使うので、Laravel を使うなら知っておいたほうがいいトピックだと思ったのでタイトルに Laravel と入れました。

要は、コールバック関数をメソッドなりクラスなりに移して、引数部分をシュッとしたいというときにどう書けるか、ということです。

Laravel 上でコードを書いてるとコールバック関数を使う場面が多いですが、引数にそのまま無名関数を渡すことがほとんどだと思います。ときどきその関数が長くなって可読性が低いコードを見かけるので、あまりに長いやつはメソッドなり外部クラスなりに移動したほうがいいんじゃないかと思っていて、PHP では `callable`

元記事を表示

【PHP】foreachで最初と最後を判定する

# 最初に

PHPをforeach文は中身を順に取り出してくれるので便利ですが、for文のようにループカウンタとして使う値がないため、「n番目」の値を取り出すというのは少し工夫が必要です。

今回は、そんなforeach文で、最初と最後を判定する方法をまとめました。

# reset()とend()を使う

検索するとよく出てくるやり方で[す。

[reset()](https://www.php.net/manual/ja/function.reset.php)は、配列のポインタを配列の要素の先頭に、[end()](https://www.php.net/manual/ja/function.end.php)は配列の要素の最後にセットします。
[ポインタとは](https://ja.wikipedia.org/wiki/%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF_(%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0))

これを使うことによって、foreachで取り出された一つ

元記事を表示

git push の際にpre-receive hook decliedというエラーが出たときの対処

#環境
OS: Windows10

“`console
$ php -v
PHP 8.0.9 (cli) (built: Jul 29 2021 14:12:27) ( NTS Visual C++ 2019 x64 )
Copyright (c) The PHP Group
Zend Engine v4.0.9, Copyright (c) Zend Technologies

$ chocolatey -v
0.10.15

$ php artisan –version
Laravel Framework 7.30.4
“`

#事象
Herokuにアプリを作成してgit pushしようとしたら以下のエラーが発生してpushが完了できない。

“`console

// 省略
remote: ! Push failed: cannot parse Procfile.
remote: ! Please try pushing again.
remote: ! If the problem persists, see https://help.h

元記事を表示

【超基本データベースの話】PDOクラスとは

#はじめに#
 バックエンドエンジニアを目指されている方にとっては、データベースは必須の知識になります。今回はデータベースの超基本的なお話とPHPで使われるPDOクラスというものについてまとめていきたいと思います。

#データベースとは#
 データベースとはさまざまなデータを保存し、必要な時にすぐに使えるように整理したものです。例えば、ログイン認証や商品情報登録などで使われます。データベースを用いることで、膨大なデータを保存できる上、それらを並べ替えたりグループ化したり必要な形式に加工して取り出すこともできます。

 データベースにも色々種類があるようですが、ここではRDB(リレーショナルデータベース)を取り上げていきます。RDBとは表形式のデータベースで、エクセルのように列と行から成り立っています。列には、どんなデータが保存されてるかを表す”カラム”と呼ばれるものが設定されており、それぞれの行に対応したデータが保存されています。これらの列と行のまとまりを**テーブル**と言います。データベースは通常、複数のテーブルから成り立っています。

##使用例##
 例えば、ショッピングサイ

元記事を表示

呪術廻戦で俺が学ぶMySQL②【PHP】

こんにちは!
先日、呪術廻戦で俺が学ぶ[MySQL①【PHP】](https://qiita.com/hayatoganbaru/items/f9ae47370cce8b8ec4a6)をアップしましたが、
今日はその続きです。

さらに新しいことをアウトプット、前回の記事より理解度が上がった箇所は
もう一度ディグってみます。
そもそもデータベースとは?SQLとは?とか突かれると
答えられなくて泣きながら走って逃走する自信しかないので
ちゃんと言語化できるように今度記事にしてまとめます(絶対やる)

# カラムを追加

![スクリーンショット 2021-09-05 11.13.57.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1435543/cbce6125-c5ae-80d2-7fe0-56bbccd7e575.png)

前回よりデータ増やしました。
ちなみに僕の好きな術式は投射呪法です。
ちょっと領域展開がなさそうなのが不安ですが、
僕なら投射呪法を会得したいなあ。

例えば上図のmagician

元記事を表示

LAMPってなんぞや

PHP勉強中にDockerで詰まったから、Linuxとかサーバー回りをちゃんと知ろうと思った。
ある程度調べてたつもりだけど、思ってたより分かってなかったからまとめておく。

:::note info
L・・・Linux:サーバーとして機能させる。(OSとしても使える。)
今回はCentOS8を導入。試しにGUI入れたら悪くなかったのでワンチャン普段使いできる?

A・・・Apache:ブラウザからアクセスを受けたときに、HTMLを返してくれる。
サーバー側で動くので、Linuxに入れておく。

M・・・MySQL:データベース
データを格納するくらいの認識しか出来てないから勉強しなきゃ…

P・・・PHP:だと思ってたけど昔はperlだったみたい。最近はPythonかな。
:::

LA部分がボヤっとしてたから、多少すっきりできたかな?

元記事を表示

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

今回の動画ではControllerとViewを使って文字を画面に表示するらしい。

【CakePHP3】ControllerとViewで画面表示【入門】

最初はMVCモデルについて説明。
分かり易く図示してくれてる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/694662fd-7765-650b-024a-42510850aacd.png)

今回はエディタとしてATOMを使用するとの事だが、ATOMのインストールについては説明がないので一応貼っておく。  ※他のエディタを使っても何も問題は無い。
ココからDownload → https://atom.io/
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/102625/841a6699-a0ee-2d8

元記事を表示

Laravelでuuidをidとするモデルを作りたいとき

LaravelのEloquentモデルのidは通常数値なわけですが、uuidを使いたい!といった場合があると思います。

そういった場合、

“`php
$post = new Post();
$post->id = Str::uuid();

$post->save();
“`

といった形を取るかもしれないのですが、もっと良い形で書く方法があって、それはイベントを利用する方法です。

“`php
class Post extends Model
{
protected static function booted()
{
static::creating(function(Post $model) {
$model->id = Str::uuid();
});
}
}
“`

このように書くことによってidをセットしてなくとも作成しようとするときに自動的にuuidが作成されて保存されます。

オブザーバークラスを作る方法もありますが、これくらいであればそのまま書いて良さそうです。

この辺

元記事を表示

dd();の使い方

初めまして。名倉と申します!メモをする事が重要だと気づき、早速初めてみました^^
第1回目ですorz

– dd();の使う意味

コントローラーが通って動いているか?
とあるボタンを押したら、情報が渡せているか?
と確認する事ができます。

メリットとしては、
こまめに確認することによって、

* どこで、
* どんな理由で問題が起きているか?

と早期発見することができます。

※ちなみに私は共同開発の終わり頃に知って、自分の頭で仮説実行して狂ったように時間が溶けて行ったことを覚えています。

– そもそも、dd();って何?

ヘルパ関数です。
指定された変数の内容を表示し、実行を停止します。

– 使い方

(例)
![D5BF7AB2-D74D-4E12-A535-13325717A5F4.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1958909/c72845be-e3aa-f6cf-0979-f9d8e48a23df.png)

上記は、ArticleController.php

元記事を表示

PHP基礎

##最初に
今までphpを触ったことがなかったので基礎部分を学習しました。

—–

##基礎の基礎

phpはHTMLに埋め込んで使用可能。で囲まれた部分がHTMLに変換され表示される。

“`php
//文末に;(セミコロン必要)

//一行の時は;(セミコロン不要)

//変数は最初に$をつける
$sample = ‘hoge’;
“`

”(シングルクオート)は文字列をそのまま出力する。
“”(ダブルクォート)は変数を展開する。

:::note info
html表示の改行文字はbrタグ
ソース表示の改行文字は改行コード\n
:::

####出力

“`php

元記事を表示

DockerでLaravel×Nginxの開発環境を構築する(PHP8)

# 概要
Laravel×Docker環境を作成する事になったので、自身のメモついでに書いていきます。

# 構成
Nginx, php-fpm, MySQL, Docker, Docker Composeの環境構築します。
※今回は最小限の構成で作成するので、必要に応じて修正してください。

最終的には下記のようなディレクトリ構成になります。

“`
|── app
| |── Http
| └── …etc
├── docker
│   ├── app
│   │   ├── Dockerfile
│   │   └── conf
│   │      └── app.ini
│   └── nginx
│   └── conf
│   └── nginx.conf
└── docker-compose.yml
“`

# 各種バージョン
PHP 8.0.9
Mysql 8.0
Nginx 1.21.1
Laravel 8.54

# docker/app/Dockerfile
最終的にECSで稼働させる事を前提としていたため、イメ

元記事を表示

二分探索法について 値の探索(paiza)

# はじめに
paiza問題集 二分探索 値の検索(PHP編)を解いたので二部探索について自分用にまとめる。

[二分探索 値の検索](https://paiza.jp/works/mondai/binary_search/binary_search__basic_step0)

# 二分探索法とは?
探索の代表的なアルゴリズムの一つ。
探索対象のデータ群が***「昇順」***または***「降順」***に並んでいる場合に使用できる。
二分探索法は、データ群をざっくりと二つに分けながら対象を絞り込んでいく探索法。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/381376/ef2cafbb-62b4-527b-7c92-f2ba73c0d477.png)

上記画像の例で説明すると
まず、配列の真ん中の値である「7」と今回検索したい「9」を大小比較する。
9のほうが大きいため、探索範囲を右半分に絞る。
次の探索範囲の真ん中の値である「11」と検索したい「9」を大小比較する。
9のほうが

元記事を表示

Nextcloudにおけるphp-fpmのチューニング

#やたらNextcloudの動作が重い
前回Nextcloudのセットアップを記事にしましたが、そのまま使うとメモリが足りなかったりCPUのスレッドを食いつぶしたりすることが判明したので、それぞれのスペックに合わせたチューニングを書いておこうと思います。

#前提条件
* php-fpm+nginxの環境で動作していること。
* Nextcloudの最低推奨メモリ量である512MB以上を割り当てられるシステムメモリが搭載されていること。
* php-fpmのプロセスマネージャモードがdynamicになっていること。

#PHP-FPMのプロセスに関する項目の解説

###pm(プロセスマネージャモード)および関連設定値
プロセスマネージャが子プロセスの数を制御する方法と、子プロセスの最大、最小数の設定値。

“`
static
> 子プロセスの数を固定して稼働させる。
負荷が掛かってもメモリ使用量とCPU使用率があまり変化しない分、パフォーマンスが低下しやすい。

ondemand
> これについてはよく把握出来ていません。すみません。

dynamic <-今回はこの

元記事を表示

【Laravel】Trying to get property ‘〇〇’ of non-object(View: /〜/views/menu/index.blade.php) の解決方法

#エラー概要
このエラーは、〇〇に値が入っていないのに、プロパティを参照しようとしてるよっていうエラーです。

#エラー発生時のコード

“`php:menu/index.blade.php
@foreach ($items as $item)

{{$item->time}} {{$item->user->name}}

@endforeach
“`

“`php:MenuController.php
public function index(Request $request)
{
$items = Menu::with(‘user’)->get();
return view(‘menu.index’,[‘items’ => $items]);
}
“`

#解決方法
値がなくてもnullを返してくれるようにヘルパー関数`optional()`を使います。

“`php:menu/index.blade.php
@foreach ($items as $

元記事を表示

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

どうしてこんな簡単な事に今まで気づかなかったのだろう…
変数から変数名を取得しようとする場合、変数名はすでにわかっているものなので、逆に、
変数名から変数を取得してもいいのです。

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

変数が少ない時は、

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

で十分なのですが、

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

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

ところが、ユーザー関数の内部では「スコープが異なる」ため、ユーザー関数の外部の変数を内部で直接扱う事はできません。「ユーザー関数に(引数として)変数を引き渡す」という作業が必要になります。

しかし、
「**変数**から**変数名**を取得する」のはなかなか大変なようです。そこで発想を転換

元記事を表示

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ファイルでエラーがあると出てしまう

元記事を表示

OTHERカテゴリの最新記事