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

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

複数選択可能な入力フォームで、リクエストされたIDとDBに格納されているIDで差分がある場合、削除したり更新したりする。

# はじめに

今回、個人開発で提案商品という複数選択可能な配列形式のフィールドをforeach文で回しつつ、下記のような
処理を実装する機会があったので今後の自分用の忘備録として記事をまとめていきます。

・送られてきた提案商品IDとDBに格納している提案商品IDに差分があった場合、DBに格納されている提案商品のレコードを削除。

・そもそもリクエストとして送られてきた値に、提案商品IDが含まれておらず、その代わりに他の値が入っていた場合は
提案商品テーブルにレコードを新規作成。

・送られてきた提案商品IDと、DBに格納されている提案商品IDに差分がない場合、一致する場合はその提案商品IDのレコードの修正内容を更新する。

# 前提条件

仕様としては、提案商品編集というボタンがあり、そのボタンを押すと各商品、提案内容を入力出来て
商品名と、提案内容のセットが複数登録出来るという内容です。

提案商品テーブルに、商品IDが56、57のレコードが元々登録されていて、どちらかの商品を削除したい場合は
商品名の横に ×ボタンが付いており それを押すとフロント側でその商品の表示が削除され

元記事を表示

PHPにおけるDTOとはどうあるべきか?を今更考えてみた

今更ながらPHPにおけるモデル(DTO)とはどうあるべきか?を考えてみた。
(php8.0前提)

### 私の結論

まずは結論から。上司に怒られっからね!

