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

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

デバッグツール Xdebug がおすすめじゃけぇ、いっぺん見てみんさい!(VSCode、Docker、PHP)

# はじめに

PHP の定番のデバッグツールの Xdebug のおすすめの設定や使用方法をご紹介する記事です。
(おすすめしたい気持ちが高ぶり、故郷の方言が出てしまいました。)

![xdebug.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/527226/6739edf1-feb1-92c2-f8ce-789e23798016.gif)

コンソール画面で操作するブラックジャックゲーム開発の際に Xdebug を導入していたので、その環境をサンプルとして使用します。

https://qiita.com/ryamate/items/f77efb0888bb025e5f5b

その環境で Xdebug を起動させて、プログラムを実行したときにどんなことができるかを実際に見ていきます。

## Xdebug とは

**Xdebug** は、 **PHP** の **デバッグツール** です。

https://xdebug.org/

**デバッグツール** は、 **バグの原因を見つける作業を手伝っ

元記事を表示

Brefを使いPHPのコードをLabmdaにデプロイする

# はじめに
はじめまして!
ジョージと申します。
先日PHPで書かれた業務委託先のサブシステムを既存サーバーからLambdaに移行する作業を行いました。
その時にPHPでLambdaにデプロイしている記事が少ないように感じたため、今回の記事を書こうと思いました。

