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

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

可変引数でディレクトリ、ファイル名を結合する

phpでディレクトリを複数結合してパスを取得するfunctionを作りました。

“`php
function __getPath() {
return preg_replace(‘/\\’ . DIRECTORY_SEPARATOR . ‘+/’, ‘/’, implode(‘/’, array_filter(array_map(‘trim’, func_get_args()), ‘strlen’)));
}
“`

使用例
“`php
echo __getPath(‘/’, ‘/images/common/’, ‘thumb_’ . ‘logo_bsquare.svg’);
“`

結果
“`
/images/common/thumb_logo_bsquare.svg
“`

引数にnullやスペース、スラッシュが複数入っていても大丈夫です。
“`php
echo __getPath( null, ”, ‘ ‘, ‘///images/common/’, ‘thumb_’ . ‘logo_bsquare.svg’);
“`

結果
“`
/im

元記事を表示

【調査】PHPのクロージャ(無名関数)の仕様

Laravelのindex.phpを順番に読んでいたらクロージャ(無名関数)を知らないと何やっているのかわからないコードが出てきたのでPHPの公式を参照しながら調査しました!

https://www.php.net/manual/ja/functions.anonymous.php

# 無名関数(クロージャ)とはそもそも何か?
>無名関数はクロージャとも呼ばれ、関数名を指定せずに関数を作成できるようにするものです。
“`php:クロージャの例
spl_autoload_register(function ($class_name) {
include $class_name . ‘.php’;
});
“`
上の例はcallable型の引数に、コールバック関数としてクロージャを渡している例です。

クロージャはcallable型の引数に使えるだけではなく、変数の値として使用することもできます。
変数の値として使用する場合は定義したクロージャを自動でClosureインスタンスに変換します。
このClosureクラスはクロージャそのものを表すクラスでクロージャの設定を少し変

元記事を表示

GETとPOSTの違い

# はじめに
Laravelでコードを書くときに先輩からこの2つ説明できる?って聞かれてすぐに答えられませんでした。
いざ言われると意外と話せないことがあるのでこの記事を書くことにしました。

# 使う場面
“`GET“`は***情報を取得する時***に使います。
何か情報を検索したり取得するために使います。仕様で安全なものとなっていて
読み取り専用な機能に使うメソッドにみたいです。

“`POST“`は***指定したリソースを実装した機能に従って処理をする機能***で
登録処理や更新処理などに使うメソッドです。

ex)
DBの登録
Qiitaなどの記事投稿
新規ユーザー登録
新たに情報を加える

などです。

# 終わりに
ざっくりですが上のような違いがあるみたいです。
もっと詳しい情報は下の資料を読んでみてください。

# 資料
https://qiita.com/kanataxa/items/522efb74421255f0e0a1#:~:text=GET%E3%81%AF%E3%83%AA%E3%82%BD%E3%83%BC%E3%82

元記事を表示

PHPでフレームワークを使わずに掲示板アプリを作ってみる③ DB登録

# はじめに
※自身の学習を記事に投稿することでアウトプットするのが目的です。
「よくわかるPHPの教科書」のchapter6に書いてある通りにアプリを
作成していくので、私と同じような駆け出しエンジニアの皆さんは、
書籍を買ってアプリを作っていただいた方がわかりやすいかもしれません。

# 使用しているエディタ、実行環境
* VS Code
* XAMPP

* PHP7
* windows

## 確認画面にセッション情報を保存して表示する。
“`

ニックネーム
メールアドレス
元記事を表示

【PHP】バルクインサートのためのシーケンスを自動生成する

システムを構築する際には、データを一括登録したいという要望を受けることがよくあります。そのシステム構築にはcsvデータやExcelデータなどを読み込み、DBテーブルにインポートしていくという流れで実装していきます。

そして、DBテーブルに登録していく場合、自分はよく**バルクインサート**を用います。バルクインサートとはinsert文一つで複数のデータ行を登録できるというもので