“`php
$value) {
match($key)

元記事を表示

Laravel初めてでCloud Runでいろいとつまづいた(その1)

メモはたくさんあるのですが、まとめる時間がないです。

## とどいた案件
「Google Cloud(以下GCP)でWebアプリ走らせて」

お、おう、、、

## このタイミングで
いつかはAWSかGCPかと思ってましたが、まさかのこのタイミングでこの案件とは、、

## 環境
PHP8 Laravel8.x Dockerつかってます

## Cloud Runここが困ったぞ

コストカットのために未使用時はサーバがすぐに止まる設定にしているのですが、**アップロードした写真など**はアクセス後に消える仕様らしい。

なので、プロフィール写真や、発行したPDFなどはサーバがお眠りになた瞬間に消えるらしい。

いろいろググると、S3か、FTP(SFTP)がオススメらしい。

S3は別のバックアップで使っているのですが、お客様にまたS3を契約してもらうのは億劫なので、**Google Cloud Storage**を利用することにしました。

## Cloud RunからCloud Storageにどうやってアップするの?
### よくわかない
いろいろ検索した結果、、、よくわから

元記事を表示

LaravelのCashierでwebhookをイベントリスナでアレコレしようとして困った話

## ■ はじめに

当記事は

https://qiita.com/smtwtfs/items/daffbacd54f1dbc3df7b

↑この記事からの続きです。

Stripeのwebookのことについて書きますが、
Laravelでwebhookをどうやって使えるようにするかの詳細や、
ngrokでwebhookをテストできるよ、ということなどについては
既にたくさん良い記事がありますので
(記事を書いて下さった皆様大変お世話になりました?‍♀️)
当記事ではLaravelでStripeからwebhookを受けることができるようになったという前提で、
その後イベントリスナを活用しようとして
少し困ったことがあったので、そのときのことを備忘録的に残しておきたいと思います。

## ■ ありがとうCashier、ありがとうwebhook
LaravelのCashierではStripeからのwebhookを受けて色々な処理をしてくれます。
Cashierでwebhookを処理できるようにするには、
>[Laravel 8.x Laravel Cashier (Stripe)](ht

元記事を表示

2021年報

## プログラミング学習スタート

2021年5月からプログラミングって何かなという好奇心で学習を始めました。
初めはpythonがわかりやすいという記事を読んだので、pythonを触ってみました。
pythonの基本文法と、ゲーム作りを実践してみましたが、
結構面白くてプログラマーになるための情報を集めながら色々触ってみました。

2021年は下記の項目を学習しました。

– python
– html
– css
– javascript
– php
– Linux
– AWS
– mySQL
– git

学習中に気づいたこととして、
いつも使っているアプリやウェブサービス全てがプログラミング言語で書いていることでしてさらに学習のモチベーションになりました。

まずはフロントエンドとバックエンドを経験して、もっと面白い領域を深掘りしようと思いました。

## フロントエンド
– HTML, CSS, Javascript

### 習ったこと

– HTML,CSS,Javascriptの基礎
– CSSのFlexible Boxを利用した配置方法
– CSSでhoverなどのア

元記事を表示

予定管理アプリを作ってみた

Wenサイト: https://plan.towelman.server-on.net/sign_in

# 動機
 自分で予定管理をしようと思ったときに一つのプロジェクトごとに、複数人で管理できるような物が欲しくなり探してもこれといってピンとくるものがなかったため自分で作ってみようと思った。

# 大雑把な機能
 基本予定をプロジェクト単位で分ける。そしてプロジェクトは2種類ある。一つ目は複数人で管理・参画でき、「やること」の担当をそれぞれに割り振ることができて、期間を指定する「パブリックプロジェクト」である。基本的になにかの目的をなすための計画を管理するのに使うプロジェクトで使い方次第で1人でも複数人でも使えるようになっている。また、複数人で使い、自分以外にも計画に変更を加えさせたい人がいる場合はその人を管理者にすることによって実現可能である。そして二つ目は自分専用の期間を指定できない「プライベートプロジェクト」である。これはなにかの目的をなすための計画ではなく、日常で自分がやらないといけない「やること」を管理するプロジェクトだ。このプロジェクトで「入浴する」、「掃除する」などの「

元記事を表示

MAMPのローカル環境では動くのに、サーバーにアップするとphpが動かない(HTTP500エラー)

## サーバーのphpのshort_open_tagがoffになっている可能性
short_open_tagは、phpを省略して書く方法

## その情報を見るには
ファイルにinfo.phpという名前のからファイルを入れてアップ、アドレスバーにそこまでのファイルのパスを書く。
→サーバーの設定情報一覧が出る

## 解決策
info.phpページのuser_ini.filenameに書いてあるファイルの名前を作ってアップする
そこにshort_open_tagをオンにする記述して、アップする
例).user.ini

記述するコード↓
https://helog.jp/php/short_open_tag/

元記事を表示

【PHP】サマータイムかどうかを判定する

## 目的
サマータイムのある地域において、特定の日付がサマータイムの期間内かどうかを調べる機会があったので、PHPで判定の実装をしてみました。

## 結論
DateTimeZone::getTransitionsを用いて判定を行います。
“`php
$timezone = new DateTimeZone(‘America/Los_Angeles’);
$datetime = new DateTime(‘2022/3/12’, $timezone);
$transitions = $tz->getTransitions($datetime->getTimestamp(), $datetime->getTimestamp());
echo $transitions[0][‘isdst’]; // false
“`

## DateTimeZoneオブジェクト

PHPの日付クラスであるDateTimeはタイムゾーンの情報は持っていますが、サマータイムの情報はもっていません。
与えられた日時においてサマータイムかを判定するために5分で読める! laravel で DB 作成から 画面にデータを表示するまで

大事な部分でありながら、短い文章でまとめられていて初学者でもイメージしやすいものがあまりなかったのでまとめてみました。間違っている部分もあるかもしれません。

初学者の備忘録ですので参考までに
環境
+ mac
+ mamp
+ composer 利用
+ MySql を利用

## laravel インストール
“`
composer create-project –prefer-dist “laravel/laravel=6.*” プロジェクト名
“`
LTS(ロング・ターム・サポート)の「6」系統を使うことが多いと思います
“`
php artisan serve
“`
で確認

## DB の作成
MAMPの画面の「webstart」をクリックし
http://localhost:8888/MAMP/?language=English#
の「tools」->「phpMyAdmin」と行き、DB を作成

## 「.env」の設定を変更
http://localhost:8888/MAMP/?language=English#
の真ん中あたりにある「MySql

元記事を表示

静的(スタティック)メソッドと動的(インスタンス)メソッド

静的(スタティック)メソッドと動的(インスタンス)メソッドの違いとは?

・静的(スタティック)メソッドとは何か?
クラスの中で「static」を記述して作成した関数の中のメソッドのこと。呼び出しはクラスに対して行い、どこで呼び出しても同じ処理を行う。クラスメソッド」という名称もよく使う。

・定義例
//クラスの中で定義
[アクセス権限] static function メソッド名(){
//処理
};

・動的(インスタンス)メソッドとは何か?
インスタンスに対して呼び出し、インスタンス毎に固有の結果を返す。関数を定義する時は「static」を付けない。

*インスタンスとは、クラスで定義したプロパティを受け継いでいるものを指します。
詳しくはhttps://qiita.com/non0311/items/26f18af83d84ae95bc91

・定義例
//クラスの中で定義
[アクセス権限] function メソッド名(){
//処理
};

・静的(スタティック)メソッドと動的(インスタンス)メソッドの違い
(1)定義方法の違い
(2)実際に使う時の違いがある。

元記事を表示

名前空間 php (学習中・メモ)

名前空間について書いていきます。

・namespaceとは
名前空間とも呼ばれ、項目をカプセル化するときに使用します。
これにより、例えば通常同じファイルに同じクラスや関数名、定数名が存在することはできませんが、名前空間を使用することにより、関連するクラスや、インターフェイス、関数、定数などをグループ化することが可能です。また、名前空間を指定しておけば自分が作ったクラスが、サードパーティのクラスや関数などと名前が衝突することを防ぐことができます。

・書き方
namespace 名前空間名;
必ずソースコードの1番先頭で宣言する。「クラス」「インターフェイス」「関数」「定数」が名前空間の影響を受けます。また、namespaceの前にHTMLを記述するとエラーになる。

namespace name1;

function getName(){
return ‘tanaka’;
}

namespace name2;

function getName(){
return ‘kodama’;
}

namespaceを宣言すると、その後に記述した関数はその名前空間の関数に属

元記事を表示

【Laravelエラー】Cannot add or update a child row: a foreign key constraint fails

## 環境
Laravel v9.5.1 (PHP v8.1.3)

## 状況

“`php artisan migrate:refresh –seed“`を実行したとき、外部キーを設定している場合に下記のエラーが出ることがある。

“`
Integrity constraint violation: 1452 Cannot add or update a child row: a foreign key constraint fails…
“`

## 原因
上記コマンドで“`refresh“`した後に“`db:seed“`を実行しているが、seedを実行するファイルの順番で子ファイルが親ファイルより先に実行されてしまっているから。

## 解決法
migrateがちゃんとされているかを確認しできていたら、
ファイルを指定して、親ファイルが先にseedされるようにする。

“`
db:seed –class=HogeSeeder
“`

元記事を表示

CPI / ACE01 に入れた Laravel を 5.5 から 6.0 にバージョンアップした話

# サーバーのバージョンを php7.0 から php7.4 に上げよ

対象のサイトは laravel5.5 で作られているもので、自分的Laravel案件の初期の頃のものです。申し訳ないですがもう中身なんて覚えていません。
CPIでは、PHPのバージョンを .htaccess で変更できます。ディレクトリごとに設定することも可能なようです。CPIすごいねえ。。

とりあえずとにかく、まずはテスト環境で PHP7.4に変更してみましたが、動きません!
PHP7.4 では Laravel6.0 以上でないと動かないのです。

というわけで
# Laravel のバージョンを 5.5 から 6.0 に上げよ

大丈夫!
素直に作ってたら問題はあまりありません。

ただし、CPIのACE01(今回は ae***〜 サーバー)では OpenSSL がサポートされていないため、SSHでは行えません。
弊社では最近は Dockerで開発することが多いので、今回もDocker開発環境で行いました。

ここから手順を①〜⑤の5つに分けて書いていきます。

## ① Docker
– ベースイメージ

元記事を表示

【PHP】sessionを完全に理解した(仮)

## sessionを完全に理解した(仮)
これまでsessionを理解せずにRubyやら進めてきたが、
今回理解することに成功した。はず。

sessionを使うと何ができるのか。
またどのような際に使うと役立つのか備忘録として書いていきたい。

## sessionとは?
SESSIONとは、サーバ側で保有する、一時的なデータ保存の仕組みのこと。

ログイン情報など、ユーザーと紐づく情報をサーバー側に一定期間保存しておくことができる。
サーバ側にデータを保存するため、Cookieよりもセキュリティ面で優れている。

SESSIONが使われる例として一番代表的なのはログイン機能。

ユーザIDやパスワード情報をサーバ側にSESSIONとして保存しておくことで、
複数ページにわたるwebサービスでも同じ値を使い回すことができる。

## sessionが必要な理由
HTTPプロトコルでは、通常、情報の保持ができないため
sessionを用いて、一時的に情報を保持する必要があるとされている。

SESSIONとしてデータがサーバに存在していれば、
サーバ上のSESSIONデータから情報を

元記事を表示

reCAPTCHA Enterpriseの導入(PHPが古い人向け)

# 対象者
顧客や上司からgoogle reCAPTCHA を導入したいと言われたが
その顧客のサイトはPHPのバージョンが古くて
「reCAPTCHA Enterprise クライアント ライブラリ」なるものを導入できず
レンタルサーバーでSSHも使えず途方にくれている方。

# 前提条件
・Google Cloud Platform のアカウントを持っている
・プロジェクト作成済み
まぁ検索すればそれぐらいは出来るはず。

# 必要な情報
下記3点のみ Google Cloud Platform より取得してください。

API キー
そのプロジェクトに関連付けられたAPIキー
reCAPTCHA Enterpriseキー
取得方法は検索すれば詳しく説明されたのが出てくる
注意点は「チェックボックスによる本人確認を使用する」にすること。
これを選択しない場合は自動的に危険なアクセスかどうかを判別する方法になってしまうので
「私はロボットではありません」が表示されなくなります

元記事を表示

Laravel 環境にによる分岐処理

# 概要

– Laravelにて.envのAPP_ENVの値いよって処理を分岐させたい時の条件部分を簡単にまとめる

# 紹介

### ローカル開発環境かどうかの判定

“`php
if (app()->isLocal()) {
// ローカル開発環境でのみ実行したい処理
}
“`

### 本番環境かどうかの判定

“`php
if (app()->isProduction()) {
// 本番環境でのみ実行したい処理
}
“`

元記事を表示

【PHP】多次元配列の次元数に上限があるのか気になって試した結果

先日、実務で五次元配列をごにょごにょしているコードに遭遇しました。
普段は三次元配列まででほぼ事足りるので印象に残るコードだったのですが、
ふと、PHPの配列の次元数はどこまでいけるのか気になってしまい調べてみることに。
マニュアルを漁ってもそれっぽい記載を見つけることはできませんでしたが、素敵なブログを発見。

> [PHPの制限一覧](https://blog.ohgaki.net/php-limits)
>
> 配列型の要素数は内部で利用するハッシュのデータ構造定義に依存しています。
> – PHP 7.0未満は2^32個まで (uint32_tが利用されているが、実際には最大数に達する前に問題が発生すると考えられる)
> – PHP 7.0以上の場合、
> – size_tが32bitの場合は、0x04000000個まで
> – size_tが64bitの場合は、0x80000000個まで(通常は2^31個まで利用できる、と考えて良い)

実際は要素数の上限に達する以前にメモリが枯渇しますが上限は存在してそうです。
てことは、次元数についても同様にハッシュのデータ構造定

元記事を表示

【Laravel】美しいへルパ関数の作り方

## この記事に書いてあること
Laravelアプリケーションでヘルパー関数を作成する方法について書いています。

## なぜ書いたか?
自作のへルパ関数を追加したいと思って、やり方を調べたら以下のようにcomposer.jsonファイルにヘルパー関数を追加する方法が多く紹介されていました。

“`json:composer.json
“autoload”: {
“files”: [
“app/helpers.php”
],
}
“`

たしかにこの方法でも追加はできるのですが、へルパ関数を何個も実装したい時にいちいちjsonファイルを追記する可能性が出てきたり、`composer dump-autoload`をする必要が出てきたりと面倒くさいなぁと思いました。

あと単純になんか綺麗じゃないなと。

そこで以下の記事を参考にさせていただき、サービスプロバイダとしてへルパ関数を実装することにしました。

https://levelup.gitconnected.com/create-your-own-helper-function-in-larave

元記事を表示

Laravel artisanでよく使うコマンド

Laravel artisanでよく使うコマンドについて記載。

“`
#controller作成
php artisan make:controller Controller

