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

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

【Breadcrumb NavXT】アクションフックによるパンくずリストのタイトル・URLの変更

※この記事では、Breadcrumb NavXT5.5.1を使用しています。

パンくずリストのカテゴリーのアーカイブページのURLを固定ページのURLに変更したいとの要望を受けたので、ちょっと調べて書いてみました。(というか、2年前にも同じ依頼があったので、公開できるように書き直しました。)

前提条件として、該当するカテゴリーのアーカイブページは使用しません。(表に出せない)

参考URL
http://notnil-creative.com/blog/archives/981

## タイトルのみ変更の場合

“`function.php

trail) > 0 ) {
for ( $i = 0; $i < count($bcnObj->trail); $i++ ) {
if ( ‘変更前のテキスト’ == $bcnObj->trail[$i]->get_title() ) {

元記事を表示

PHPUnitをマチカネタンホイザにする

## ことの発端

↑を見て、『あー、できるかもなー』と思ったのでやってみました。

## –printerオプションで出力をカスタマイズできる

PHPUnitには`–printer`オプションがあります。[ドキュメント](https://phpunit.readthedocs.io/ja/latest/textui.html?highlight=printer#textui-clioptions)には

“`
結果を表示するために使うプリンタクラスを指定します。このプリンタクラスは PHPUnit\Util\Printer を継承し、  
かつPHPUnit\Framework\TestListener インターフェイスを実装したものでなければなりません。
“`

と記載があります。独自のプリンタークラスを作ればいけそうです。ソースを追っていくとデフォルトでは、`PHPUnit\TextUI\DefaultResultPrinter`というクラスを使

元記事を表示

【Declined】PHP8に入ることのできなかった機能たち

PHP8では大量の[RFCが](https://qiita.com/rana_kualu/items/a6601b49e0591eb42200)[受理され](https://qiita.com/rana_kualu/items/fe7998fbe773544d5d25)、多くの文法の拡充が行われました。
光あるなら陰もまたあり、すなわち華々しく活躍するRFCの傍らには、却下され消えゆくRFCもまた存在するということです。

ということでPHP8に入り込むことを目指したものの[却下されたRFC](https://wiki.php.net/rfc#declined)を見てみることにしましょう。
採用されたRFCと却下されたRFCを見比べることで、PHPの今後の方向性とかがわかるかもしれませんよ。

# Declined RFC

## [Dump results of expressions in `php -a`](https://wiki.php.net/rfc/readline_interactive_shell_result_function)

賛成11、反対6で却下。

`

元記事を表示

【Laravel】「email」のバリデーションルールの注意

