PHP関連のことを調べてみた2021年09月01日

PHP関連のことを調べてみた2021年09月01日

PHPでオートロード(spl_autoload_register)処理を行う

#はじめに
PHPでクラスファイルを読み込んでいくと、気づいたらrequire_onceがたくさん羅列している状況に。。
これを改善する為、オートロード処理を行います。

#今回の設定
たとえば、以下のようなディレクトリ構造のとき。

“`
hoge/
├ ClassA.php
├ ClassB.php
├ ClassC.php
└ Main.php
“`

ファイルを読み込んでいくとrequire_onceがたくさん。

“`php:Main.php

元記事を表示

【Laravel】upメソッドとdownメソッドについて

#はじめに
今回は、マイグレーションファイルを作成したときに記述されているupメソッドとdownメソッドについて簡単に解説していきます。

#upメソッド
データベースに新しいテーブルやカラムなどを生成するための処理を記述する部分です。
デフォルトでidカラムとタイムスタンプの2つが既に記述されているので、その書き方にしたがって、追加したいカラムを記述していきます。

・新規登録時

“`php:作成日時_create_menus_table.php
public function up()
{
Schema::create(‘menus’, function (Blueprint $table) {
$table->bigIncrements(‘id’);
$table->string(‘menu_name’);
$table->timestamps();
});
}
“`

・カラム追加時

“`php:作成日時_menus_add_columns.php
public function up()
{
S

元記事を表示

PHP TSV 配列

TSVファイルを配列で表示させたいという時あると思います。
実際私も少し時間がかかってしまったため備忘録として残します。

“`test.tsv
id name type price
1001 egg food 200
1002 hook dvd 999
1003 hammer tool 300
1004 すし 食べ物 900
“`

このようなデータをPHPで読み込み配列として出力させるのがゴールです。

“`test.php

元記事を表示

BOM 付き CSV ファイルを PHP で処理

「phpでcsvを読み込んで項目名をキーにした連想配列をつくる[メモ]」
https://qiita.com/Terasan_Koshigaya/items/00ce0b114e527a572865
で紹介されている、csvToArray.php を使っていた。

“`

// csvの1列目をキーにした連想配列を返す(引数:csvファイルのパス)
function csvToArray($csvPath){
$csvArray = array();
$firstFlg = true;
$keys = array();
$count = 0;
$file = fopen($csvPath, ‘r’);

while ($line = fgetcsv($file)) {
if($firstFlg){
for($i = 0; $i < count($line); $i++){ array_push($keys,$line[$i]); } $firstFlg = false; }else{

元記事を表示

【Laravel】Laravel Socialiteを用いてYahoo JAPANのYahooID連携v2のOAuth2.0を用いた連携を行う。

自分用のメモとして残します。

#▼はじめに
Laravel Socialiteを用いてYahooJapanとのID連携を行おうと思ったら、Laravel Socialiteはデフォルトでは連携できないようだ。
本家Yahooとの連携は専用のライブラリをcomposerで入れればLaravel Socialiteが拡張される。
問題はYahooJapan用のLaravel Socialiteの拡張ライブラリは無いようで、自分で実装しないといけない模様。
んー面倒だなと思ったら、@zaburo様が投稿された[「Laravel Socialite用のYahoo JAPAN ID(YConnect)ドライバ実装」](https://qiita.com/zaburo/items/25ebbb3d1b580a0df9f3)という記事を見つけ参考にさせていただきました。。
こちらではv1用ではありますが、ほんの少し変更するだけでv2用の連携ができた。

#やり方
**注意)自分用のメモ程度に記述であり、動作保証をするものではないのであしからず。**
###0.前提
・Laravel Social

元記事を表示

三項演算子とは

#はじめに#
 今回は三項演算子について備忘録として残していきます。
そんなん常識やろ!と思われるかもしれませんがご容赦ください。

#三項演算子とは#
 三項演算子は一言で言うとif文を簡単に書くことができる演算子のことです。
例えば、

“`if.php
if($num1 > $num2){
echo ‘$num1は$num2より大きい’;
} else {
echo ‘$num1は$num2以下である’;
}
“`

このようなif文があったとしましょう。
これを三項演算子を用いて記述すると下記のようになります。

“`example.php
($num1 > $num2) ? ‘$num1は$num2より大きい’ : ‘$num1$はnum2以下である’;
“`

if〜else文を1行で書き換えることが出来ました。
 このように一つ目の式には条件式、二つ目の式(?の右隣)には条件が真の場合、三つ目の式(:の右隣)には偽の場合の式が入ります。

 公開、非公開を表すステータスや在庫の有無を確認する条件分岐などで使うと記述が短くなりますし、読みやすくなるかもし

元記事を表示

Contact Form 7 Multi-Step Formsを使用した時のIE対応

#はじめに
WordPressのContact Form7を使って、Googleフォームにみたいなステップ型のアンケートフォームを作りたいとクライアントから要望があったため、サクッと作りたかったので、ステップ分割が出来るContact Form 7のアドオンContact Form 7 Multi-Step Formsを使用して実装しました。

このアドオンの使用方法は以下のサイトが一番詳しく書かれていると思います。

長いフォームをステップ分割できるContact Form 7 Multi-Step Formsの導入方法

ところが、このアドオンはIEに対応していなかったのです。(Macばかり触ってるとIEのことはよく忘れがち)

Windowsを利用するユーザーのブラウザはほとんどEdgeになりますが、日本国内のブラウザシェア率を見ると、しぶとくもIE11が第5位にいらっしゃいますね。
https://webrage.jp/techblog/pc_browser_share/

今回は時間が無かったためIEを利用した際は、ステップ型を諦めて通常のフォームを表

元記事を表示

関数やメソッドの引数の数を調べて、必須項目以外をnullで埋める際のtips

“`php
class Hoge
{
// 引数が多い
public function getHogehoge(int $id, ?int $arg1, ?int $arg2, ?int $arg3, ?int $arg4, ?int $arg5)
{
return ‘hogehoge’;
}
}
“`

こんな引数が多いメソッド(しかも引数の数はたまに変わる)を使う際、`$id`だけ使い、それ以外nullで埋める場合の備忘録
そもそも引数をどうにかしろという言葉はぐっと堪えて下さい。。。

# 対応
“`php
// 関数の構造を格納
$refl = new \ReflectionClass(“Hoge(HogeクラスのあるPath)”);
// getHogehogeの引数の数を取得
$arg_num = $refl->getMethod(“getHogehoge”)->getNumberOfParameters();

$hoge = new Hoge();
// array_fillでnullを$arg_num – 1個分埋

元記事を表示

include_pathで外部モジュールを呼び出せるようにする *laradock環境*

# include_pathってなんやねん

PHPを使い始めてもうすぐ三か月がたちます。ようやく赤ちゃんから小学生くらいには成長したのではないかというところで、業務でドはまりしたことがありました。何がしたかったかというと、ダウンロードしてきた外部モジュールをそのまま開発環境に置いて、Controllerとかから外部モジュールを呼び出したかったわけです。でもまぁこれが思ったよりうまくいかなかったので覚書として。

## 状況説明

簡単にですがディレクトリ構造を再現してみました。外部モジュール内にあるphpファイルを`sampleController.php`で呼び出すことが目標です。

“`
app
├─Http
| └─Controllers
| └─sampleController.php
├─Models
└─外部モジュール
└─packageQ
├─A
| └─A.php
├─B
| └─callA.php
└─C
└─callAB.php
“`

“`A.php

元記事を表示

【AWS】EC2にWEBサーバーを立てて表示されない場合確認手順

##◆ 目的
EC2にWEBサーバーとDBサーバーを立てた時に、なかなか表示されず困ったことを今後のためにメモ。
確認手順や表示されない可能性を記述します。

“何が問題か分割して原因を探る“
・ネットワーク
・サーバー環境
・ミドルウェア(Apache、PHP、Composerインストールもれ、設定ミスなど)
・ソースコード

##◆ ドメインを叩いて想定している画面が表示されない時

###1)ErasticIPをアドレスバーに入れて表示できるかチェック
“表示されてたらAppacheの設定はOK“
 (ドメインで叩くと表示されない場合以下チェック)
・DNSの設定
・Route53の設定
・セキュリティーグループ設定(HTTP 80/HTTPS 443)

“ErasticIPで何も表示されてなかったらAppacheに問題があるかも。“
・Appacheの設定ミスの可能性 → ②

###2)Appacheの設定チェック

“/var/www/sample_site/public/“
ここに index.html 中に 「hello」 とか記述しといてちゃんと上

元記事を表示

Task Schedulerでユーザーごとに、データベースに保存した時間にコマンドを実行する

プログラミング初心者です。

##開発環境
Laravel 5.8
PHP 7.3.24
MAMP

##やりたいこと
Kernel.phpに、ユーザーごとに「毎日」、かつ「データベースに保存した時間」にコマンドを実行させるように実装したい。
参考サイト[こちら](https://qiita.com/nicopinpin/items/29dbdd666433253839ce)

##1 Migrate
まずユーザー側から設定された時間を保存するための、migrateファイルを作成します。

“`create_samples_table.php
class CreatePushesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create(‘samples’, function (Blueprint $table) {
$ta

元記事を表示

【Laravel】テーブル作成後にカラムを追加したい場合

#はじめに
テーブル(マイグレーションファイル)を作成した後に、カラムを追加したくなるときってありますよね。
私は、Laravelを学習し始めた頃、既に作成しているマイグレーションファイルにカラムを追加して、もう1回`php artisan migrate`すればいいんじゃないのって思っていました。
しかし、それでは`rollback`するときに、downメソッドによりテーブルが削除されてしまうので、それまでにテーブルに格納していたデータがなくなってしまいます。
そこで、以下の方法でカラムを追加していきます。
#カラムの追加方法
ターミナルもしくはコマンドプロンプトを起動し、

“`
php artisan make:migration –table=[テーブル名] [マイグレーションファイル名]
“`
を実行してマイグレーションファイルを追加します。
追加したマイグレーションファイルにカラムを追記して、`php artisan migrate`を実行すると、カラムを追加することができます。

#マイグレーションファイルのupメソッドの記述
・テーブル作成用

“`php:作業

元記事を表示

【PHP8.2?】動的プロパティが禁止されるかもしれない

[ゆるふわPHP絶対殺すマン](https://qiita.com/rana_kualu/items/c1b5397f9232d4c38f91#%E6%84%9F%E6%83%B3)である[Nikita Popov](https://github.com/nikic/)が、いよいよ本気を出してきました。

“`php
$dt = new DateTime();
$dt->hoge = 1;
var_dump($dt->hoge); // 1
“`

PHPでは未定義のプロパティに値を突っ込むと、特に何の抵抗もなくプロパティが生えます。
しかし、他の多くの言語ではこのような動作にならず、未定義プロパティを突っ込もうとするとエラーになります。
ということでこれを禁止しようというRFCが提出されました。

以下は[Deprecate dynamic properties](https://wiki.php.net/rfc/deprecate_dynamic_properties)のRFCの紹介です。

# PHP RFC: Deprecate dynamic properties

元記事を表示

[PHP]json_decodeで返される値の扱い方

PHPのjson_decode()について忘備録。
第二引数に指定した値によって型が変わる。

“`php
json_decode($json, true); //返される型は連想配列形式
json_decode($json, false); //返される型はobject形式
json_decode($json); //JSON_OBJECT_AS_ARRAYが設定されているかどうかによって決まる
“`

https://www.php.net/manual/ja/function.json-decode.php

## 連想配列形式

第二引数がtrueの場合、型は連想配列。

“`php
$json = ‘{“foo”:1,”bar”:2,”foo-bar”:3}’;

$result = json_decode($json, true);

echo(gettype($result)); // array
“`

中の値を取り出す場合は配列のキーを指定して呼び出す。

“`php
$result[“foo”];
“`

## オブジェクト形式

第二引数がfalseの

元記事を表示

paygent決済システム導入(PHP編2)

#趣向
PHPでpaygent決済システム導入を導入機会が
あったためゆらりと述べていこうと思います。

#PHP編1の続き
このページではペイジェントオンライン(試験環境)へのアクセスまでの流れを説明します。
ペイジェントオンラインはクライアント証明書をインストールしなければアクセスできません。

試験環境接続キットの中にある、pfxファイルを開きます。
押下するとパスワードを聞かれるため、入力。

![スクリーンショット 2021-08-30 18.35.22.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/843952/9fb7755d-6e11-6b2c-b8e2-49bfc08d713b.png)

証明書を追加する。
キーチェーンはログインにする。
![スクリーンショット 2021-08-30 18.36.41.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/843952/5f5d17ce-a88e-2bc9

元記事を表示

Amazon SP-API(セリングパートナーAPI)をPHP ノンフレームワークで実装してみた

Amazon「SP-API」は利用開始まで非常に難易度が高く、参考になるドキュメント自体が難解で非常に困ってたので、何かの役に立てばなと思い投稿しました。

##SP-APIって?
Amazonは、これまで出品用時に利用できるAPIとしてMWS-APIを提供していましたが廃止がきまり
後継として「セリングパートナーAPI(SP-API)」が登場しました、MWS-APIから移行?(作り変えかな、、、)する必要があります。

https://developer.amazonservices.jp/

ただ、大きな問題があります。
公式からドキュメントは提供されているのですが、GitHubをそのまま見てね状態です。

https://github.com/amzn/selling-partner-api-docs

英語直訳の日本語、サンプルソースもほぼ皆無。
C#とかのサンプルは見つけたけど、こっちはPHP使ってるし。。。。
素人にはもちろんのこと、AmazonのAPI関連扱ったことがない人は、ハードル高すぎます!

そこで今回、必要にかられてAPIの移行が必要となったため「SP-APIを

元記事を表示

PHPで超ミニマムお問い合わせ画面を作る

PHPでのメール送信について説明する機会があったので、最小限のサンプルをここにも書いておきます。
さくらのレンタルサーバ ライトプラン(PHP7.4)で動作確認しました。

# 対象の読者
– 「お問合せ」画面の仕組みを作りたい(サイトに訪れた人が「お問合せ」画面で入力し、「送信」ボタンを押すと管理人にメールが届く)
– PHPが動くサーバがある

# mb_send_mail とは
PHPに最初から備わっている「メール送信ができる関数」。
詳しくは[リファレンス](https://www.php.net/manual/ja/function.mb-send-mail.php)を参照。

# 確認してみる
メール送信の部分だけを確認するため、余分なところは省いていますが、このままコピペでも動きます。
(さくらのレンタルサーバであればwwwフォルダに以下の2ファイルを作成して、 http://ドメイン名.sakura.ne.jp/test.html で確認できます。)

### test.html

“`html

元記事を表示

読み込み系【PHP】

こんにちは!
毎週日曜日にqiitaに記事をアップすることを
目標として掲げていましたが‥。
実は土曜日に2回目のワクチン接種の影響で
日曜日はずっと高熱と戦ってました。

今回もPHPで新しいことを習ったのでその
アウトプットアウトプット

# file_put_contents

情報をファイルに保存できるファンクションです。
これを使えば様々な内容をファイルに書き込むことが可能です。

“`php

“`

# file_get_contents

ファイルを読み込むことのできるファンクション

“`php

“`

同じくファイルを読み込みたいだけなら
readfileというファンクションを使うこともできます。

“`php
readfile(読み込みたいファイルのパス);
“`
しかし、readfileの場合は
読み込んだファイルを再加工したり、
受け取った内容を使ってプ

元記事を表示

paygent決済システム導入(PHP編1)

#趣向
PHPでpaygent決済システム導入を導入機会が
あったためゆらりと述べていこうと思います。

#環境
PHP: 7.0.3
※PHP7系なら大丈夫です。

#はじめに
このページではpaygentのモジュールの動作確認が完了するまで説明します。

#1.試験環境接続キットを入手する
![スクリーンショット 2021-08-30 10.22.27.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/843952/fb378fc0-7754-e960-0102-dde69e5d550e.png)
![スクリーンショット 2021-08-30 10.24.16.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/843952/7cb2c450-a6d0-54d2-ffcf-820aa0bfc528.png)
まずは画像の通り、試験環境ボタンを押下し、自身の試験環境を設定します。
設定したら3日程度で試験環境接続キッド.zipを

元記事を表示

【個人開発】ネットで調べ物するたびに、タイトルとアドレスをメモれるツールを作って10年以上使っている話

たいした技術力はないのですが、個人開発の簡単なサンプルとして紹介したいと思います。

## Webコピ太郎とは

[Webコピ太郎](https://www.catch.jp/program/copy-taro/)は、いま見ているWebページのタイトルとアドレスを取り出すだけのツールです。

1. Webページを見ているとき、メモっておきたいと思ったら、このツールを呼びだす
2. ページのタイトルとアドレスを抽出して、テキストボックスに表示
3. クリップボードにコピー

![copy-taro.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/86880/cb0eae92-8887-d3eb-5a05-92abc890bf19.png)

## なぜ、このツールを作ったのか

ネットで調べ物をする度に、役立ちそうなページのアドレスとタイトルをコピペして、テキストファイルにメモするなんてありませんか?

たくさんの参考ページをメモろうとすると、何度もタイトルとアドレスをコピーするのでたいへん面倒くさい。

元記事を表示

OTHERカテゴリの最新記事