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

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

centos7でnginxと(laravel)php-fpmを動かすメモ

# 作業記録
vagrantでcentOS7を立てて
nginxとlaravel(php-fpm)を動かす。

ゴールはlaravelのwelcome画面が出ればok

## centOS7を立ち上げ
vagrantが既に入っている状態で
centOS7のイメージは

https://app.vagrantup.com/bento/boxes/centos-7

こちらを使用する。

“`
$ vagrant box add bento/centos-7
“`

“`
$ mkdir test
$ cd test
$ vagrant init
//これでVagrantfileが作られる
$ ls
Vagrantfile
“`

“`:Vagrantfile
config.vm.box = “bento/centos-7” //box名を設定
config.vm.network “private_network”, ip: “192.168.56.54” //ipを指定
//Ranges: 192.168.56.0/21この範囲内で指定しないといけないっぽい
config.vm

元記事を表示

【laravel】ユニットテストざっくり

## 概要
laravelでは下記テストが用意されている。
– ユニットテスト /tests/Unit
クラスやメソッドなどモジュール単位で動作を検証する

– フィーチャテスト /tests/Feature
WebページやAPI機能など
コントローラの動き(リクエストを受けてレスポンスを返すまで)を検証する

今回はユニットテスト練習用を作成した際のまとめ。

## テスト対象の作成

“`sample.php
public function sample(int $english, int $math, int $science)
{
$average = ($english + $math + $science) / 3;
//3教科の平均でクラス分け
if ($average >= 85) {
$class = ‘advance’;
} else {
$class = ‘basic’;
}
return array($a

元記事を表示

【PHP】Laravelの`bearerToken()`メソッドを使ってリクエストヘッダーのBearerトークンを取得

## 概要
LaravelでAPIを開発するときなど、認証時にリクエストヘッダーのトークンを使うことがあると思います。[【Laravel8.x】リクエストヘッダーの値を取得する。](https://yama-weblog.com/get-request-header-data-in-laravel8/)の記事にある通り、requestからヘッダー値を取得する方法でも全然良いと思うのですが、Laravelでは`bearerToken()`というメソッドが用意されていたので紹介します。

## bearerToken()メソッドについて
[How to get Bearer token from a request in Laravel](https://stackoverflow.com/questions/47158522/how-to-get-bearer-token-from-a-request-in-laravel)のstackoverflowの記事に使い方など書かれています。基本的にはrequestのオブジェクトにメソッドが用意されているので、`$token = $reques

元記事を表示

php ダウンロードされました対応方法

# ずばり httpd.conf 見直し

## 下記は重要です。

“`
ServerRoot “c:\Apache24”
Listen 80
#LoadModule xml2enc_module modules/mod_xml2enc.so
LoadModule php7_module “c:\php\php7apache2_4.dll”


AllowOverride none
Require all denied

DocumentRoot “C:\Apache24\htdocs”

#
# Possible values for the Options directive are “None”, “All”,
“`

#最後に下記追加

“`

PHPINIDir “c:\php”


AddHandl

元記事を表示

mb_check_encoding関数の調査

## はじめに
久しぶりに文字コード絡みの不具合を調査したので備忘録として経緯をまとめます。

## 背景

– PHPのCSVファイルのアップロード処理で不具合が発生しました。
– 特に変わった処理はなく、ファイルをアップロードして、DBに取り込むというよくある処理。
– ただし、アップロードしたファイルをfilterを使用して、チャンクごとにmb_check_encoding関数で文字コードをチェックしていた。

## 不具合

– 1年以上運用されているサービスで、基本的には問題なく動作していた。
– 極稀にCSVファイルが最後まで読み込めずに処理が終わるという現象が発生する。
– 例外が捕捉されず、システムエラーとして扱えない。

## 原因
調べた結果、「髙」(はしごだか)などの文字コードが原因のようでした。
「髙」自体はよく使われているので、「極稀に」発生するという現象の辻褄があいませんでした。

Shift-JISでは、一部の文字には「IBM拡張文字」と「NEC選定IBM拡張文字」の2つの文字コードが割当てられているようです。
https://ja.wiktionary.

元記事を表示

新人に教えたいコードを書く時に注意していること

フリーランスの小野です。

最近、若手に教えることが増えてきて、ふと思ったので書くことにしました。

「プログラムを書く」

システム開発をしていると切っても切り離せない作業ですが、プロジェクトチームで担当している時に「できる限り全員同じようなコードを書き残したい」と思っています。
そのため、ある程度のコーディングルールは決めて、システムチームで共有しています。

PHPのコーディングルール規約は、こちらのページが分かりやすくてオススメです。
まだまだPHPを始めたばかりの人は、一読しておいて損しません(というより一読しておくべきページです…笑)

https://www.infiniteloop.co.jp/docs/psr/psr-2-coding-style-guide.php

実際の現場は、上記だけを守っていればよいというわけではありません。
フレームワークを使ったりしていると、「クエリをベタに書く」 or 「フレームワーク独自のクエリビルダで統一する」などなど臨機応変に対応する場面があると思います。

今回はもう少し基礎的なルール・書く時の注意点を書いていこうと思います

元記事を表示

Laravelのルーティングファイルの違いについて

## はじめに
Laravelのルーティングファイルについて、何気なく触っていたので備忘録として残します。
※Laravel8を使用
## 対象者
この記事は下記のような人を対象にしています。

– 駆け出しエンジニア
– プログラミング初学者

## ルーティングファイルの種類
– web.php
– api.php

## 違いについて
#### web.php
デフォルトでCSRF保護の機能が有効になっているため、外部からPOSTすることができない。

#### api.php
CSRF保護が有効になっていないため外部からPOSTができる。

## 詳細
kernel.phpにweb.phpとapi.phpのそれぞれの設定がミドルウェアとして組み込まれています。
デフォルトでは下記の通りの設定となっており、api.phpには`VerifyCsrfToken`が入っていないためCSRF保護が機能しておりません。
“`php:kernel.php
protected $middlewareGroups = [
‘web’ => [
\App

元記事を表示

Laravel コレクション型のmapとpluckはどちらが早いのか

## 概要
Laravelで特定のコレクション型の変数から「idがkeyで名前がvalueの値を抽出したい」というケースがありました。

その時に`map`と`pluck`で両方の書き方がある(厳密にいうと全く同じ形式の値にはならないが、その後の使い方は似ることが多い)が、どちらの方がパフォーマンス的には良いのか疑問に思ったので検証してみました。

## 検証方法
・測定する項目は「メモリ使用量」と「処理時間」とする。
・対象のコレクション型の変数は100個のオブジェクトが入っているものを使用する。
・10回の測定を終えて、それぞれの平均値を比較する。

## 対象データの例
今回使用するのは下記のようなオブジェクトが100個ほどあるコレクション型の値である。
そこから「idがkeyで名前がvalueの値を抽出したい」というケースを実践する。
“`
{
“id”:1,
“name”:”hogehoge”,
“birthday”:”2022-11-05″,
“department”:”Sales”
}
“`

## 関数それぞれの使い方
“`php

元記事を表示

LaravelでWeb APIを開発するときの話

LaravelでWeb APIを開発する時ってどうしていますか?
routeをapi.phpに入れると…
api/ほげほげになりますよね
これってWeb API開発をする時ってメンドくさくなりますよね

`http://localhost/hogeservice/v1/fuge`

とバージョン(v1)以下にプロジェクトを差し込んで運用を考えるとapi.phpに入れると変になります

`http://localhost/hogeservice/v1/api/fuge`

になってします
これを対策にweb.phpに入れると解決しますが…

ダサいです。

ちゃんとapiなのでapi.phpに入れて開発したいのでその対策を考えてみます

# 開発環境
はじめに開発環境を確認します

“`bash
$ php -v
PHP 8.1.11 (cli) (built: Sep 29 2022 20:02:53) (NTS)
Copyright (c) The PHP Group
Zend Engine v4.1.11, Copyright (c) Zend Technologies

元記事を表示

PHPのクラスについて

## はじめに

日本システム開発株式会社の藤井といいます。
タイトルにもあるようにクラスについてまとめました。
クラスとは?より、PHPのクラスについての内容になっています。

## オブジェクトについて

オブジェクトは他の言語の参照と同じように扱えます。

`$obj = new StdClass()`を実行すると、`$obj`にはオブジェクトのIDが代入されます。
`$obj`を他の変数に代入すると、オブジェクトのIDがコピーされます。
`$obj`には、オブジェクトのIDが代入されているため、nullを再代入してもオブジェクトは消えません。(他の言語の参照と同じ動作です)

“`php

元記事を表示

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-制御構造

* 制御構造に関する公式ドキュメント

https://www.php.net/manual/ja/language.control-structures.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
  同じ変数を複数の値で条件分岐したいと

元記事を表示

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

元記事を表示

OTHERカテゴリの最新記事