# 初めに
Laravelではデフォルトで様々な[バリデーションルール](https://readouble.com/laravel/8.x/ja/validation.html)を準備してくれており、生PHPと比べてかなり簡単にバリデーションを設定することができます。
しかし、デフォルトのものには実は注意が必要と言う事をお話しして行きます。

その中で、今回は **『email』のバリデーションルール**について紹介します。

# 問題点
デフォルトでは、emailの形式`ユーザー名(メールアカウント)@ドメイン名`でなければバリデーションエラーを出力してくれます。

“`App\Http\Controllers\Auth\RegisterController.php
return Validator::make(
$data,
[
‘name’ => [‘required’, ‘string’, ‘max:255’],
‘email’ => [‘required’, ‘

元記事を表示

Magentoのセキュリティは、サニタイズの脆弱性を修正するための追加パッチが必要です

本記事は2022年2月24日に@developersteveが公開した英語ブログ[Magento security requires additional patch to fix sanitization vulnerability](https://snyk.io/blog/magento-vulnerability-cve-2022-24087-sanitization/)を日本語化した内容です。

なお本ブログは、[CVE-2022-24086 Magento Ecommerce を使用しているウェブサイトに対する脆弱性警告](https://qiita.com/SnykSec/items/8fdecb03fe0f8fe275cf)で発表した内容から更新されている情報について記載しています。

[![logo-solid-background.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2216557/bc4c157c-64e2-ec7e-df18-147d2c279cb0.png)](htt

元記事を表示

[PHP]PHPUnitのassertSeeをリダイレクト先でも行いたい。

# きっかけ
laravelにてfeatureテストを記述していたときに、post処理後のリダイレクト先でフラッシュメッセージをassertSeeしたくなった。

## assertSee について
レスポンス内に指定の文字列があるかを確認してくれる。
基本的なアサートの一つ。
“`php
public function test_テキストチェック()
{
$response = $this->get(‘user’);
// /user に “user一覧” と記述されていればテストが通る
$response->assertStatus(200)->assertSee(‘user一覧’);
}
“`
この他にも、文字列を順番に記述されているかを確認してくれる「assertSeeInOrder」など、便利なものがいくつか存在します。
詳しくは、下記をご覧ください。

https://readouble.com/laravel/6.x/ja/http-tests.html#assert-see

## 問題
便利なassertSeeですが、下記のような記述ではリダイレクト

元記事を表示

laravel学んで2か月で自サービスを開発した話 Part2

みなさん、こんにちは。
早速ですが自サービスの開発記録を残していこうと思います。

サービス作成の背景および要件定義はこちらへ
https://qiita.com/k-hayack884/items/e571138e8bf7f35f7502

さすがにインストールやマイグレーション作成などの設定は省きます。

## ログイン機能の作成
管理機能のライブラリはLaravel/ui,Breeze,Jetstreamなどがある。
ただし、Laravel/uiのcssはBootstrap,Breeze,Jetstreamはtailwindcssが初期設定されている模様
学習サイトや技術ブログなどの文献ではLaravel/uiを使っているものが多かったが、あえてBreeze,Jetstreamに行く。
理由は
– laravel8以降ではtailwindcssが推奨されていること。
– bootstrapでは自由なデザインをするのが難しいこと
– モダンなtailwind cssを使うワイ、カッコいい(ここ重要)

2段階認証などのセキュリティの機能面を考慮すれば、Jetstreamなん

元記事を表示

Ruby OpenSSL::PKCS5.pbkdf2_hmac_sha1 をPHPで置き換えたときのメモ

“`ruby
def self.encrypt(data, pass, salt)
cipher = OpenSSL::Cipher::Cipher.new(“AES-256-CBC”)
key_iv = OpenSSL::PKCS5.pbkdf2_hmac_sha1(pass, salt, 1000, cipher.key_len+cipher.iv_len)
key = key_iv[0, cipher.key_len]
iv = key_iv[cipher.key_len, cipher.iv_len]
cipher.encrypt
cipher.key = key
cipher.iv = iv
encryptvalue = cipher.update(data) + cipher.final
return Base64.b64encode(encryptvalue)
end

def self.decrypt(data, pass, salt)
enctyptvalue = Base64.d

元記事を表示

LaravelでCSVファイルのダウンロード機能を実装する

Laravelでの開発中、DBのデータが記載されたCSVファイルのダウンロード機能を実装する必要があり学習したのでまとめる。
ただし最後の1行だけ理解が及んでおらずのため悪しからず。。。

# そもそもCSVとは?
「Comma Separated Value」の略。
直訳すると、カンマで区切った値となる。

散々CSVファイルを見てきたがカンマなど見たことがない、、、
どこがComma Separated Valueなんだと思ってしまった。

まず大前提として自分の認識が間違っていたのが、CSVとExcelはほぼ同じだと思っていたことだ。
というかむしろ何が違うんだくらいの認識だった。

ただこれこそが最大の勘違いで、正確には普段目にしているCSVファイルはExcelで開かれていたため全く同じに見えていたということだ。
となるとCSVファイルの実体は何なのか。
試しにCSVファイルをエディターに投げてみると以下のように表示される。

“`
id,name\n
1,”taro”\n
2,”mike”\n
3,”john”\n

元記事を表示

Adminer Editorでデータ更新依頼を自動化できないか検討

## 概要
データの修正依頼を受けてDB運用者が依頼に沿ってデータ修正するのではなく、直接依頼者がデータ修正できるようにできないかという想像から始まった。
phpmyadminやAdminerなどは機能豊富で生のSQLを叩けるのでなかなかハードルが高いし、だからといっていちいちツールを開発するのは大変。

そこで、いろいろ調べてみるとAdmin Editorというツールを見つけた。

https://www.adminer.org/en/editor/

Adminer Editorは非開発者でもわかりやすいようなUIを提供するデータ修正ツールで、Adminer同様多数のDBMSに対応している。
Adminerの機能制限版といった感じ?テーブルの作成やスキーマの修正などの機能を提供せずデータの追加、修正、削除のみを実施することができる。
そのため、アプリを立ち上げて依頼者にURLを提供すれば安全に修正できるようにならないか?という発想です。

公式サイトによると以下の制約があるようです。

* SQLは直接実行できない
* データベースは1つしか選べない

このページではAdmine

元記事を表示

【PHP】データ登録処理後、再読み込みしたら同じデータが再び登録される

## 環境
PHP 7

## はじめに
今回は、ユーザー登録機能を実装している時に、起きた問題です。ユーザー登録後リロードをすると同じデータが再び登録されてしまうという現象が起きました。
調べて分かった事などを備忘録として残していきたいと思います。

## リロードや再読み込みで再送信される
ユーザー登録後に、再読み込みをすると同じユーザーが再び登録される、、
URLを直撃ちしてページをみると、この現象は起きないのですが毎回こんなことできないですね、、

リロードをすると下記の画像のアラートが出力されます。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/697259/ad0ffb28-37a2-e1e3-c4d2-6c3765bf869e.png)

「続行」を押すと同じデータが登録されます。
この現象は何度も繰り返されるため、無限にデータが増えることになります。

![image.png](https://qiita-image-store.s3.ap-northeast-1.ama

元記事を表示

laravel学んで2か月で自サービスを開発した話 Part1

# 概要

今まではスロットや掲示板、ネタ登録サイトなどを作ってみたけれど、自分自身で一つのサービスを作りたいと思い決意
せっかくlaravelを学んだので、laravelで開発したい
ポートフォリオにも使えるしね!

# 何を作るか?
ECサイトや予約サイト、マッチングアプリなど、laravelでできるサービスは多岐にある。
しかし、選択肢が多いってことは、それだけ迷ってしまうということ、自サービスの方向性が定まらないまま、yahooニュースを見て現実逃避をする。
![genjitsu_touhi.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2281946/ecfe987c-24bd-6267-40c0-0a8bc1fe75db.png)
そして、たどり着いたのがこの記事

https://news.yahoo.co.jp/articles/43d9b12fe338fd9f7193b48e4590d1caacb0f486

#### 世の中にはこの胡蝶蘭のように、使われてポイ

元記事を表示

【Laravel】Laravel8 (laravel/ui)でのマルチ認証実装方法メモ

# はじめに
Laravel8で一般ログインと管理ログインを分けるために、マルチ認証を実装した方法を記載します。

# 概要
ユーザーは、
* 一般ユーザー側を users
* 管理者側を admin_users

URLは、
* 一般ユーザー側(users)
ログイン画面 /login
ホーム画面 /home

* 管理側(admin_users)
ログイン画面 /admin/login
ホーム画面 /admin/home

として2つの管理画面を作ることを想定して実装します。

# 前提
* composerがインストールされている状態であること
* Laravelプロジェクトがインストール済みであること
* laravel/uiが導入済みである事

※laravel/uiのインストール方法は以下を参照
[Laravel8 (laravel/ui)でのLogin機能の実装方法メモ](https://qiita.com/daisu_yamazaki/items/b946594896179abcd203)
# 手順

### 1 管理者用のモデルとマイグレーションフ

元記事を表示

AWSとPHPを重点に作りました。[転職用ポートフォリオ ]


# 初めに

初めまして千葉県在住の転職活動をしている28歳です。

前職は遺品整理や飲食店の店長をしていました。
ポートフォリオはAWSとPHPを重点的に力を入れて作りました。
[5. セキュリティーや負荷分散について](#5-セキュリティーや負荷分散について)

この記事ではポートフォリオの操作手順を分かりやすくしたり、苦労した点や今後の課題についてご紹介していきます。

    /            \
   │  ゆっくり見ていってね .│
   │              │
    \_______  _____ノ
            ノノ
   __   _____   ______
  ,´ _,, ‘-´ ̄ ̄`-ゝ 、_ イ、
  ’r ´          ヽ、ン、
 ,’==─-      -─==’, i
 i イ iゝ、イ人レ/_ルヽイ i |
 レリイi (ヒ_]     ヒ_ン ).| .|、i .||
  !Y!””  ,___,   “” 「 !ノ i |
  L.’,.   ヽ _ン 

