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

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

【PHP学習_備忘録】 フォームデータを配列で受け取る,クロスサイトスクリプティングとは

##はじめに

本記事でやること
・フォーム入力用のHTML画面を簡単に作って、フォームデータを受け取るプログラムの作成
・エスケープ処理とは
・【セキュリティ】 クロスサイトスクリプティングとは

##フォームデータを受け取るプログラム

“`html:html



Document

好きな食べ物は?
好きな飲物は?



“`

“`ht

元記事を表示

【Laravel】php artisan serveで起動できない

###環境

OS: Windows10

“`
chocolatey -v
0.10.15

composer -v
______
/ ____/___ ____ ___ ____ ____ ________ _____
/ / / __ \/ __ `__ \/ __ \/ __ \/ ___/ _ \/ ___/
/ /___/ /_/ / / / / / / /_/ / /_/ (__ ) __/ /
\____/\____/_/ /_/ /_/ .___/\____/____/\___/_/
/_/
Composer version 2.1.6 2021-08-19 17:11:08

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 Technologie

元記事を表示

連想配列について

# PHP初心者

こんにちは!
Ruby on Railsによるオリジナルアプリケーションが落ち着いたので
他の言語を学びたいなあと思いPHPを勉強中です。
まだまだPHP初心者なので、メモ用として
投稿してみました。

# PHPの配列の記述法

“`php
$shaman = [“五条悟”, “七海健人”, “歌姫”];
“`

基本的にRubyの配列記述法とあんまり変わらないですね。
異なるのはPHPにはもう一つ記述法があるみたいです。

“`PHP
$shaman = array(“五条悟”, “七海健人”, “歌姫”);
“`
こちらはPHPのバージョン4.5以前で使われる記述の仕方みたい。
一つ目の配列の書き方は比較的新しい書き方らしいんやが、
近年のWebサーバーではほとんど使えるから記述が短くなるなら
一つ目の書き方がいいですね。

Rubyの時と同じく配列には添字が0始まりで付与されているので
下記のように入力すると

“`php
$shaman = [“五条悟”, “七海健人”, “歌姫”];
print($shaman[0]);
“`

![

元記事を表示

クライアントとサーバーでタイムゾーンを合わせる3つの方法

## 目次

1. あらかじめユーザー設定で登録したものをデータベースから取得する
2. フォームで選択させて送信する
3. JavaScriptで取得して送信する

## あらかじめユーザー設定で登録したものをデータベースから取得する

ユーザー設定にタイムゾーンの設定を設け、ユーザーに紐付けて保存します。

Carbon::parse($request->date, $user->timezone)

PHPの場合は以下の関数で取得します。

timezone_identifiers_list(\DateTimeZone::ALL)

セレクトボックスを用意すると良いでしょう。

@foreach (timezone_identifiers_list(\DateTimeZone::ALL) as $timezone)@endforeach

## フォームで選択させて送信する

日時を送信するフォームにタイムゾーンの入力

元記事を表示

Laravel入門メモ

#項目
1. アプリケーション用のディレクトリを作成
1. Webサーバの起動確認
1. `view`をいじってみる
1. DBとの接続設定
1. DBを操作する為の`モデル`,`コントローラ`,`マイグレーション`ファイルを作成
1. ルーティングの設定
1. DBから持ってきたデータをテンプレートへ送る

#1. アプリケーション用のディレクトリを作成
作業ディレクトリ内にlaravelアプリケーション作成用のディレクトリを作成する。

“`bash;
$ laravel new laravel_test
“`
これで配下に`laravel_test`が作成される。

#2. Webサーバの起動確認
Webサーバが起動するか確認をして、laravelが正常に動いていることを確かめる。

“`bash:
$ cd laravel_test
$ php artisan serve
“`

#3. `view`をいじってみる
`resources/views/welcome.blade.php`が前項で表示されたテンプレート。
この中身をいじって動きを確認する。

#4. DBと

元記事を表示

PHP8 で phpQuery を使う

### すぐ出るエラー おそらくPHP7以上 の対応

“`
Compile Error – Array and string offset access syntax with curly braces is no longer supported in APPPATH/vendor/phpQuery-onefile.php on line 2156
“`

エラーの通りソースコードを修正
2156行と2171行のエラーを修正 {数値} を {数値} へ
修正前

“`php
// 2156行
if ($param{0} == ‘n’)

