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

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

【実践】Laravel+MySQLの全文検索機能実践

# はじめに

`LIKE`検索は全ての行に対して条件に合致するかを判定するのでデータが増えるにつれ検索速度が遅くなる場合があるようです。

この記事では、MySQLの全文検索機能を導入した方法についてハンズオン形式で紹介させていただきます。

https://dev.mysql.com/doc/refman/8.0/ja/fulltext-search-ngram.html

完成系のリポジトリ
@ucan-labさんの記事を参考にLAMP環境を構築いたしました?‍♂️

https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4

https://github.com/nao-haba-dev/ngram-docker-laravel

# 事前準備
– GitHub・Dockerが利用できる準備をお願いします

https://github.com

https://qiita.com/ucan-lab/items/aadbedcacbc2ac86a2b3

– MAC

https://docs.docker.com/deskt

元記事を表示

docker-laravel の Docker 構成をちゃんと理解する【Dockerfile 編 – Nginx】

@ucan-lab さんの [docker-laravel](https://github.com/ucan-lab/docker-laravel) の環境をちゃんと理解するための記事

今回は Dockerfile の Nginx 編です。

[docker-compose 編](https://qiita.com/tkek321/items/9c0c5cec1dc349c67f5f)
[Dockerfile 編 – PHP](https://qiita.com/tkek321/items/5d7714d7170bbf379c11)

# Dockerfile

https://github.com/ucan-lab/docker-laravel/blob/main/infra/docker/nginx/Dockerfile

“`dockerfile:dockerfile
# — ① ビルドイメージの指定 —
FROM node:16-alpine as node
FROM nginx:1.20-alpine
# ——
# ② メタデータを追加
LABEL ma

元記事を表示

PHP 8.1 Enums を使ってみる

## 列挙型(Enumerations)

PHP8.1で実装されたEnumの使い方を軽くご紹介します。

## 環境

“`shell-session
$ php -v
PHP 8.1.1 (cli) (built: Dec 17 2021 23:49:52) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.1, Copyright (c) Zend Technologies
with Zend OPcache v8.1.1, Copyright (c), by Zend Technologies
“`

## 使い方

“`php

元記事を表示

『SQLアンチパターン』まとめその4(19〜25章)

[SQLアンチパターン](https://www.oreilly.co.jp/books/9784873115894/) をまとめました。
この本では、

1. [データベース論理設計のアンチパターン(1〜8章)](https://qiita.com/Natsumag/items/c9c91f6fa7a3af6dd1d1 “『SQLアンチパターン』まとめその1”)
1. [データベース物理設計のアンチパターン(9〜12章)](https://qiita.com/Natsumag/items/9eb3c32a3193c74abbe6 “『SQLアンチパターン』まとめその2”)
1. [クエリのアンチパターン(13〜18章)](https://qiita.com/Natsumag/items/aca26493cd071a573c4a “『SQLアンチパターン』まとめその3”)
1. アプリケーション開発のアンチパターン(19〜25章)

の4つのパートに分けてそれぞれのアンチパターンを解説しており、
この記事では「__4. アプリケーション開発のアンチパターン__」について記述します。

元記事を表示

Laravelのnullチェック使い分け(随時更新)

## Request
以下がある。

– isset()
– is_null()
– empty()

※PHPのネイティブメソッド
各メソッドの違いは[こちら](https://qiita.com/xQIEBo4zFWKZ0ig/items/a69ec15aa1697b13d666)

### ちなみに : Requestのnull挙動
– そもそも対象のnameが存在しない時
nullになる

– nameは存在するが、valueが空の時
これもnullになる

## Collection
以下がある。

– isEmpty()
– isNotEmpty()

※Laravelのコレクションメソッド

## 参考文献
https://readouble.com/laravel/6.x/ja/collections.html

元記事を表示

PHPのnullチェック使い分け

## nullのみチェック
### isset
– nullの時だけfalse
– 空文字、空配列はtrueになる

### is_null
– nullの時だけtrue
– 空文字、空配列の時はfalse

## 全チェック
### empty
– null、空文字、空配列すべてtrueになる

## 参考文献
https://qiita.com/shinichi-takii/items/00aed26f96cf6bb3fe62

元記事を表示

【PHP】if文で「isset()」を使うより「??」を使うべき理由がコレ

以前ちょっとだけPHPのチームに所属していた時に、タイトルの通り、__ある変数に値が入っていた場合にのみ、その後の処理を行う__ようにコードを書こうとしていました。

なんてことない処理なのですが、自分が思いつくままに書いたコードはこんな感じでした。

“`php
if (isset($someVar)) {
echo(“Uno”);
}
“`

そして、そのままプルリクエストを出したのですが、
レビュアーの先輩から「こんな書き方で動かないかな?」というコメントと共にこんなコードを送られました。

“`php
if ($someVar ?? “”) {
echo(“Uno”);
}
“`

それまでPythonしか触ってこなかったので、「ダブルはてな?なにこれ?」となりました笑

この「??」の働きとしては、ざっくり言うと__「??」の前にある変数に値が無い場合には、「??」の後ろにある変数の値に置換する__というものになります。

基本的な使いかたについては[こちらの記事](https://tektektech.com/php-double-question/

元記事を表示

VSCodeのPHP IntelephenseでPHP8.1の記法記載時にエラーがでる

# はじめに

ローカル環境にて、PHP8.1 にバージョンアップしたところ、PHP Intelephense 拡張機能でエラーが出るようになってしまいました。
どうやら readonly アクセス修飾子を型と認識しているようです。

![php_intelephense_error.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/586387/09e59da7-40a6-1d12-adf9-f7b4d498220d.png)

# 結論

:::note info
settings.json に PHP Intelephense の設定で PHP バージョンを指定すれば OK
:::

“`json-doc
{
// ターゲットのPHPバージョンを表すsemver互換の文字列。
// バージョンに適した提案と診断を提供するために使用されます。
// PHP5.3.0以降がサポートされています。
“intelephense.environment.phpVersion”

元記事を表示

macOS Monterey(12.0.1)にapacheとphpを設定する

Montereyからapacheのデフォルトでphpがオフになってしまった。
いろんなサイトで情報を継ぎはぎしたので、自分の場合、うまくいった方法をメモる。

brewを更新

“`
$ brew update
“`

#H2 apacheをインストール
“`
$ brew install apache2
“`

/usr/local/etc/httpd/httpd.confの以下を設定/変更。
* Listenを80
* Servernameをlocalhost:80
* mod_include.so がコメントアウトしてあるので、有効化する。
* DocumentRootを設定する

apacheをリスタートする。

“`
$ sudo apachectl restart
“`

#H2 PHPをインストール
元々、php 8.1が入ってたんだけど、どうやってもapacheとの連携ができなかったので、7.4バージョンを落として環境を作った。

“`
$ brew uninstall php
$ brew install install php@7.4
“`

元記事を表示

【PHP】filter_inputを使用したサニタイズ

#背景
ユーザーからの入力をデータベースに格納することは基本だと思うので、学んだついでに自分の忘備録として書いています。
#フォームからの入力
入力フォームでユーザーが入れた値を、データベースに格納する。

“`html:メモの入力画面



メモの入力





“`
“`PHP:入力を登録する操作

元記事を表示

[PMMP] Enum(列挙型)を使おう!

※この記事はPocketMine-API 4.0.0が対象です

# PMMPではEnumがPHP8.1じゃなくても使える!
PMMPには、[EnumTrait](https://github.com/pmmp/PocketMine-MP/blob/4.0.0/src/utils/EnumTrait.php)というTrait(機能)が実装されているので、これを使うことで実装することができます。

# Enumを使う理由
Enumを使用しない場合、例えば以下のようなコードになると思います。

“`php
class Trump
{
public const SUIT_CLUB = 0;
public const SUIT_DIAMOND = 1;
public const SUIT_HEART = 2;
public const SUIT_SPADE = 3;

private int $suit;

public function __construct(int $suit)
{
switch ($suit) {

元記事を表示

【Laravel8.4】composer create-project laravelでエラーが出たときの解決方法

#GitBashにコマンドを打ったらエラーが出た。

“`
composer create-project laravel/laravel=”8.4.*” laravel
“`

##エラー文
“`
Problem 1
– laravel/framework[v8.12.0, …, 8.x-dev] require league/flysystem ^1.1 -> satisfiable by league/flysystem[1.1.0, …, 1.x-dev].
– league/flysystem[1.1.0, …, 1.x-dev] require ext-fileinfo * -> it is missing from your system. Install or enable PHP’s fileinfo extension.
– Root composer.json requires laravel/framework ^8.12 -> satisfiable by laravel/framework[v8.12.0, ..

元記事を表示

『SQLアンチパターン』まとめその3(13〜18章)

[SQLアンチパターン](https://www.oreilly.co.jp/books/9784873115894/)をまとめました。
この本では4つのパートに分けてそれぞれアンチパターンを解説しており、

1. [データベース論理設計のアンチパターン(1〜8章)](https://qiita.com/Natsumag/items/c9c91f6fa7a3af6dd1d1 “『SQLアンチパターン』まとめその1”)
1. [データベース物理設計のアンチパターン(9〜12章)](https://qiita.com/Natsumag/items/9eb3c32a3193c74abbe6 “『SQLアンチパターン』まとめその2”)
1. クエリのアンチパターン(13〜18章)
1. [アプリケーション開発のアンチパターン(19〜25章)](https://qiita.com/Natsumag/items/3d8a841a2294d6a24be8 “『SQLアンチパターン』まとめその4”)

この記事では「__3. クエリのアンチパターン__」について記述します。

#目次

[第13章-F

元記事を表示

Laravel ってなに?

## 勉強前イメージ

聞いたことはある
プログラム的なやつ?

## 調査

### Laravel とは?

ララベル と読み、PHPのフレームワークになります。
フレームワークというのは、
システム開発をする際に必要となる機能などがまとまったものになります。
PHPのフレームワークは他にもCakePHP等があります。

### Larabel の特徴

– MVCモデルの採用

model,view,controllerに分けられて、
それに伴い開発を進めます。
MVCモデルの使用で、どこに何を書くかが明確になり開発が進めやすくなります。

– Composerでパッケージ管理

Composerというパッケージやライブラリを管理するツールで
LaravelはComposerで管理されます。
Composerを使うことで依存性の解決や必要なライブラリがあればインストールされます。

– データベースの操作が安易

Eloquent ORMとMifrationというのが備わっているので
データの扱いを柔軟にし、データベースの管理を安易になっています。

– 機能やプラグインの開発が

元記事を表示

「MySQLでデータベース作成」と「PHPでデータベース記録」。(8日目)

Kotlinのスマホアプリ(クライアント)が、ほぼ完成したので、サーバ側で受信したデータを記録する為、データベースを作成していきます。

サーバは、契約済みのロリポップを使用。

#前回の記事

Kotlinで地図アプリ(ゴミ拾いアプリ)作成。(7日目)

https://qiita.com/fix/items/79afbea4d8c44c5a1f9c

##一週間でやった事

* **GoogleMap APIを使い、地図+位置情報を表示**
* **移動に合わせて、マップがスクロール**
* **ゴミの種類を「大・中・小」にわけ、ボタンアイコンを作成**
* **ボタンにイメージアイコンを作成**
* **ボタンタップ後、サーバー側へHTTPS(GET)でデータを送信(BASIC認証)**
* **送信前に確認ダイアログを表示**
* **送信後、地図上にアイコンを表示**
* **アイコンタップで、種別/時間を表示**
* **サーバー側でBASICに認証**
* **サーバー側でPHPを使いGETデータ記録テスト**

#ロリポップサーバでデータベースを作成

ログインし、

元記事を表示

LaravelのcommandでUser以外のDBデータをEloquentで取り出せない件

## TL;DR
Laravelは便利なもので、php artisan hogehoge ってコマンドを簡単に作れます。
これを利用して定期実行させたりもできて使っているのですが、、

**User以外のmodel呼び出しでeloqunet使えない!!!**

結局、インジェクションのリスクが少ない箇所だったので、直接SQL叩いて解決しました。“`DB::select(DB::raw())“`

# 症例

例えば

app/Console/Commands/HogeCommand.php

“`php
public function handle()
{
$users=User::get();
//色々な処理
return Command::SUCCESS;
}

“`

これは出来るわけです。

でも、このユーザーに紐付いた日記テーブル(diaries)から値を取ろうとすると

“`php
public function handle()
{
$users=User:

元記事を表示

JSON データを POST で受けるテストサーバを作る

IoTデータを受けるサーバでは、API として JSON データを POST するものが多い。
ちゃんと JSON データが送られているかな? とデバッグする時に、自前でちゃちゃっとテストサーバーを作ってみる。

# PHP スクリプト

“`






“`

最初は

“`

// $data = $_POST[‘data’];
// echo $data;
“`

としていたが、JSONのPOSTは通常のPOSTメソッドじゃないということで、上記のように

元記事を表示

Laravelで直接SQL文を実行する

Laravelで直接SQLを実行するにはその種類によってメソッドが変わります。参照系の場合には `DB::select()` を利用します。

“`php
$sql = “select i.* from input_tmps i
where i.id is not null;”;
$rows = DB::select($sql);

$retArray = [];
/** 結果取得 **/
foreach($rows as $row) {
$retArray[$row->id][] = $row->value;
}
“`

LOCK文等の場合には `DB::unprepared()` を使います。

“`php
DB::unprepared( ‘LOCK TABLES ‘ .
DB::getTablePrefix() . ‘input_tmps1 WRITE,’ .
DB::getTablePrefix() . ‘input_tmps2 WRITE,’ .
DB::getTablePrefix() . ‘input_tmps3 WRITE, ‘ .
DB::

元記事を表示

[PMMP]パーミッションを使う

※この記事では執筆時点で安定バージョンのPocketMine-MP API4.0.0に準拠しています。

# パーミッションとは
権限です(そりゃそうだ)、コマンドの実行権限を制御するのに使われることが一番多いと思います。
でも、どうやって使えばいいのか、なんで使ったほうがいいのか分からない人もいるかもしれません。
使ってみるとそこまで難しくはないので、是非使ってみてください。お願いします。使ってください…….

# パーミッションを使う理由
– OPであるかどうかに依存しない
– プレイヤーごとにパーミッションを与えるか制御することができる(e.g. VIPユーザー(OPではない)もOP専用コマンドを使用できるようにする)
– コマンドリスト(helpなど)にパーミッションが無くて使えないコマンドを表示させない
– `Permissible->hasPermission(DefaultPermissions::ROOT_OPERATOR)`とか訳分からん長い謎の定型文を書かなくていい!!

# 使い方

## パーミッションを登録する
パーミッションは、許可する物事ごとに

元記事を表示

Laravel7以下向けパッケージ開発でSeederにFactoryを使う

## 対象
* Laravel5,6,7系向けのパッケージ開発を行おうと思っている人
* パッケージとしてデータベースにデータを登録する必要がある
* パッケージ開発自体はやったことがある

## 概要
* composer.json の autoload で seeder や factory を読み込むようにする
* factory をパッケージ側でロードする
* seeder で factory を利用する
* seeder を組み込み側で呼び出す

## 詳細

`Vendor`, `Package` のところはそれぞれ置き換える。
クラス名などはそれぞれ好きなように。
ディレクトリ構造も例であって、autoload やパスを正しく設定できれば好きな構造で問題ない。

### ディレクトリ構造
– database
– factories
– UserFactory.php
– seeds
– DemoSeeder.php
– migrations
– src
– ServiceProvider.php

元記事を表示

OTHERカテゴリの最新記事