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

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

パーフェクトPHP MiniBlogアプリケーション メモ

# 開発環境
– xampp
– アプリケーション名
– MiniBlog
– 配置場所
– xamppのhtdocsの直下

– ヴァーチャルホストの追加
– ヴァーチャルホストの追加は追加せず `localhost`でいく
– パーフェクトPHPでは ヴァーチャルホストの追加している
– `http://Mini-blog.localhost`
– ドキュメントルート
– ドキュメントルートは変更せず アプリケーションが入っているディレクトリにはアクセスできないように`.htaccess`で制限する。
– xampp の `htdocs` のまま。
– パーフェクトPHPではドキュメントルートを変更をしている
– `htdocs/MiniBlog/web`がドキュメントルートになる。
– [ヴァーチャルホストの追加とドキュメントルートの変更](https://qiita.com/kennsukea/private/c7125648b67a9f8d2855)

– パーフェクトPHPのフレームワークの概要

元記事を表示

アルゴリズムを知ろう

こんにちは!
CYBIRD Advent Calendar 2022 25日目担当の@S_onizawaです。
24日の記事は@min1osさんの「Nuxt3を0から勉強した学習フローをまとめてみた」でした。

# 1 自己紹介
私は今年で社会人2年目のサーバーサイドエンジニアです。
主にPHPを使って仕事をしておりますが、最近はGO言語も使った開発に携わらせていただいています。

# 2 概要
まず大前提に、アルゴリズムとは。
「問題を解決するための手順や計算方法」のことを言います。
アルゴリズムを知るにはどうすればいいのか、知ることのメリットなどを記載します。
書いてあることは結構基本的なことだと思いますが、初心に帰って見てもらえればと思います。

# 3 アルゴリズムを知る

実際アルゴリズムを知るには、直接調べてみたり、私が今回phpで書いたようにコードにしたりすると良いと思います。
アルゴリズムの教科書や情報技術者試験などでよく出てくる、ソートのアルゴリズムを例に出したいと思います。
今回はバブルソートとマージソートについて記載したいと思います。

## 3.1 バブルソー

元記事を表示

Laravel の Eloquent 拡張機能を作った

いくつかのプロジェクトに参画して思ったのですが、(同一プロジェクトでも)人によって Eloquent where の書き方が全然違っていて

1つの where() に配列でまとめて書く人もいれば

“`php
return $this->product
->where([
[
‘products.sale_date_start’, ‘>=’, date(‘Y-m-d’),
],
[
‘products.sale_date_end’, ‘<=', date('Y-m-d'), ], [ 'products.discontinued', '=', 0, ], ]) ->get();
“`

条件1つにつき1つ where() を書く人もいたり

“`php
return $this->product
->where(‘sale_date_start’, ‘>=’, date(‘Y-m-

元記事を表示

Kubernetes 環境におけるバッチのメトリクス収集のために公式ブログにある NewRelic Agent の構成パターンを考察&検証してみた

この記事は [NewRelicアドベントカレンダー2022](https://qiita.com/advent-calendar/2022/newrelic) の 25日目の記事です。

## はじめに

Chatwork のサーバーサイド開発部の @shi_no_oit です

現在 [Chatwork](https://corp.chatwork.com/ja/) では、PHPでのシステムを EC2 → Kubernetes に移行する取り込みを行なっております。

以前からシステムの大部分は Kubernetes 環境への移行が完了していたのですが、バッチ周りのシステムがまだ EC2 環境に残されており、移行に伴ってバッチのメトリクスを収集するための NewRelic Agent(NewRelic APM Agent 以降は NewRelic Agent と記載) をどのようにデプロイするか?を公式ブログにも投稿されている、[コンテナ環境におけるPHPエージェントの構成パターン](https://newrelic.com/jp/blog/best-practices/php-i

元記事を表示

VSCodeでLAMP環境(Amazon Linux 2/Apache/PHP8.1)のDockerコンテナに入って、Xdebugでデバッグする。

# はじめに

Visual Studio Code の拡張機能 Remote Development を利用して、 LAMP 環境(Amazon Linux 2 / Apache / PHP8.1)の Docker コンテナ内で、 PHP のデバッガ Xdebug を設定する方法です。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527226/aa27ce58-ffec-d5b2-3176-931557e80d14.png)

## 環境

– **macOS** Big Sur 11.6
– **Visual Studio Code**(VScode) 1.70.2
– **Remote Development** 0.21.0(VSCode の拡張機能)
– **PHP Debug** 1.29.0(VSCode の拡張機能)
– **Docker Desktop** 4.7.0
– **Docker Engine** 20.10.14
– **PHP**

元記事を表示

Laravelで開発始めるなら「TALL Stack」でしょう!!!

::: note warn
この記事では環境構築の説明はしていません。
ただのTALL Stackの推し活するだけの記事です。

推し活記事です。(大事なことなので2回言い申した)
:::
※恵美押勝ではない

# なんなんすかそれ?
### TALL
* TailwindCSS
* Alpine.js
* Livewire
* Laravel

これらの頭文字を並べて「TALL」と呼んでいます。

# よいとこ
### ①ファイルの数を削減できる
TailwindCSSはHTML要素に直接スタイルを書くので、基本的にCSSファイルは無くてもOKです。
Alpine.jsもどうようにHTML要素に直接JSを書くので、JSファイルを別で作らなくてOKです。

この2つを使う時点で、基本的にphpファイルだけで開発できてしまいます。

::: note

長いコード/少ないファイル ⇔ 短いコード/多数のファイル

この二者はトレードオフな関係だと思いますが、TALL Stackでの開発は「長いコード/少

フレームワークの設定をする、”Framework Bundle”

[Symfony Component Advent Calendar 2022](https://qiita.com/advent-calendar/2022/symfony-component)の25日目の記事です。

## 最初に
[Symfony](https://symfony.com)はPHPのフレームワークのひとつです。しかし、公式サイトの説明文には

> Symfony is a set of PHP Components, a Web Application framework, a Philosophy, and a Community — all working together in harmony.
(SymfonyはPHPコンポーネントのセットで、Webアプリケーションフレームワークで、哲学、そしてコミュニティです。それらがハーモニーを奏でながら動作しています。)

と書かれている通り、PHPコンポーネントのセットで、たくさんのコンポーネントを提供しており、それらを組み合わせてひとつのフレームワークとして動作しています。Symfonyのコンポーネントは、S

zerofill型のコードマップのkeyの型には気を付けて

# zerofill型のコードマップのkeyの型には気を付けて

## やっぱりコードマップだよね
俺はコウヘイ。エンジニアマスターを目指して開発修行の旅に出ている。DBのカラムのコードマップを作っていた時のお話。

MySQL< zerofillだぞ 僕< なるほど、0埋めね 僕< このカラムのコードマップをアプリケーションに組み込みぞ! ```php const MONSTER_CODE = [ '01' => ‘ドラゴン’,
’02’ => ‘スライム’,
’03’ => ‘おばけ’,

’99’ => ‘吸血鬼’,
];
“`

僕< DBからfetchするとstringになるしkeyの型はstringにしておくか ## 上手くいかない分岐 僕< どうやらNo99は存在してはいけないモンスターらしい。分岐処理で表示を分けるか ```php foreach (BOKEMON::MONSTER_CODE as $key => $val) {
if ($key === ’03’ || $key === ’99’)

【Laravel】SQLの確認は$query->dd()が便利

こちらは [Laravel Advent Calendar 2022](https://qiita.com/advent-calendar/2022/laravel) 21日目の記事です。
遅ばせながらクリスマスイブの本日に投稿します!

# 検証環境
Laravel v8.83.8

# $query->dd()は良いぞ
「Laravel SQL 確認」で検索すると下記の方法をよく見かけますが、

“`php
$query = User::where(‘id’, 1);
dd($query->toSql(), $query->getBindings());
“`

同じ処理を“$query“から直接実行できます。

“`php
$query = User::where(‘id’, 1);
$query->dd();

// 出力結果
// “select * from `users` where `id` = ?”
// array:1 [▼
// 0 => 1
// ]
“`

公式サイトにも記述されています。

https://laravel.com/docs/8

phpspreadsheetで使ったメソッド

一部CakePHPのコードが混ざっています。
適宜変換してください。

– 雛形ファイルからインスタンス化して出力するまで

~~~php
load($filepath);

// ここにシートに書き込む処理を書く

$writer = new XlsxWriter($spreadsheet);

// ダウンロードさせないとき

【Laravel】個人的おすすめ開発ツール3選

## はじめに
普段Laravelを使ってAPIの開発をしています。
個人的にLaravelで開発(API開発)するのにおすすめツールを紹介します。
常にこれらをブラウザで開いて開発してます。
## おすすめ開発ツール3選
### 1. laravel-web-tinker
Tinkerをブラウザで実行、確認できるツールです。
これの良い所は、1回で複数業のコードを入力して実行できる所です。
コンソールでのTinkerは1行ずつ入力しないといけないですがその手間を省けます。
さらに、変更を加えた場合、Tinkerを立ち上げ直さなくても良いのも便利です。
(毎回 `exit` しなくてもいい!)

https://github.com/spatie/laravel-web-tinker

こちらの記事が大変わかりやすくまとまっており、基本この通りやればすぐ使えます。ありがとうございます。

https://www.larajapan.com/2019/09/13/%E3%83%96%E3%83%A9%E3%82%A6%E3%82%B6%E3%81%8B%E3%82%89tinker%E3

PHP_CodeSniffer phpcs のインストールと使用方法

PHP_CodeSnifferとは

コーディング規則にそってコードが記述されているか静的解析するツールの事である。ここで基準にしているコーディング規則とは、[PSR-1](https://www.php-fig.org/psr/psr-1/)と[PSR-12](https://www.php-fig.org/psr/psr-12/)である。

静的解析とは、コードを実行せずに、コードの問題点をチェックすること。

PHP_CodeSnifferには、主に2つの機能がある。

  • phpcs
  • コーディング規約を守れていないコードの検出

  • phpcbf
  • コーディング規約に従ってコードを自動修正

この記事では、phpcsをメインに解説する。

インストール方法

composerを使用する。

composer.jsonに下記を入力する。

“`json
“require-dev”: {
“squizlabs/php_codesnif

【悪用厳禁】ファイルアップロード機能を利用してサイトをハッキングする方法を中学生が解説

## 概要
Webにおいては、PHPやcgiなどの動的スクリプトを使うと数行のコードでファイルアップロード処理を実装できますが、そこには多くの脆弱性が潜んでいます。
本記事では、攻撃者側の視点に立ち、実際にはどのような手法でファイルアップロード機能を悪用するのかについてハッカー中学生(笑)の私が解説したいと思います。

## 注意事項
当然、本記事の内容をご自身が管理されているサイト以外に試した場合、不正アクセス禁止法や関連法に抵触する可能性がありますので、あくまでもペネトレーションテスト用途のみに本記事の内容を利用してください。
また、本記事と同様の内容をnoteにも投稿しています。

## サーバー側処理に関連する拡張子一覧
以下のような拡張子を持つファイルへのリクエストを受けると、対応しているサーバーアプリケーションが動作している場合には実行されます。
攻撃者の多くは、まず「普通に」ス

wordpressでテーマを作る時に必要なファイル達

## はじめに
wordpressでテーマを作ろうと思ったけど、何のファイルを作れば良いかわからない。
調べても見つからなかったので、自作してみました。

## リスト
– [x] function.php
– [x] footer.php
– [x] sidebar.php(サイドバーがないデザインには不要)
– [x] header.php
– [x] 404.php
– [x] search.php
– [x] archive.php
– [x] date.php
– [x] author.php
– [x] tag.php
– [x] category.php
– [x] page.php
– [x] single.php
– [x] home.php
– [x] comments.php(コメント機能がないデザインには不要)
– [x] index.php
– [x] style.css

### function.php
関数を入れるファイルです。

#### テンプレート
“`php

Laravelコーディングよくやる集2022

:::note
この記事は「[【マイスター・ギルド】本物のAdvent Calendar 2022](https://adventar.org/calendars/7794)」18日目の記事です。
:::

LaravelでWebアプリケーションを開発しているんですが、これは毎回書きそうだなーというのがいくつかあったので、それをまとめてみました。開発はまだまだ途中なので、これから変化していく可能性もありますが。

# グローバルスコープ

グローバルスコ―プを使って`DBのデータ + 何らかの条件付き`を表現します。それを使えば疑似的[^globalscope]に条件付きのモデルが定義できます。

例えば`User`モデルがあり、利用者が閲覧可能かどうかを`is_visible`で表したデータがあるとき、

“`php
class VisibleUser extends User
{
protected $table = ‘users’;

protected $hidden = [
‘is_visible’, // 持つ必要が無い
];

コードネームについて

## はじめに
オフィスで雑談するネタがないなー、と悩んでいるあなた!
コードネームの話で盛り上がってみませんか?
IT業界であれば、使用技術のバージョンのコードネームの話は結構盛り上がるのでおすすめです!

この記事では、PHPやJavaSceipt関連のコードネームについて、ご紹介します。

## 対象者
この記事は下記のような人を対象にしています。

– 駆け出しエンジニア
– プログラミング初学者
– 職場の雑談ネタに困ってる人

## 結論
IT業界なら、コードネームの話は絶対盛り上がる!

## MacOSのコードネーム
まずはみんな使ってるMacOSのコードネームについてです。
10.0~10.8まではネコ科の動物の名前。
10.9以降は唐突にカリフォルニアの地名シリーズに変更。ネコ科はネタ切れだったのか…
猫がいる会社に所属している身としては残念です。
ちなみに、10.9以降のデフォルト壁紙はそれぞれの地名をイメージしたものになっているので要チェックです!

| バージョン | コードネーム | 読み方 |意味|リリース|
|—|–

JavaScriptを書かずにフロントエンドをリッチにする、”Symfony UX”

[Symfony Component Advent Calendar 2022](https://qiita.com/advent-calendar/2022/symfony-component)の24日目の記事です。

## 最初に
[Symfony](https://symfony.com)はPHPのフレームワークのひとつです。しかし、公式サイトの説明文には

> Symfony is a set of PHP Components, a Web Application framework, a Philosophy, and a Community — all working together in harmony.
(SymfonyはPHPコンポーネントのセットで、Webアプリケーションフレームワークで、哲学、そしてコミュニティです。それらがハーモニーを奏でながら動作しています。)

と書かれている通り、PHPコンポーネントのセットで、たくさんのコンポーネントを提供しており、それらを組み合わせてひとつのフレームワークとして動作しています。Symfonyのコンポーネントは、S

繰り返し(ループ)処理機能(Laravel)

## 始めに
最近よく、ループ処理を実装するので
備忘録として記事にしました。

ループ処理の認識(自分の)
 → ある条件になるまで繰り返し処理すること

## 環境
| 開発環境 |バージョン |
|———–|————|
| __Laravel__ | 8.83.19 |
| __PHP__ | 7.3.10 |

## ループ処理内容

“`PHP:LoopController.php
// ループ処理機能
public function loop()
{
Log::debug(__FUNCTION__);

try {
$i = 0;
// 繰り返し処理(60秒経過するまで)
while(true) {

Log::debug(‘loopメソッドのwhile文処理中’);

// 60秒が経過した時
if($i >= 6) {
// 繰り返し処理を終了する

指定文字数でランダムな文字列を作成するphp関数を作った

## はじめに
メール認証とかに使えそう…

## コード
“`php
function random_words($limit,$is_flag = 0){
$word = null;
if($is_flag===0){
$base_string = [‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’,’s’,’t’,’u’,’v’,’w’,’x’,’y’,’z’,’A’,’B’,’C’,’D’,’E’,’F’,’G’,’H’,’I’,’J’,’K’,’L’,’M’,’N’,’O’,’P’,’Q’,’R’,’S’,’T’,’U’,’V’,’W’,’X’,’Y’,’Z’,0,1,2,3,4,5,6,7,8,9];
}else if($is_flag===1){
$base_string = [‘a’,’b’,’c’,’d’,’e’,’f’,’g’,’h’,’i’,’j’,’k’,’l’,’m’,’n’,’o’,’p’,’q’,’r’

phpでメール送信するときに迷惑メール判定されないような関数を作った

## はじめに
phpでメール送信するには、“`mb_send_mail();“`を使うことが多いですが、まれに迷惑メール判定されてしまうことがあります。
そこで、今回は迷惑メール判定されないようなphp自作関数を作ることにしました。

## コード
“`php
‘;
$header = ”;
$header .= ‘Content-Type: text/plain \r\n’;
$header .= ‘Return-Path: ‘ . $from_mail . ‘ \r\n’;
$header .= ‘From: ‘ . $from .’ \r\n’;
$header .= ‘Sender: ‘ . $f