// 2171行
else if (mb_strlen($param) > 1 && $param{1} == ‘n’)
“`

修正後

“`php
// 2156行
if ($param[0] == ‘n’)

// 2171行
else if (mb_strlen($param) > 1 && $param[1] == ‘n’)
“`

## この後に出るエラー

修正してもこういうエラーが出ます。

“`
phpQuery-o

元記事を表示

【初心者向け】ローカル変数とグローバル変数

今回も初心者向けに分かりやすく書いていきたいと思います!!

#変数とは
数値や文字列などのデータを格納するための箱のようなもの。
この変数という箱にデータを入れておくことで、あとから必要な場所で格納したデータを利用することができます。

#ローカル変数とは
関数の中で宣言した変数で、決められた範囲内(原則その関数内)でしか参照することができません。

“`php:php

“`

#グローバル変数とは
関数の外部で宣言した変数で、プログラムのどこからでも参照することができます。
グローバル変数を関数の中で使いたいときは、関数内に「global $変数名 ;」と記述して、グローバル変数を宣言しなければなりません。

“`php:php

“`

#おわりに
一般的にはロー

元記事を表示

LINE notifications channel for Laravel を作ってみた

# 経緯

[LINEのプッシュ通知](https://developers.line.biz/ja/reference/messaging-api/#send-push-message)をLaravelで実装しようと思って調べてみたら、[コミュニティが提供している通知チャンネル](https://laravel-notification-channels.com/about/#suggesting-a-new-channel)の中にLINE通知がなかったため、自分で作ってみました。
(LINEの国外ユーザ数を考えれば、提供されていないのは当然かもしれませんが、、)

# 環境

* PHP 8.0.9
* Laravel Framework 8.51.0

# 前提

* [LINE Messaging API](https://developers.line.biz/ja/docs/messaging-api/getting-started/)でチャネルを作成していて、`Channel access token`と`Channel secret`を持っている
* LINEの`use

元記事を表示

Debian 11 にPHP 7.4 をインストール(OS標準)

# はじめに

Debian11にPHPを標準インストール
親記事:[PHP, PHP-FPMの各種インストール方法とEOLまとめ](https://qiita.com/witchcraze/items/dfe3823554b7caba6f6a)

## LOG

### インストール

“`shell-session
# cat /etc/os-release
PRETTY_NAME=”Debian GNU/Linux 11 (bullseye)”
NAME=”Debian GNU/Linux”
VERSION_ID=”11″
VERSION=”11 (bullseye)”
VERSION_CODENAME=bullseye
ID=debian
HOME_URL=”https://www.debian.org/”
SUPPORT_URL=”https://www.debian.org/support”
BUG_REPORT_URL=”https://bugs.debian.org/”

# apt update;apt install -y php
… 略
“`

### 各

元記事を表示

「::class」ってなにしてるの?

phpで開発中になんとなく`::class`を使っていたけど、ちゃんと挙動を理解していなかったのでまとめる。

## 公式を見る
> ::class
> class キーワードでもクラス名の解決を行うことが出来ます。 クラスの名前が ClassName になっているクラスの完全修飾名を取得するにはClassName::class を使います。 これは、名前空間付きのクラスに使うと特に便利です。
>
> 例14 クラス名の解決

> “`php
> namespace NS {
> class ClassName {
> }
>
> echo ClassName::class;
> }
> ?>
> “`
> 上の例の出力は以下となります。
>
> “`
> NS\ClassName
> “`

引用元: https://www.php.net/manual/ja/language.oop5.basic.php#language.oop5.basic.class.class

クラスを指定する時にいちいち長ったらしい、名前空間

元記事を表示

Add [ foo ] to fillable property to allow mass assignment on [ foo ].

# Laravel Breezeにてregister時にエラー
## 背景
認証機能をLaravel Breezeで作成したところregister保存時にエラーが出る。

## 内容
![スクリーンショット 2021-08-21 17.22.56.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/557084/f954c7b5-2410-18e9-514b-7ba35a621eb7.png)

## エラーが示す意味
“どこのカラムに保存したらいいかわからない”という意味らしい。

## 解決法
app > Models > foo ファイルにホワイトリストを追加。

“`foo.php
@var array

protected $fillable = [
‘name’,
‘email’,
‘password’,
];
“`

## 参考
– https://qiita.com/hitochan/items/8200ee440d5923f

元記事を表示

大量のデータ(最大10万)から値を検索 指定要素の検索 (query)

# はじめに
Paiza問題集の問題です。問題は以下のものです。
[指定要素の検索 (query) ](https://paiza.jp/works/mondai/query_primer/query_primer__multi_search)

※注意:内容の正しさに関しては保証できないので参考程度に

# 問題
Dランク問題であるため、実装内容自体はかなりシンプルなものですがデータ量が各10万まであるという問題です。レートは2000くらい。

> 〇問題文
長さ N の重複した要素の無い数列 A と Q 個の整数 K_1 … K_Q が与えられるので、
各 K_i について、 A に K_i が含まれていれば “YES” を、そうでなければ “NO” を出力してください。

***入力される値***

“`
N Q
A_1

A_N
K_1

K_Q
“`

> ・1 行目では、配列 A の要素数 N と検索する値の個数 Q が半角スペース区切りで与えられます。
・続く N 行では、配列 A の要素が先頭から順に与えられます。
・続く Q 行では、検索する値 K

元記事を表示

Laravel で FormRequest をテストする方法

## この記事について

表題のとおりですが、FormRequest に対するテスト方針もあわせて記載し、備忘録的に記録しておきます。

## はじめに

### 前提となる方針

方針としては、コストとベネフィットをバランスして自分で決めたガイドラインです。所属するチームやプロダクトによっては多少変えることもあります。

– バリデーションルールが単純なケースでは FormRequest に対するユニットテストは書かずにフィーチャーテストでのみ確認する
– 複雑なカスタムバリデーションルールがある場合は Rule に切り出し、Rule に対するユニットテストを書いて確認する
– after コールバックを使うときは FormRequest に対するユニットテストを書いて確認する

after コールバックを使わざるを得ないケースというのは、特定の入力パラメータに対するバリデーションではなく、複数だったり全体だったり、というケースです。

### 環境

– PHP: 8.0.2
– Laravel: 8.55.0

Laravel のバージョンに関しては、調べてないですが、上記未満で

元記事を表示

コスト削減した Null Object パターン

# Null Object パターンの目的
オブジェクトを要求してその結果が null かどうかの判定が繰り返し現れる場合に、その null 値をNull Object に置き換える事で、判定処理を行っている手続き的コードを除外する。

“`php
if (is_null($user)) {
$userName = ”;
} else {
$userName = $user->userName();
}
“`

# 基本パターン
継承 ver.
![スクリーンショット 2021-08-21 9.45.37.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276559/522ae090-9cb8-6508-ded2-451a980a0f13.png)

インターフェース ver.
![スクリーンショット 2021-08-21 9.45.42.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/276559/87ce

元記事を表示

Laravel8 投稿内容の並べ替え(ソート)

Laravelですでに投稿してある記事をID順や日付順で並べ替えたいとき

## composerでKyslik/column-sortableをインストール
“`
% composer require kyslik/column-sortable
“`

## configに必要事項を追記
“`config\app.php

‘providers’ => [
.
.
.

/*
* 追加
*/
Kyslik\ColumnSortable\ColumnSortableServiceProvider::class,
]
“`

## 投稿記事に関係するモデルに追記
“`app\Models\Record.php

元記事を表示

【初心者向け】Laravelの命名規則

#はじめに
プログラミング始めたての頃は(自分もそうですが)、メソッドやテーブル名などを記述するとき、頭文字が大文字なのか、単語はアンダースコアでつなぐのかなどと迷ってしまいますよね。
適当に分けているのではなく、ちゃんと命名規則があるので、それにしたがって記述していくことになります。

#記述方法について
###①アッパーキャメルケース
単語の先頭の文字はすべて大文字で記述する。
例)ShoppingCart
###②ローワーキャメルケース
先頭は小文字だが、続きの単語の先頭は大文字で記述する。
例)shoppingCart
###③スネークケース
単語と単語をアンダースコアでつなぐ。
例)shopping_cart
###④ケバブケース
単語と単語をハイフンでつなぐ。
例)shopping-cart