“`sql
insert into trn_records values(1,1,”hoge”),(2,1,”fuga”),(1,2,”hoge”)…………;
“`

こんな感じで記述していきます。なぜ、このバルクインサートを活用するかといえば、もし登録データにエラーなどが生じた場合に処理を中断してくれるからで、これがプログラム内でinsert文を行数分繰り返したりすると、エラーが生じた場合に、その時点で中断されます。なので、次からどのデータを入れていけばいいのかわからない、という事態に陥ることがあります。

ですが、このバルクインサートにおいて大きな問題点があります。それは**グループごとのシーケンス

元記事を表示

PHPでのcurlリトライ。エラー番号やメッセージで判定する。

## 概要
API通信では、HTTPのレスポンスがエラーとなり失敗してしまうことがあります。
API通信を再度実行することで、復帰ができる可能性がある場合、curl実行のリトライが有効でしょう。

本記事では、実際にリトライ処理を実装した際に参考にした文献と、追加で検討した内容について述べます。

## 結論
→[cURL retry in PHP](https://stackoverflow.com/questions/6080369/curl-retry-in-php)
– 下記判定により、リトライをするかどうかを判断する。
– PHPの標準ライブラリにある`curl_errno`を用いてエラー種別を確認。
– (採用)PHPの標準ライブラリにある`curl_error`を用いてエラー文言を確認。

## エラー文言をリトライ処理の判定に組み込んだ理由
**`TCP connection reset by peer`のエラーメッセージが返される場合にリトライを行う**実装にしたかったので、そのエラーメッセージが返ってくる時のエラー番号で判定しようと考えていました。

元記事を表示

WordPressの記載されるURLを少し短くする

## なぜ、Wordpressはすべて絶対URLなの?

その理由はわかりません。

同一サイトを同一ドメインだけで運用するのであれば、絶対URLである必要はないわけです。

いくら defrate やら gzip やら br 圧縮が効いたとしても、URL記述文も削減できます。

## どの変換をするの?
“`convert.txt
https://qiita.com/drafts/f9d8e18ff9166ee09d73/edit

↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓

/drafts/f9d8e18ff9166ee09d73/edit
“`

こうするだけで、大量に記載されるスキーマとホスト名を節減できます。

## 多分これでいけます

functions.php の適当な所に記述してみてください。

“`functions.php
function urlshort($buffer) {
$search = array(
‘/href=”https?:\/\/’ . $_SERVER{‘HTTP_HOST’} . ‘/i’,
);
$replace = arr

元記事を表示

LaravelでMockeryを使った試験の話

サービスを試験する時、試験対象サービスから別の連結するサービスがあったとします。
その時はどう試験しますか?
以降の連なるサービスを含めて試験を行うというのは変ですね。
Unit試験は自己完結が範囲だとか愚行します。
以降のサービスに不具合があった場合にはこのサービスの試験がNGになるのは変です。
つまりは以降のサービスをブラックボックスにできる方法がベストです。
次のサービスに引き渡す値の結果が想定した結果を戻るだけでいいのです。

これを解決するのにMockery(mock)を使います。

![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2481837/8e94a90d-9cdd-167f-f402-8152433d4bbe.png)

# mockとは
mockとは… 辞書で調べるとこんな感じです。

まがいの、偽りの、まねごとの

https://ejje.weblio.jp/content/mock

mockオブジェクトとは本来のオブジェクトではなく想定の結果を返すオブジェクト

元記事を表示

【Laravel】CSVファイルのデータインポート&エクスポートする方法

Laravel でテストケースを書く際にCSVファイルのデータを挿入する機会があった。その際は、Seederファイルを作成して、そのテストケース用のデータを挿入した。しかし、実際に利用するCSVファイルからデータを挿入する方が早いと思ったため、今回その機能を実装してみることにした。

また、挿入したデータをCSVファイルとして出力できたら、相互的にデータのやりとりができると思い、CSVファイルのエクスポートも実装してみた。

まずは、CSVファイルファイルをインポートし、データを挿入することから行う。

# CSVファイルからのインポート
処理の流れとして、フォーム欄からCSVファイルのアップロードを行、CSVファイルをストレージに保存する。その内容をもとにコレクションを作成し、データベースに挿入するという流れで実装する。
まとめると、以下のようになる。

**処理の流れ**
①フォーム欄からCSVファイルの取得
②取得したCSVファイルをコレクションに置き換える
③置き換えたコレクションに対して不正なデータがないかの確認
④置き換えたコレクションを配列にしてデータベースに挿入

#

元記事を表示

PHP unset 変数削除

## 用途
定義した変数を削除したい時に使う。
配列から指定した値を削除したい時に使う。
処理の終わりに毎回変数をリセットしたい時などにも使える。

## 使用方法
“`php:変数削除
$hoge = “ほげほげ”;
unset($hoge); // $hogeという変数を削除

var_dump(isset($hoge)); // bool(false)
“`
isssetの結果、falseが返ってきているから削除できている。

“`php:配列から指定した値を削除
$hoge = array(0, 1, 2, 3, 4, 5);
unset($hoge[1]); // 配列の「1」が削除される

print_r($hoge);
// 結果
[0] => 0
[2] => 2
[3] => 3
[4] => 4
“`
※配列の場合は、削除したいインデックスを指定する。

元記事を表示

PHP $_SESSION 一連の流れ

## 用途
サーバー側に、サイトを訪れたユーザの情報を個別に保存しておいて、情報をもとにさまざまなページで処理をしたい時に使う。

## 使用方法
### 一連の流れ
#### 1.セッションに保存する
“`php:ファイル①(セッションに保存するファイル)

“`
※セッションは連想配列で保存される。

#### 2.セッションに保存したものを別ファイルで使用する
“`php:ファイル②(上記のファイルで保存したものを他のファイルでも使えることを解説するファイル)

元記事を表示

file_get_contents 関数

# file_get_contents
– phpに標準で用意されているビルトイン関数
– urlの情報を取得する

## 例
“`

“`

元記事を表示

Laravel phpunitを実行した時に419エラーが発生した時の対処法

## 環境

– PHP: 8.1.5
– Laravel: 9.9.0

## テストコード

“`php:tests/Feature/Http/Controllers/Auth/LoginControllerTest.php

元記事を表示

PHP で if ($var) と書かれていてよく思考停止する話~ if の動きまとめ

## tl;dr

if の中には「はい」か「いいえ」で答えられるような表現を書きましょう。

PHP でよく見られる次の書き方。

“`php
if ($var) {
// 何らかの処理
}
“`

これを日本語にすると「もし $var ならば」

・・・何が??

私としては、日本語に直せない if 文の表現は書くべきではないと思っています。
ですが、会社の既存コードにはやむを得ず `if ($var)` が登場することがあります。
PHP の保守案件に関わったりする場合は、やはり動きを知っておかなければなりません。

## `if ($var)` の動き

下の記事にあるように、if の括弧内に書かれた表現は真偽値 (true または false) として解釈されます。
解釈された結果が true の場合は処理を実行し、false の場合は実行しません。

https://www.php.net/manual/en/control-structures.if.php

> expression is evaluated to its Boolean valu

元記事を表示

PHPで簡易的なサーバーを立ち上げる

# 概要
PHPで素早くlocalhostでページを確認したい!
MAMP使う時間もない!
という時に簡易的なサーバーを立ち上げる時の流れです。

## 手順
どこでも良いので、フォルダを作成します。
vscodeを立ち上げて作成したフォルダをドラッグアンドドロップします。
フォルダの中にindex.phpファイルを作成します。
“`




ウェブサーバーのテスト

HelloWorld!



“`

上のターミナルから新しいターミナルを立ち上げてコマンドを入力(ポート番号はなんでもOK)
“`
php -S 127.0.0.1:8080
“`
127.0.0.1:8080にアクセスすると
![スクリーンショット 2022-04-27 16.35.59.png](https://qiita-image-store.s3.a

元記事を表示

Laravel Controller作成時のオプション

# コントローラー作成時に便利なコマンド
大体のプロジェクトはCRUD処理を使うと思うのでアクション設定の記述をしなくても
勝手に作ってくれる!
二つ目はAPI用

“`
php artisan make:controller SampleController –resource
php artisan make:controller ApiController –api
“`
便利!

元記事を表示

WordPressで時間がずれてしまう

# 前提
WordPressでcurlコマンドを使用し外部APIから日時を取得し表示したいが、
時間がずれてしまう、、、
WordPressの管理画面でTimeZoneの設定が出来るらしいが、
筆者はWordPressの設定に詳しくないので
コードを書いて実装したいと思いました。

## 対処
一般的な記述をすると世界標準時が表示され9時間程ずれる。
“`
date(“Y-m-d H:i:s”);
“`

“`
$hoge = $get_response_data[‘datetime’];
$timezone_tokyo_hoge = DateTime::createFromFormat(‘Y-m-d\TH:i:s+’,$hoge);
$timezone_tokyo_hoge->setTimezone(new DateTimeZone(‘Asia/Tokyo’));

echo date_format($timezone_tokyo_hoge,”Y年m月d日 H時i分”);
“`
とりあえずこの変数内ではtimezoneの設定が出来ている。

元記事を表示

PHP Laravel 開発環境構築 mac

### 目的
PHP Laravelの開発環境を作ってみる。

### ゴール
新規プロジェクトを作って開発サーバをrunする

### php のinstallをしたい
とりあえずターゲットを知りたいのでコマンドを叩く
“`
~ $ brew search php
Error: Permission denied @ rb_sysopen – /private/tmp/github_api_headers20220426-3375-wye0ru
“`

む??、権限。。。設定しなおして再実行
でけた
“`
~ $ brew search php
brew-php-switcher php@7.2 phplint pcp
php php@7.3 phpmd pup
php-code-sniffer php@7.4 phpmyadmin
php-cs-fixer php@8.0

元記事を表示

34歳未経験おやじが自社開発企業に転職した話し

# [この記事について](#-この記事について)
この記事は34歳未経験のおじさんが第一志望の自社開発企業に内定を頂いた話しです。私のように現状に危機感を覚えたりしてプログラミングを勉強している方の参考になれば幸いです。
あくまで転職活動を通しての個人的見解なので異論、反論は謹んで認めさせて頂きます。

そしてこの記事は30代未経験が転職をする為の近道になるものではありません。あくまで***考え方***についてや転職市場の情報を記載したものです。近道を探してる方は ***「エンジニア 転職 3ヵ月」*** とかで検索してみて下さい。
そこで出てきた検索結果に飛びつきたくなると思います。
しかし絶対不幸なります。
20代前半はまだそれほど技術がなくても***「ポテンシャル採用」***の希望があります。

30代のエンジニアへの転職に必要なのは個人的に以下の3つ
* 前職での経験・・・マネジメントや課題解決能力など、プログラミングスキル以外でも活躍の幅があるか?
* 自走力・・・どの企業も

元記事を表示

PHPのクラス名の付け方について(メンターの人に指摘を受けたこと)

プログラミングスクールでデータベースのモデルを作る際、クラス名にアンダーバーを付けたのですが、メンター(講師の人)に見てもらったとき通例PHPではクラス名にアンダーバーはつけないと言われました。

“`php_faulse.php
class Sample_Class
“`

“`php_true.php
class SampleClass
“`

# 調べたら
自分で調べたらアンダーバーを付けるのは間違いではないと出ていましたし、ドキュメントでもアンダーバーを付けることに対して間違いであるという言及はされていませんでした。

# 結局
結局、自分でつけたアンダーバーは外し、頭文字大文字で表記するようにしました。

# どっちがいいかわからない
釈然としませんが、アンダーバーはつけてもいいのかどうか迷うところです。

皆さんはどう思うでしょうか?

元記事を表示

OTHERカテゴリの最新記事