元記事を表示

【WordPress】(個人的に)クライアントワークでほぼ必須級のWordPressプラグイン【おすすめプラグイン】

もはや何番煎じか分かりませんが。
筆者は物忘れが激しいので作業中に「あ、あれ入れ忘れてた…」とか「あれ、あのいつものプラグイン名前なんだっけ…?」が頻発するため、備忘録を兼ねてまとめています。
ちなみに筆者のWordPress制作はクライアントワークがほぼ全てなので、個人ブログ等では必要ないのも多いかもしれません。

※~~思いついた物から書いてるので~~紹介順は順不同です。

## 1. あらゆるカスタマイズで必須『Advanced Custom Fields Pro』

Advanced Custom Fields

もはや説明不要かと思われます。カスタムフィールドを劇的に使いやすくするプラグイン。
クライアント側で更新する何かがある場合は必ず入れていますし、それ以外のカスタマイズ(大抵ACF BlockかOptionPage)でも頻繁に使っています。

Gutenbergが登場して久しいですが、企業ホームページなどでは自由なブロックエディタよりも型の決まった更新方法が好まれやすい(そして大抵それで事足りる)ため、

元記事を表示

リーダブルコード ざっくり解説

へい、豚野郎です。
最近、「Qiitaの更新がないですね」と言われますが、僕にも僕にも事情があるのだ(適当)。

と、いうわけで書いてない間に何をしていたかというと、
「リーダブルコード」という本を読んでいました。