#Model作成
php artisan make:model User

#Modelの生成先を指定したい場合
php artisan make:model Models`\\`User

#migrationファイルの作成
php artisan make:migration

#migrationを戻す(–stepに指定数分巻き戻される。現在の状況はmigrationテーブルを参照)
php artisan migrate:rollback –step=1

#認証機能を作成したい場合
php artisan make:auth

#artisanコマンド作成
php artisan make:command

#イベントククラス作成
php artisan make:event

#listenerクラス作成
php artisan make:listener

元記事を表示

LINEログインをPHPで実装する

LINE for Businessのアカウントでお客さんとやり取りした後に、フォーム入力をお願いすることになりました。フォームにメアドやLINEのニックネームを入力をお願いするのもリダンダントなので、LINEログインでメアドやニックネームを取得してフォームに自動入力させてみます。

手順は以下の通り(こちらを見ながらやるとよいと思います)
1. LINE developersコンソールでLINEログインのチャネルを作成
1. 同コンソールにてコールバックURL設定
1. コード書く

用意するコードはログイン開始ページlogin.phpと、コールバックページcallback.phpの2つです。

“`login.php
$callback_url = “https://example.com/callback.php”; //LINE developersコンソールに設定したURL
$state=rand();

$ur

元記事を表示

OTHERカテゴリの最新記事