#Laravelでの使用方法について
| 種類 | 記述方法 | 単数 | 複数 |
|:———-:|:———–:|:————:|:————:|
| モデル | アッパーキャメル | 〇

元記事を表示

PHP 標準入力を取得する 個人メモ

# 目的

– 標準入力を取得する方法をメモ的に残す

# 方法

#### 標準入力が数値の場合

– 下記のように記載することで標準入力を取得する事ができる。

“`php
fscanf(STDIN, “%d”, $input_int);
“`

– 標準入力の値が変数`$input_int`に格納される。

#### 標準入力が文字列の場合

– 下記のように記載することで標準入力を取得する事ができる。

“`php
fscanf(STDIN, “%s”, $input_str);
“`

– 標準入力の値が編集`$input_str`に格納される。

#### 半角スペースで区切られた複数の標準入力を配列として受け取る

– 下記の様に記載することで半角スペースで区切られた複数の標準入力を配列として受け取ることができる。

“`php
$input = trim(fgets(STDIN));
$input_array = explode(‘ ‘, $input);
“`

– 半角スペー

元記事を表示

PHP 文字列を分解して配列にする

# 目的

– str_split()メソッドを使って文字列を配列に変換する方法をまとめる

# 方法

– 下記のように記載することで文字列を区切って配列にする事ができる。

