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

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

PHP8.1の新機能を試してみた

# はじめに
PHP8.1の新機能を試してみました。
試した機能は以下です。
* 文字列をキーとして持つ配列のアンパック
* 列挙型
* 交差型

それではそれぞれの詳細と具体例を書いていきたいと思います。

# 1. 文字列をキーとして持つ配列のアンパック
文字列のキーを持つ配列を展開できるようになりました。
“`php
‘foo’];
$arr2 = […$arr1, ‘bar’ => ‘bar’];
var_dump($arr2);
“`

“`php
// 実行結果
array(2) {
[“foo”]=>
string(3) “foo”
[“bar”]=>
string(3) “bar”
}
“`
この機能のおかげで連想配列が扱いやすくなりそうです。

# 2. 列挙型
列挙型は独自の型を定義するための機能で、セレクトボックスで設定する値に使用したり、バリデーションに使えるかと思います。

ここでは定義方法からセレクトボックスの値として使用する方法まで具体例を書きたいと思います。

## 2.1 定義

元記事を表示

【研修】未経験WEBエンジニア1ヶ月目の振り返り

# 0. はじめに
大阪の受託開発エンジニア1年目の、kazumakishimoto([@kazuma_dev](https://twitter.com/kazuma_dev))です!
未経験エンジニアとして1ヶ月目の振り返り記事となります!(まだ実務ではなく研修ですが…)
内容としては、今後研修を受ける方向けポエムなので、あまり参考にはならないかもです^^;

## 0-1. 目次
> [1.研修内容](#1-研修内容)
> [2.学んだこと](#2-学んだこと)
> [3.学びたいこと](#3-学びたいこと)
> [4.やってよかったこと](#4-やってよかったこと)
> [5.所感](#5-所感)
> [補足](#補足)
> [Reference](#reference)

## 0-2. 結論
– 研修内容は書けないので、僕の所感ベースの内容となります。
– 未経験エンジニアにとって、外部研修のある会社はとてもありがたいです。
– 経験者やスクール卒の未経験の方にとっては物足りないかも?

## 0-3. 想定読者
– 外部研修付きの会社ってどんな感じ?
– 自分より後に入社さ

元記事を表示

【PHPUnit】ReflectionClassで参照渡しのメソッドを実行

## 実行環境
– PHP8

## 内容
PHPUnitでprivateやprotectedのメソッドをテストしたい時に、ReflectionClassクラスを使って実行する。
この時に、実行するメソッドの引数が参照渡しになっている場合、エラーになってしまったので解決方法をメモしておきます。

## 失敗例

“`php
setAccessible(true);

$reflectionMethod->invokeArgs($object, [$param]);
“`

### 実行結果
Warningエラーが発生する。

“`
Warning: Hell

元記事を表示

phpsandboxのdb(sqlite)接続。phpの学習で、環境構築を省きたい

## 概要

phpsandboxでsqliteに接続確認

## 執筆理由

phpを学ぼうとすると、sqlのDBが必要になるため、どのページ・参考書もかならず環境構築から入るが、環境構築の欠点が大きすぎる

– 環境構築がそもそも手間
– プロジェクトごとに環境作るのとか
– 環境壊れたらやり直すとかこころ折れる

→phpsandbox を全力で活用したい

## phpsandboxの欠点

db周り
dbがsqlite
なんか独特でちょっとわかりづらい

でもここさえ超えれば、なんでもphpsandboxで行けるのでは?

## ざっくりsqliteとは

sql形式のローカルファイル。
mysqlのようにDBにデータを持たず、ローカルに直接sqlファイルを持つ。
それだけらしい。

ただ、CLIでの操作なので、そこには慣れておく必要あり。
(SQL文がわかれば、大差ないかと)

## phpsandboxのsqlite接続確認

画面からも確認できるが、
`/var/www/database.sqlite`
にあるので、sqlite接続確認

“`

元記事を表示

PHP-制御構造

# PHP-制御構造

・要件(前提条件、使用環境)
 ・PHPが導入済み
 ・VSコードを導入済み
 ・dockerを導入済み
 ・Xdebugが導入済み
 ・Composerが導入済み

1. 前提知識
・$変数名= 値;
・$変数名= 式; 値をもつもの
・文は末尾に「;」がついたもの、もしくは中括弧で囲まれたもの
・構文は文法・書式のこと。
・Syntax error とは、構文エラーという意味
・言語構造は、言語を構成する要素のこと( [PHPのキーワード](“https://www.php.net/manual/ja/reserved.keywords.php”]) )
・制御構造は、プログラムの流れを制御するもの。言語構造の一種
2. 条件分岐
2-1. if
  比較演算子で真偽値で判定、論理型変数で直接判定、暗黙的変換し判定、複数条件で判定
2-2.switch
  同じ変数を複数の値で条件分岐したいときに使う
  ※注意 緩やかな型変換される
2-3.match
  同じ変数を複数の値で条件分岐し、値を代入したいときに使う
  ※厳密な比較で処理される

3.繰り

元記事を表示

php8有効設定

php.ini 修正
以下です。

元記事を表示

refresh_tokenでリフレッシュしたい

# 1.はじめに
 Google AssistantからアクセスできるAPIを作成して、ローカルで音楽再生をさせたりしているのですが、だいたい翌日にはステータスを拾えなくなっています。再リンクを行えば回復はするのですが、ちょっと使いづらいのは確かです。そういう風にステータスを拾えなくなるサービスは他にもあるのでそういうものなのかと思わなくもありませんでしたが、HTTPサーバーのログを見ると、トークン制御のアクセスで400が出ています。

 OAuth2ってそういうものでしたっけ。
# 2.リフレッシュトークンでリフレッシュさせたい
 もちろん違って、アクセストークンの期限が切れたらより期限の長いリフレッシュトークンを使ってアクセストークンを取り直すことができるはずです。念のため、topen.phpへPOSTされたデータを確認するとトークンリフレッシュが要求されています。
“`
grant_type=refresh_token&refresh_token=dff5……bd37&client_id=googleclient&client_secret=secret
“`
 ただ、ログを

元記事を表示

if文を使わなくても良くなる?ルックアップテーブルとは?

## 前置き
これから説明していくコードの書き方を知ってはいましたが、名前がついていることを知りませんでした。
あらためて知ったことを記録として残しておきたい為、参考になれば嬉しいです。

## ルックアップテーブルの使い方

・ルックアップテーブルとは
>計算機科学におけるルックアップテーブル(英: Lookup table)とは、複雑な計算処理を単純な配列の参照処理で置き換えて効率化を図るために作られた、配列や連想配列などのデータ構造のことをいう。
Wikipediaより引用

言葉だけだと分かりにくいと思うので、例を見ながらどんなときにどのように書くことを言うのか見ていきましょう。
下記はお金「円」の値によって取得する「果物」が変わる処理を書いています。

“`php
if ($yen === ‘100円’) {
$fruit = ‘オレンジ’;
} else if ($yen === ‘110円’) {
$fruit = ‘りんご’;
} else if ($yen === ‘120円’) {
$fruit =

元記事を表示

任意のユーザーのQiitaのfeedを取得し表示するコード?

![SnapCrab_NoName_2022-11-3_14-6-20_No-00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/779064/fe928b7b-9c53-8275-fecf-fc7f60f810f9.png)

#### コードを書いた経緯と注意点
– Qiitaのfeedを取得する方法は書かれているけど任意のユーザーはあまり見かけないので記載しました。
– ご自由に使用下さい。また人様のfeedを掲載する時は引用が必要です。引用が駄目だと言う方もいらっしゃるかもしれないですね?

“`php:index.php
entry)){
print(“

    “);

元記事を表示

常時ディレクトリ監視を行い任意の画像ファイルだけ別のディレクトリへ移動するコードです。

### コードを書いた経緯
– while(true)の使い道を一つの例として記載しました。

https://github.com/taoka-toshiaki/change_dir

“`:常時監視するLinuxコマンド
nohup php File_Check.php &
“`

“`:ディレクトリ構成
├── File_Check.php
├── upload
└── data
“`

“`php:File_Check.php
$value){
rename(“./upload/$value”,”./data/$value”);
}
}
sleep(3);
}
}

function is_scandir(string $dirn

元記事を表示

[PHP]基本金額の入力から税込金額の入力に対応した際の失敗話

自省を兼ねてメモとして残す

旧システムでは基本料金を入力することで消費税が計算され、
総額入力が表示されるようになっていた。
“`
例:基本金額 8727円 → 消費税 872.7 → 税込金額 9599.7円

税込金額表示の際に利用されていたのが、 number_formatであったため切り上げて処理
9599.7 → 9600
“`
新システムでは税込金額を入力することで、
基本金額と消費税が自動で計算されるようになった。
“`
税込金額 9600円 → 基本金額 8728 + 消費税 872
“`
この際税込金額をDBに格納できていれば問題なかったのだが、
改修の都合上DBに入れられるのは基本金額のみ。

すると以下の問題が発生する。
“`
例:基本金額 8728円 → 消費税 872.8 → 税込金額 9600.8円

税込金額を正しく(9600として)表示するためにfloorを利用して切り捨て処理
9600.8 → 9600
“`
利用する関数をnumber_format→floorに変更することで9600と丸く収めた。
のだが、金額を扱っている物なので正しい

元記事を表示

Enum(列挙型)とは?

## 目次
– 概要
– Enum(列挙型)とは?
– Enumの細かいルール
– 最後に

## 概要
だいぶサボっていましたが、スキルアップのための不定期30分インプット・アウトプット投稿第四弾は、「Enum(列挙型)とは?」についてやっていこうと思います!
第三弾は、[UMLを使ってクラス図を書く方法](https://qiita.com/kitamurakunihiko/items/5981d94a30541d65a568)について投稿したのでよければ確認してみてください。

phpを触り始めて約1年経ちましたが、お恥ずかしいことに「Enum」を知りませんでした。
最初にEnumを見た時読み方すら知りませんでしたが、「イーナム」って読むみたいです:grimacing:

## Enum(列挙型)とは?
PHPドキュメントによるとEnumは、
> クラスやクラス定数に対して、さらに制限を加えたものです。 ある型に対して、取り得る値の限られた集合を定義する方法を提供します。

らしいです。

噛み砕くと、
定数の定義と取得を簡単にしてくれる認識。
クラスでいうgetterが定数ご

元記事を表示

SharePoint上のファイルをPHPでダウンロードする方法

# 概要
SharePoint上で管理されているファイルをPHPでダウンロードする処理を作る際に
日本語の情報が少なかったので、手順を纏めました。

※SharePointにてサイトは作成されていることを想定した手順となります。

# クライアントの登録
システムからファイル情報、及びファイルの取得を行う際はREST-APIを使用します。
REST-APIを使用する際にトークンが必要となるため、トークン発行を行うためのクライアントの登録を行います。

基本的には下記の記事を参考にさせて頂きました。

https://qiita.com/samiii/items/cc47bb73a5e47645ce48

## クライアントIDを生成
1. 下記へ接続
`https://[テナント名].sharepoint.com/sites/[サイト名]/_layouts/15/AppRegNew.aspx`
[※サイトへアクセスできない場合](#サイトの操作権限が無いためサイトへアクセスできない場合)
![image.png](https://qiita-image-store.s3.ap-nor

元記事を表示

WordPressで、Stripe SDKを使わずにStripeのWebhookイベントを受け付けるAPIを作る方法

Stripeでは、決済や顧客・サブスクリプションの「状態変化」をシステムに通知するために、Webhook APIを登録できます。

![スクリーンショット 2022-10-28 14.48.00.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/018ffed5-b841-28fa-320a-54c387a64b9b.png)

WordPressにStripeを組み込む際にも、このWebhook APIを実装する必要があります。

ですが、容量削減やComposerの導入が難しい環境などの問題から、StripeのPHP SDKを利用したくないケースも少なからず存在します。

この記事では、WP APIを利用してStripe Webhookのリクエストを受け付ける方法を紹介します。

:::note warn
注意点
本記事で紹介するコードは、GPLv3でライセンスしています。

これは、コードの一部に「[WooCommerce Stripe Payment Gateway](https:/

元記事を表示

レガシーなPJにはPHP Insightsをぶち込むのがいいんじゃない?って話

# はじめに

昨今のPHPシステム開発において、静的解析ツールは当然入っている前提で話が進んでいくような気がする。

私の周りでは**既存のコードが汚く、ツールは昔入れたがほとんど何もチェックしてない**、、、みたいな事例が多く観測されている。(これはフィクションです。

一行のエラーを許さない0か100みたいな静的解析じゃなくて、**少しずつ漸進的に**静的解析を導入していきたい、、、

そんな思いを解決する神ツールを発見。

https://phpinsights.com/

ここからはPHPStan等の他ツールと比較しながらPHP Insightsを紹介する。

# 使用方法

## 環境情報

今回はLaravelでの開発を想定する。

“`shell
$ php -v
PHP 8.1.12 (cli) (built: Oct 28 2022 18:32:20) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.12, Copyright (c) Zend Technologies

$ php artisan -V
La

元記事を表示

MVCモデル

## MVCとは
Model (モデル)
View (ビュー)
Controller (コントローラー)

主に`データの処理`を行うModel、`入出力`を行うView、`ViewとModelを制御する`Controller。

それぞれ役割を持たせた3つのプログラムの総称をMVCと言います。

## 図解
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2851087/70049935-d1fd-20bf-53b2-9f933b9b4a8b.png)

## ルーティング
ルーティングとは、ブラウザから送られてきたURLでMVCのどの部分のどのような処理をすれば良いのかを判断するプログラムです。
ブラウザからリクエストがきたら、そのトップページを呼び出す命令があるControllerを探してくれます。

## Model
Modelはデータの処理や操作を担当するプログラムで、データベースへのアクセスや、データベースを検索し

元記事を表示

関数の型定義を正しく指定していない場合の挙動で少しハマったお話

例として下記のような関数を作ったとします。

“`php

function say_hoge():bool
{
return ‘hoge’;
}

“`

この関数をよんでいる場所で、この関数の結果を見ると、なぜか「1」で返っている。

原因としては、 **関数の返り値の定義を「bool」に指定している** から。
関数内のコードが少し複雑なこともあり(上の見本はシンプルですが)
どっかで真偽値に変わってるのか?としばらく調査してしまっていました。。。
ちなみに、定義をarrayにすると Fatal error: Uncaught TypeErrorエラーになります。こっちはすぐ分かるのですが、
上記の例の場合だと原因が分かりづらいので、型定義はちゃんとしようというお話でした。

__実行例__(outputのところに出力)

型定義をboolにしちゃったケース
![bool.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/287983/2e8b39dd-2eb8-3ca8-9191-894f

元記事を表示

Laravel9アプリをDocker+nginxでRender.comにデプロイする方法

# はじめに
Render.com公式でLaravelアプリをデプロイする方法が紹介されていますが、古いバージョン(Laravel 5.8)の方法しか記載されていません。
本記事ではLaravel 9.37.0に対応したDocker+nginxを用いたデプロイ方法を紹介します。
解説したコードはhttps://github.com/ppputtyo/laravel-render-example に置いています。

# Render.comとは
さまざまなアプリをGitHub連携で簡単に運用できるPaaSで、近年はHerokuの移行先として注目されています。
また、[Render.com公式の記述](https://render.com/render-vs-heroku-comparison)によると、実際に次世代Herokuを目指して開発されたことがわかります。
>We’ve built Render to help developers and businesses avoid the cost and inflexibility traps of legacy Platform-

元記事を表示

WordPressの管理画面からアップロードできるファイルサイズ上限の変更

## はじめに
##### info.php・・・サーバーの情報をFTPから知れる(見るだけ、ファイルの中身は以下のみ、ルート直下に配置し、そのURLにアクセスすれば見れる)
“`php:php.info

“`

##### php.ini・・・サーバーの情報を司るマスターファイル
##### .user.ini・・・php.iniの設定を上書きできるファイル(ディレクトリごとに設定可能、ルート直下に置けばその下層のファイルに全て適応される)

## .user.iniファイルの書き換え

以下のコードを書いたファイルをルート直下に設置(ディレクトリ単位に入れれば個別に設定変更も可)
“`php:.user.ini
upload_max_filesize = 200M
post_max_size = 200M
“`

元記事を表示

初心者に学ぶ 脆弱なWebアプリケーションの作り方〜入社時研修で作ったWebアプリの脆弱性についてのコードレビュー3選

# はじめに

実務未経験でWebエンジニアとして入社してからの2カ月で受けた社内研修についての振り返りです。

今回は「Webアプリケーション基礎」の課題について、 **セキュリティ** に関するレビュー内容に焦点を当てて、整理します(レビューで色々と指摘をいただいた、かつ、重要と感じたため)。

結論としては、 **SQLインジェクション対策** や、 **クロスサイトスクリプティング(XSS)対策** 、 **バリデーション** がうまくできていなかった、という初歩的な内容です。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527226/5ba786e9-4294-7e3f-5a45-7a0a89345010.png)

https://wasbook.org/

タイトルは、こちらの徳丸本を意識しています。(最近読了しましたが、今回の記事では直接的に触れていません)

## 記事の目的

同時期に実務未経験でWebエンジニアになって交流している方々(他社の)が、

**「他の

元記事を表示

OTHERカテゴリの最新記事