専門学校時代、先生とか「この本は素晴らしい本だ!」って言ってた(気がする)ので
買って読んだのですが、PHPerの僕にはちょっとわからない(言い訳)なところもあり
解読に時間がかかってしまいました。
それがQiitaを放置していた原因です(言い訳)。

ただ、未だにわかっていないところもあるので
それは今後のエンジニアとしての経験で補っていつかわかる日が来る様にします。

そのため、「ざっくり解説」です。
詳しい内容は是非、買って読んでください。

# 1. コードは読みやすく・理解しやすく
【ポイント】
・バグが見つけやすくなる。
・自分のコードが流用される可能性がある。
・他の人がわかるようにするため。
・他の人が理解する時間を短くする。

# 2. 名前の情報はわかりやすく
【ポイント】
・明確な単語を使う。
・汎用的な名前は避ける。
・具体的にわかるようにする

元記事を表示

10: 通常配列と連想配列との混在,

通常配列と連想配列との混在

そもそも通常配列連想配列との区別はないので、これらを混在させることも可能。

“`
‘太郎’, 15 => ‘二郎’, ‘鈴木’ => ‘三郎’, ‘四郎’];

print_r($data);

//結果:

Array
(
[山田] => 太郎
[15] => 次郎
[鈴木] => 三郎
[16] => 次郎
)
“`

この場合も、キーを省略した場合には、「その時点での最大インデックス+1」が次のインデックスとして割り振られる。

キーは整数値/文字列に変換される

ここまではキーとして整数、または文字列を指定してきたが、そのほかにも、任意のデータ型を指定できる。
下記例
ただし、整数/文字列

元記事を表示

【翻訳】php_filter_float()の脆弱性について(CVE-2021-21708)

## 元記事

今回は、こちらの記事を翻訳してみました。
誤訳等ありましたら、コメント欄にて教えていただけますと幸いです。

https://nakedsecurity.sophos.com/2022/02/18/irony-alert-php-fixes-security-flaw-in-input-validation-code/

## 本編

PHPを利用されている方々は、現在自分が利用しているPHPバージョンが最新かどうか確認しましょう。

– PHP7.4 -> **7.4.28**
– PHP8.0 -> **8.0.16**
– PHP8.1 -> **8.1.3**

上記、PHP最新バージョンが**2022-02-17**にリリースされました。
最新バージョンでは、php_filter_float関数が原因のuse-after-free脆弱性[^4]([CVE-2021-21708](https://access.redhat.com/security/cve/cve-2021-21708))を含む、[複数のメモリ管理に関するバグが修正](https://www.p

元記事を表示

【WordPressセキュリティ対策】投稿者アーカイブを無効化してWordPressのユーザ名を隠す方法

WordPressで構築したサイトのアクセスログを見ると、ページには表示させていないのに何故かログインアカウントでアタックされている場合があります。
これはWordPressが自動生成する投稿者アーカイブが有効になっているからです。攻撃者はこの機能を悪用して不正ログインを試みます。

## 投稿者アーカイブとは

投稿者アーカイブとは、WordPress が自動生成する投稿者ごとの投稿をまとめる機能のことです。
ちょっと技術的なことを言うと、テーマの`author.php`に規定されているページのことです。
初期状態のWordPressでは投稿者ごとに投稿者アーカイブが作成されます。そのため、WordPressのユーザー名が閲覧者にバレてしまい、大いなるセキュリティの穴となることがあります。

## 投稿者アーカイブを見る方法

WordPressサイトで、以下のようなURLにアクセスすると、対象ユーザーが作成した投稿の一覧ページが表示されます。

“`
http://example.com/author/ユーザー名/
“`

また、以下のように`?author=1`を付けてアクセ

元記事を表示

WordPress5.5で標準搭載されたXMLサイトマップ機能を無効化する方法

WordPress5.5からXMLサイトマップを出力する機能が標準で追加されました。
Google XML Sitemapsとか別のプラグインを使ってXMLサイトマップを出力している場合が多いと思います。
そういったすでに使っている機能が重複しないよう、標準のXMLサイトマップ機能を無効にする方法をまとめておきます。

## 追加されたXMLサイトマップ機能

はじめに、新たに標準搭載されたXMLサイトマップ機能についての説明です。
XMLサイトマップ機能はWordPress5.5から自動で有効になっていて、`wp-sitemap.xml`というファイル名でアクセスできます。
`$ドメイン/wp-sitemap.xml`というURLにアクセスすると、下記のようなサイトマップが表示されます。

![xmlサイトマップ-1.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1017333/8a25d874-dd67-556a-6ef5-84e9e5872579.png)

> **補足事項**
> `wp-si

元記事を表示

OTHERカテゴリの最新記事