“`php
str_split(文字列, 文字列から切り出す文字数)
“`

# 例

– 「abcde」という文字列を一文字毎に切り出し配列に格納する

“`php
$array = str_split(‘abcde’, 1);
var_dump($array);
“`

– 下記のように出力される。

“`
array(5) {
[0]=>
string(1) “a”
[1]=>
string(1) “b”
[2]=>
string(1) “c”
[3]=>
string(1) “d”
[4]=>
string(1) “e”
}
“`

# 参考文献

– [https://www.php.

元記事を表示

【WordPress】カスタム投稿タイプのパーマリンクをいい感じにする方法の備忘録【パーマリンク】

普段からWordPressよく触ってるくせに「あ、カスタム投稿のパーマリンクってどうすりゃいい感じになるんだっけ(忘却)」となるアホな筆者のための備忘録。
標準の投稿については[以前書いた記事](https://qiita.com/ryujisanagi/items/cd29b52fb9b45c1dadec)でふわっと書いておりますので、よろしければそちらもご参照くださいまし。

# 条件
– カスタム投稿タイプのパーマリンクを、下記の『目標のパーマリンク構造』にする
– `get_permalink()`や`get_post_type_archive_link()`など、パーマリンクを取得する系統のWordPress標準関数でちゃんと目的のパーマリンクを取得できるようにする
– XMLサイトマップを吐き出すプラグインやパンくずリストを実装するプラグイン(筆者は共にYoast SEOで済ませる場合が多い)や、その他さまざまなプラグインを入れてもちゃんと問題なく動くようにする
– ~~忘れたらコピペすればOKな記事にする~~

## 目標のパーマリンク構造

– カスタム投稿アーカイブ<

元記事を表示

Docker×Laravel×Redis×Laravel Echoを使ってリアルタイム通信する

#はじめに
Googleで検索すると、Laravelの公式ドキュメントや他の記事でLaravelとRedisを用いたWebSocket通信のやり方がたくさんでてきましたが、どれを試してなかなか上手くいかず苦戦したので、メモ代わりに記事に残します。各ツールの説明は省略します。検索した方が分かりやすい記事がたくさん出てくると思うので…。

#環境
Docker Desktop for Mac 3.6.0
PHP 8.0.9
Laravel 8.40
redis-server 6.2.5
Laravel-echo-server 1.6.2
node 14.16.0
npm 7.8.0
composer 1.10.19

#dockerでコンテナを構築
今回は下記の記事で作成したDokcer環境をベースに必要なものを追加しました。@ucan-lab さん、ありがとうございます。
[【超入門】20分でLaravel開発環境を爆速構築するDockerハンズオン](https://qiita.com/ucan-lab/items/56c9dc3cf2e6762672f4)

##プロジェクト構

元記事を表示

OTHERカテゴリの最新記事