# 前提
今回は[bref](https://bref.sh/docs/)というライブラリを使用するため以下の公式ページの手順を事前に行う
– [イントール手順公式ドキュメント](https://bref.sh/docs/installation.html)
– サーバーレスをインストールする
– AWSのアクセスキーを作成する
– Brefをインストールする

# 初期化
次のコマンドを打ってファイルを作成する
“`cmd
vendor/bin/bref init
“`

以下のように聞かれるため今回は「0」をコマンドで打つ
“`cmd
What kind of lambda do you want to create? (you will be able to add more functions

元記事を表示

PHPでSQL文を生成する関数を作ってみた SELECT編

SELECT文をPHPで簡単に生成しよう

皆さんは苦手な物はありますか?
私は,SQL文が大の苦手です。
しかし,最近は業務の都合でDB周りに触れ始めてきました。
業務で使うとなれば嫌いだの苦手など言ってられませんがSQLは書きたくない,そんな私のような人に向けて
SQL文を生成する関数を作ってみました。
>環境
>PHP : 8.1.6
>MariaDB : 10.4.24
Apache : 2.4.53 (Win64)

テーブル構成

テーブル名:thread

今回は2チャンネルのような掲示板の簡易版を制作をすることを仮定して進めていきます。

SELECT文の生成

SELECTで受け取ったデータを一覧表示するdisp.php

“`php:di

元記事を表示

【WordPress】管理画面に画像アップローダーを複数設置する方法【プラグイン無し】

久々の投稿になります。コースケです。
以前、ワードプレスの自作管理画面をプラグイン無しでカスタマイズする案件があったのですが、
「複数の画像アップローダーをプラグインを使わずに設置する」という作業に結構苦戦したので、
備忘録としてその方法を掲載しておきます。

まずはfunction.phpの内容です。
肝のjs(Jquery)部分はその次に掲載します。

“`function.php
//—————————————————–
//管理画面に独自のcssとjsを読み込む
//—————————————————–
function add_admin_style(){
$path_css = get_template_directory_uri().’/css/admin.css’;
wp_enqueue_style(‘admin_style’, $path_css);
}
add_action(‘admin_enqueu

元記事を表示

【PHP】オブジェクト指向

## 概要
本記事はオブジェクト指向の基礎になります。

## オブジェクト指向とは
オブジェクト指向とは、プログラミングを効率化するための手法・考え方になります。
あるプログラムをクラス(概念)という単位でまとめ、クラスを元にオブジェクト(インスタンス)を作成し、インスタンスのやり取りによってプログラムの流れを書いていきます。

例えば、私たち一人ひとりは、人間というクラス(概念)のオブジェクト(インスタンス)になります。そして人間というクラスには、年齢、身長、性別などのデータ(プロパティ)や、歩く、寝る、食べるなどのふるまい(メソッド)が存在しています。

## クラス
オブジェクト指向ではクラスという概念を利用して、そのクラスを元にインスタンスを生成してプログラムを書いていきます。
では、クラスを定義してみましょう。

“`php

“`
まだ中身は空っぽですが、これでHumanというクラスが定義できました。
クラス名は、単語の区切りを大文字にして書くパスカルケースという

元記事を表示

Copilotで得するPHPプログラミング#1

# Copilotで得するPHPプログラミング

この半年くらいGitHubが提供するCopilotを便利使っている。
こいつナシの考えられないくらい依存する体質になってしまった。

というわけで、Copilotをどう便利に使っているかを説明する。

## 実践例

作りたい処理をコメントに入力する

![ss 18.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6384/9bd32d8c-83c1-f40d-4467-58cbd48899ae.png)

Copilotが候補をいくつか出してくるので、選択する。

![ss 19.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/6384/5ce95db5-3bd7-f650-0fcb-5b8a8e26a3f1.png)

そのままだと動かないので、直してあげる。
![ss 20.png](https://qiita-image-store.s3.ap-northeas

元記事を表示

初学者によるGETメソッド、POSTメソッドの違い

PHPの学習を進める際に、初めに引っかかり、判別がややこしかったのが「GETメソッド」と「POSTメソッド」の違いです。今回はその違いを調べてみました。コードを書く際に、はっきりと理解して、適切に使い分けられるようになりたいと思います。

GETメソッドとPOSTメソッドの違いを考える前に、前提として「HTTP」、「HTTP通信」について理解する必要があります。
# HTTPとは?
**HTTP**は「HyperText Trasfer Protocol」の略称で、WebサーバーとWebブラウザの間で通信し、情報をやりとりするための通信プロトコルです。
簡単に言うと、インターネットでサーバーとブラウザが通信するときに使われるルール、約束事のようなものです。
### HTTP通信
HTTPを使って通信することを**HTTP通信**と呼びます。
例えば、ホームページを閲覧する時には、**クライアント**である「ブラウザ(Google ChromeやMicrosoft Edge)」から「このページが見たい!」という要求を送ります。これが**HTTPリクエスト**です。
その要求に対して、情報

元記事を表示

$_SERVER[‘DOCUMENT_ROOT’]に関する考察 そもそもドキュメントルートって?

Movable Type引っ越しシミュレーションをする際に、$_SERVER[‘DOCUMENT_ROOT’]で引っかかったので考察を記す。

今回は、エックスサーバーで検証してみよう。

まず、ドキュメントルートを表示するためのindex.phpを準備する。

“`

元記事を表示

【Laravel × livewire × FullCalendar】動的なスケジュールアプリを作ろう。Part1【予定表示〜作成編】

# 概要
今激アツなLaravelライブラリ livewireとFullCalendarを使ってカレンダーアプリを作っていきます。

example的なものなのでカスタムして使ってください。

## 記事の背景
exmaple的なものから逆引きしてドキュメントを読んだりする方が、理解がしやすいのではないか?
と思い、他の人や自分が似たような事をする時に役立つんじゃないかなと思い記述に至りました。

## この記事の対象
– livewireとfullcalendarでカレンダー機能を作りたい人
– fullcalendarで機能を作りたいけど使い方とかドキュメントが分からない人

## 作る機能
– 非同期更新するカレンダー ← 今回の記事
– 予定の作成 ← 今回の記事
– 予定の編集
– ドラッグ&ドロップでの予定の移動
# 使用するフレームワーク/ライブラリ
– Laravel9
– livewire/livewire
– jsレスで動的な機能が作れる最強ライブラリ
– jeroennoten/laravel-adminlte
– 見た目用に使うデザインパッケージ

元記事を表示

【PHP】strtotime(‘+1 month’)で次月を求める時には注意が必要

# はじめに
`strtotime(‘+1 month’)`を使用して下記のようなプログラムを書いた。

“`php
$date = “2022-01-31”;
var_dump(date(‘Y-m’, strtotime($date.’+1 month’))); // 2022-03
var_dump(date(‘Y-m’, strtotime($date.’+2 month’))); // 2022-03
var_dump(date(‘Y-m’, strtotime($date.’+3 month’))); // 2022-05
“`
ただ、月の日数関係で次月をうまく取得することができなかった…

# 結論
月に必ず存在している1日を指定することで解決!
“`php
// 解決策1
var_dump(date(‘Y-m’, strtotime(date(“Y-m-01”).’+1 month’)));

// 解決策2
var_dump(date(‘Y-m’, strtotime(‘first day of next month’)));
“`

# 参考文献

https

元記事を表示

【Laravel】「配列やコレクションの中身に何が入っているか分からない…」を解決する

## はじめに
PHP(Laravel)ではGoやTypeScript等とは違い配列やコレクションの「**中身の構造や型**」を定義する術がありません。

こんな現象に見舞われたことはないでしょうか?

“`php:Purchase.php
class Purchase
{
/**
* @param array $data
*/
public function get(array $data) // ← ?
{
// $dataを使って何かをする処理
}
}

“`

**「`$data`…?」**

これは`$data`の命名が抽象的すぎて何を表してるのか分からない、という話ではなく、**`array`と型定義されてはいるもののその中身がどうなっているのか(どういう構造をしているのか)全くわからない**、という問題です。

仮に引数の名前を分かりやすく、さらにアノテーションを詳しくしてみることにします。

“`php:Purchase.php
class Purchase
{
/**

元記事を表示

GoToEatで学ぶgoto文

## コード

### GoToEat使った場合

“`php:goto_eat.php

元記事を表示

SQLSTATE[HY000] [1044] Access denied for user 解決方法

SQLSTATE[HY000] [1044] Access denied for user

エラーが出たときの解決方法

zamppでmysqlのAdminを開く

mysqlのデータベースを開き、中にあるテーブルを全てチェックする

その隣のチェックしたものを:のリストボックスの中になる「テーブルを修復する」を選択する

そしたら、解決した。

友人から解決方法を教えてもらいましたが、どのような仕組みで解決したのかわかる方教えてほしいです。

エラーの意味は権限のエラーということは理解しています。

元記事を表示

WooCommerce + Stripeで、クレジットカードの利用明細表記をカスタマイズする方法

WooCommerceでStripeを利用したクレジットカード決済を実施している場合、顧客のクレジットカード明細には、通常以下のどちらかが記載されます。

– Stripeアカウントで設定した「明細書表記」
– WooCommerce管理画面で設定した「明細書表記」

![スクリーンショット 2022-06-13 14.49.36.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2366300/6424ff30-b40d-b975-d4fb-fe7489522618.png)

ですが、提供したい商品やサービスによっては、「特定の商品では、別の表記を記載したい」場合もあります。

今回は、WooCommerceのフックを利用して、明細書表記をカスタマイズする方法を紹介します。

## 明細書表記のカスタマイズは、`wc_stripe_generate_create_intent_request`フックを利用する

`wc_stripe_generate_create_intent_request`フックは

元記事を表示

PHP isset is_null emptyについて

# 概要

– PHPの`isset()`や`is_null()`や`empty()`について曖昧だったので自分のためにまとめる。(この手の記事は先人の皆さんがたくさん記載頂いているが自分の勉強のためにも自力でまとめてみる。)

# `isset()`

– PHPのドキュメントには下記のように記載されている。

::: note info
変数が宣言されていること、そして null とは異なることを検査する

– その変数が宣言されていて、かつ、nullではない場合trueを返す。それ以外の場合falseを返す。
– 複数の引数が渡された時、全て「その変数が宣言されていて、かつ、nullではない場合」のみtrueを返す。
– また、ドキュメントには下記のように記載されており、`isset()`は関数ではなく言語構造(`if`や`for`とかと同じでPHPにもとから組み込まれている処理)である。

::: note warn
これは、関数ではなく 言語構造のため、可変関数 や 名前付き引数 を用いてコールすることはできません。

– 例を下記に記載する。

元記事を表示

Stripeの決済時間を変更する方法

## ■目的
毎日決済が成功しているかを朝 9:30ごろに確認するため、その時間までにその日の決済が行われるようにしてほしい。
10/18 21:00:00 に決済されるものを -> 10/18 09:03 に決済されるようにしたい。

## ■補足
Stripeは基準の時間がUTC時間に準じて操作となるため、日本時間0:00〜08:59に決済される取引については、月初の決済日の場合、日に応じて決済日が変更される可能性があります。
https://tech.stmn.co.jp/entry/2021/01/28/093349

そのため、0:00〜08:59 に決済されるようにする候補がなくなり、9時過ぎに変更するということになりました。

## ■始めに考えたこと
無料期間を設定し、無料期間の終了のタイミングを決済日の9:03 に設定する方法を検討しました。

## ■問題点
しかし、この場合、カスタマーポータルをお客様が開いた時にプランが無料期間中という表示がなされます。
また、更新した時点で0円のインボイスが発生し履歴に残ります。
これでは、サブスクリプションを契約しているクライ

元記事を表示

【ポエム】レガシィPHPの中でも生き残る

先日行われたカンファレンスでは相変わらず「[静的解析をCIに取り入れてみました!」や「レガシィシステム改善してるぜ!」というようなキラキラした発表が多かったように感じます(カンファレンスというのはそういう場なのでそれはそう)。少し前のPHPerKaigiを含めマイクロサービスやモジュラモノリスのようなアーキテクチャの話やフィーチャートグルでシステムを安定させるようなマクロ的話も印象的でした。

しかしながらリアルワールドなPHPの現場には未だにレガシーな環境も数多く存在することは言うまでもなくまた事実。
PHPConference2022の[『PHPの今とこれから』](https://fortee.jp/phpcon-2022/proposal/e67d6f03-ecc5-4fc8-a794-db8097b645af)という発表恒例のアンケートでははとっくにEOLを過ぎているPHP5系のシェアが少なくなったものの、未だに20%以上を占めているということからも、様々なしがらみからバージョンアップができずにレガシー化しているプロジェクトがまだまだ相当数あるのだなぁということが感じられました

元記事を表示

正規表現メモ

よく使う正規表現のメモ

PHP

“`php
$h = ‘Google‘;

if(preg_match(‘!([\\s\\S]*?)!’, $h, $m)) {
print_r($m); // ==> Array ( [0] => Google [1] => https://google.com [2] => Google )
}

“`

Nodejs

“`Javascript
let h = ‘Google‘;
let result = /([\s\S]*?)<\/a>/.exec(h);
if(result){
console.log(result);
/*
[
開発環境の構築(VirtualBox + Vagrant + Homestead + Composer)で発生したエラー集

## 前提
OS:Windows10 64bit
PHP:7.3
VirtualBox:6.1.38
Vagrant:2.2.6

どうも。Qiita初投稿のPHP初心者エンジニアです。
先日環境構築を行ったのですが、Homestead? Composer?となりながら進めてだいぶ時間を費やしました。
備忘録がてらタイトルにある通り、途中ではまったエラーを載せていくので誰かの参考になればうれしいです。

## 目次
第1章 Composer installでエラーが発生した場合
第2章 502:Bad GateWayが発生した場合

## 第1章 Composer install

まずcomposerとはPHPのパッケージ管理システムです。
開発にはさまざまなライブラリが必要になってきますが、公式サイトにアクセスしzipファイルをダウンロードしローカルに展開することが求められ、何を使用するかは個人の裁量に依存しがちです。
パッケージ管理システムはそれらを個人の裁量に依存せずに導入できる仕組みを提供します。

ぜひ欲しいですよね。さっそくインストールをしましょう。
“`rb
Comp

元記事を表示

WooCommerce7.0で「外出先から注文できます。アプリを取得しましょう。」が表示される

## 概要
WooCommerce をバージョン7.0に引き上げると、購入完了時に管理者に送られてくるメールの末尾に「外出先から注文できます。アプリを取得しましょう。」という文言が挿入されます。

![スクリーンショット 2022-10-21 194014.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1261074/796083a6-c32e-64a7-dd29-ce84a7e3863a.png)

「アプリを取得しましょう」をクリックするとスマホ用の WooCommerce アプリの紹介ページに遷移するので、おそらく宣伝のためのものだと思われます。

購入者宛のメールに表示されるわけではないですし、こちらの業務の妨げになるものでもないですが、鬱陶しいことには変わりないので表示しないようにしてみました。

## 環境
WordPress:6.0.3
WooCommerce:7.0.0
PHP:7.4

## 原因
今回上記の文言が追加された原因は、WooCommerce のプラグインファイル “`

元記事を表示

OTHERカテゴリの最新記事