PHP関連のことを調べてみた

PHP関連のことを調べてみた
目次

【備忘録】【MAMP】PHPのタイムゾーンの設定

MAMPのタイムゾーンを日本時間に設定するやり方をメモしておきます。
※変更する時はサーバーをストップさせた状態でやること。

1. PHPのバージョン確認

MAMPを開いて、「PHP version」からバージョンを確認します。

![スクリーンショット 2024-07-09 15.08.02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3827365/15275194-757e-f38d-b6cb-4ac78dd01bce.png)

2. php.iniを開く

ファイルの場所は「Application/mamp/bin/php/php××.×/conf」配下にあります。
※「××.×」は「1」で確認したバージョン

3. date.timezone

「date.timezone」の箇所を「”Europe/Belrin”」→「”Asia/Tokyo”」に変更し、
コメントアウトされてい

元記事を表示

GroupSession WebAPIを使ってPHPで施設の予約内容を取得する

:::note info
APIの概要は「無料版GroupSessionの設計書(WEB API 仕様書)」をダウンロードしてください。
:::
例として今日の設備予約内容を取得する。

※取りあえず動くことだけを目的としているので「ここがおかしい」「こうしたほうがよい」などあればお知らせください。

# 準備
GroupSesseion のインストールや初期設定は割愛。

1\. admin 以外の管理者ユーザーを1つ作成する。

2\. GroupSesseion のプラグインマネージャで「WebAPI」を「使用」にする。

3\. WebAPI の管理者設定 ⇒ Web API基本設定 ⇒ トークン認証を「使用する」

4\. WebAPI の管理者設定 ⇒ Web APIトークン管理 ⇒ トークン発行。1で作った管理者ユーザーを選択してトークンを発行する。生成されたトークン文字列は、このあとすぐに使います。

# 実装
## 施設名と施設SIDを取得する
“`sample1.php

元記事を表示

LaravelでのCSRF除外設定について

# LaravelでのCSRF除外設定について

先日、PHPでLaravelを用いた勉強をしていた際、LINE MessagingAPIを導入した時にwebhookにアクセスが通らないという問題が発生しました。解決まで少し時間がかかったので、備忘録として記事を書いておきます。

## 問題の発生

LINE MessagingAPIを導入する際、POST通信を行うためにCSRFから除外する必要があります。通常、その除外するURLを設定するファイルは `app/Http/Middleware/VerifyCsrfToken.php` の中に記述します。しかし、このファイルが見当たりませんでした。プロジェクトファイルの作成時にミスったかと思い、手動で作成してみましたが、それでも問題は解決しませんでした。

## 解決策

シンプルにリサーチ不足でした。Laravel Ver.11では、デフォルトで `App\Http\Middleware\VerifyCsrfToken` がなくなるとのことです。そのため、`web.php` に直接記述する方法を取りました。以下の通りです。

“`ph

元記事を表示

Google Apps ScriptでPHPのHmacSha256ハッシュを作成しようとしたら沼った話

# はじめに
あと1年ほどでサービスが終了してしまうLINE Pay。

https://pay.line.me/jp/developers/apis/onlineApis?locale=ja_JP

今回焦点を当てたのは、LINE Pay APIの認証方法で使われている「HMAC-SHA256」ハッシュ作成方法です。

この方法を参考にした認証方法をサービスに組み込んだのですが、Google Apps Scriptから利用するときは工夫が必要でしたので、記事を書くことにします。

# LINE Pay APIで利用されているハッシュの作り方
“`
Signature = Base64(HMAC-SHA256(Your ChannelSecret, (Your ChannelSecret + URL Path + Query String + nonce)))

※ Query String : ?を除いたクエリ文字列(例 : Name1=Value1&Name2=Value2…)
“`

# サービス用にカスタマイズしたハッシュの作り方

“`
Signature = B

元記事を表示

Laravelのキューを並列処理させるためのsupervisorの使い方

## はじめに
Laravelのキューは同じプロジェクト配下のジョブを実行させるのには便利ですが、並列処理を行うにはSuperVisorというプロセス管理ツールが必要です
本記事ではLaravelのキューを並列処理するためのSupervisorの基本的な知識と設定方法を詳しく見ていきます

## Supervisorのインストール方法
UbuntuやDebianではaptでインストールできます
“`sh
sudo apt-get update
sudo apt-get install -y supervisor
“`

バージョンが確認できればインストール完了です
“`sh
supervisord -v
3.3.1
“`

## Laravelのキュー設定
次にLaravelのキューを設定します`.env`を編集して、キューのデフォルトドライバーを設定します
“`env
QUEUE_CONNECTION=database
“`

次にキューテーブルを作成します
“`bash
php artisan queue:table
php artisan migrate
“`

元記事を表示

【PHP】マルチバイト文字をバイト数を指定して取得する場合は、mb_strcut()を使うと良い

## はじめに

業務でマルチバイト文字をバイト数を指定して取得する機会があり、そのときバイトの関係で文字化けしてしまったので、調査した結果を書いておきます。

## コード
“`test.php

元記事を表示

【Drupal/EC2/Slack/Qiita】QiitaトレンドにのったらSlack通知

Qiitaのトレンドに載ったらうれしいですよね。

今回は、Qiitaが提供しているRSSを使って自身の記事がトレンド入りしたらSlackで教えてくれる機能を実装してみました。

## はじめに (すみません、実はシリーズです。)

以前、QiitaのRSSをDrupalでAPI化する実装をしてみました。
せっかく実装したAPIですので、今回さらに活躍させてみようと思います。

https://qiita.com/umekikazuya/items/c20ac26b59670a72ca7b

https://qiita.com/umekikazuya/items/6379e3785b385bceabb3

https://qiita.com/umekikazuya/items/54b6ada9024f17499aa5

※ 「せっかく公式がRSSを提供しているのに、なんでAPI化するの?」っていう疑問あると思います。どれかの記事で触れてるので文句・不満がある人は読んでください。

## トレンド / Feed (Qiita公式)
どうやら、個人記事RSS/トレンド記事RSS どちらもX

元記事を表示

Laravelで最速にAPIサーバーを作成する(3ステップ)

# 概要
LaravelでAPIサーバーを作成する際の要点をこの記事にまとめる。
以下のように実装すれば、主要観点を最短で実装できないか?と思う。

# ① routes/api.php にPATHを設定
“`routes/api.php
use Illuminate\Support\Facades\Route;
use App\Http\Controllers\PlayerController;

~

Route::prefix(‘player’)->group(function () {
Route::get(‘/’, [PlayerController::class, ‘index’]);
Route::get(‘/{id}’, [PlayerController::class, ‘detail’])->where(‘id’, ‘[0-9]+’);
Route::post(‘/’, [PlayerController::class, ‘insert’]);
Route::patch(‘/{id}’, [PlayerController::cla

元記事を表示

【PHP8.4】便利な配列検索関数array_find()が追加される

配列で存在確認する関数といえば、どこに行っても第三引数`true`を指定しろと書かれている[in_array](https://www.php.net/manual/ja/function.in-array.php)・[array_search](https://www.php.net/manual/ja/function.array-search.php)と、`isset($array[$key])`って書いた方が短い謎関数[array_key_exists](https://www.php.net/manual/ja/function.array-key-exists.php)くらいしかありませんでした。
いずれもまあそれなりに便利ではあるのですが、たとえば正規表現検索できないなど色々と使い勝手の足りないところがありました。

ということでコールバックで任意に検索できる関数を追加しようというRFCが提出されました。

既に受理されており、PHP8.4から使用可能になります。

以下は該当のRFC、[array_find](https://wiki.php.net/rfc/array

元記事を表示

API Gateway で転送したサーバでリクエスト元のIPアドレスを取得

さくらインターネットのレンタルサーバでPHPを使って小規模なAPIサーバを作成しています。
このAPIサーバに対して、AWSのAPI GatewayのHTTP統合を利用してリクエストを転送しています。
わけあって、APIサーバでリクエスト元のIPアドレスを制限する必要が生じましたが、`$_SERVER[“REMOTE_ADDR”]`ではAPI GatewayのIPアドレスが取得されてしまいます。そこで、簡易的に実際のクライアントのIPアドレスを取得する方法を記録しておきます。

`$_SERVER`変数を確認すると、`$_SERVER[“HTTP_FORWARDED”]`にリクエスト元のIPアドレスが含まれていたため、これを利用することにしました。

“`
[“HTTP_FORWARDED”]=> string(92) “by=3.235.35.99;for=11.22.33.44;host=hogehoge.execute-api.us-east-1.amazonaws.com;proto=https”

“`

`for=11.22.33.44` がクライアントの実際のIP

元記事を表示

Repositoryパターンを理解した気になる

※前提
PHP(Laravel)で実装しています。

デザインパターンを勉強するときに、[こちらの記事](https://refactoring.guru/ja/design-patterns/factory-method)をよく参考にするのですが、今回はRepositoryパターンについて学ぶ機会があったのでまとめます。

デザインパターンの書籍や記事は体感Javaで書かれていることが多いイメージですが、私は業務でJavaをほとんど書いたことがないので、今回は言語はPHPで動かしてみます。

## Repositoryパターンってなにもの?
デザインパターンの1つでDDD(ドメイン駆動)について調べているとよくみる言葉です。
一言で言うと、

**ビジネスロジックとデータ操作を分離する**

設計手法だと思います。要はデータベースやデータストア等のインフラ層については忘れて、ドメインに集中したいよねっていうことです。これだけだと3層アーキテクチャじゃね?と思いますが、3層アーキテクチャをデザインパータン的に落とし込んだ型の1つとしてRepositoryパターンが使えるのかなという所感

元記事を表示

Laravelでジョブとキューを活用する方法

## はじめに
今回はLaravelのジョブとキューを活用して効率的に非同期処理を実行する方法について解説していきます
ジョブとキューの基本概念から実際の実装方法、設定、活用例、トラブルシューティング、ベストプラクティスを見ていこうと思います

## ジョブとキューの基本概念
### ジョブ(Jobs)とは
ジョブは、非同期で実行される処理単位を指します
例えば、ユーザー登録時のメール送信、画像のリサイズ、データのバックアップなどが該当します
ジョブをキューに投入することで、即時ではなくバックグラウンドで処理を行うことができます

### キュー(Queue)とは
キューは、ジョブを管理・処理するための仕組みです
ジョブはキューに投入され、指定されたワーカーによって非同期的に実行されます

## ジョブの作成方法と実行方法
### ジョブの作成
Laravelでジョブを作成するには、以下のコマンドを実行します
“`bash
php artisan make:job SendWelcomeEmail
“`

このコマンドにより、`app/jobs`配下にジョブクラスが作成されます
`

元記事を表示

【Laravel11】Roach PHPでjQuery のようなセレクタからxpathで記述するよう修正

# はじめに

こんにちは、エンジニアのkeitaMaxです。

前回作成したスクレイピングのサンプルをxpathで記述しようと思います。

前回の記事

https://qiita.com/keitaMax/items/f2abb408a8a2fbc9a988

# xpathとは

>XPathとは、データを収集する際に要素や属性を指定して、情報を取得するための言語です。
(引用:https://pig-data.jp/blog_news/blog/scraping-crawling/xpath/)

CSSセレクタのようにHTMLなどの要素や属性を指定することで情報を取得することができるもののようです。

# 前回の記述

下記のようにjQuery のようなセレクタを使用して書いていました。

“`
$subtitle = $response
->filter(‘main > div:nth-child(2) p:first-of-type’)
->text();
“`

これをxpathで書いてみようと思います。

# 修正結

元記事を表示

就労継続支援事業所で学習するプログラミング言語

# はじめに
収録継続支援事業所で学習するプログラミング言語について記事にします。

## 就労継続支援事業所とは?

>障害者手帳を持つ方の就労の機会の提供、生産活動の機会の提供する事業所
>現時点で一般企業への就職が不安、あるいは困難な方
>を対象にしています。

ソース
https://works.litalico.jp/syuro_shien/ikou_keizoku/

## 就労継続支援事業所で取り扱うプログラミング言語
JavaScript
PHP
HTML/CSS
VBA

## 解説
就労継続支援事業所でITの仕事を取り扱う場合、ホームページの作成が主となるためJavaScript、PHP、HTML/CSSを使うのがメインのようです。
VBAは勤怠管理に使うケースが多いようです。

# 最後に
就労移行と違って短時間勤務の問題があるため、プログラミング言語は検定されるのかなと思います。

元記事を表示

【Drupal】ダミーデータ作成テクニック ~ MBTIのデータ登録

## はじめに
以前、こちらの記事内でMBTIデータをTaxonomyTermで登録するスクリプトについて触れました。

https://qiita.com/umekikazuya/items/520efa0cd8689c0f3d8b

16個もGUIで作ってられないですよね。
その時に使用したMBTIデータ登録スクリプトを紹介します。

## サンプルデータ
以下のフォーマットの配列を用意します。
“`php
$data = [
[‘name’ => ‘ISTJ’,’vid’ => ‘mbti’],
[‘name’ => ‘ISFJ’,’vid’ => ‘mbti’],
[‘name’ => ‘INFJ’,’vid’ => ‘mbti’],
[‘name’ => ‘INTJ’,’vid’ => ‘mbti’],
[‘name’ => ‘ISTP’,’vid’ => ‘mbti’],
[‘name’ => ‘ISFP’,’vid’ => ‘mbti’],
[‘name’ => ‘INFP’,’vid’ => ‘mbti’],
[‘name’ => ‘I

元記事を表示

WordPress.comにあるDeveloper ConsoleAPIがちょっとだけわかった

# Developer Consoleとは
Wordpress.com APIのPlayGroudです。

https://developer.wordpress.com/docs/api/console/

Developer Consoleには以下にプルダウンがありますが、どこのAPIを使っているのかイマイチわからなかったです。

HerokuにLaravel11で作ったアプリをデプロイしたらログインできなくなった

環境
“`
php8.2
Laravel11
heroku-22
JawsDB mysql
Buildpacks
heroku/php
heroku/node.js
“`

アプリの仕様:

生成AIを使用してブログ記事を自動生成させるもの。
/にアクセスするとログイン画面が表示され
ログインに成功すると生成可能残数が表示される。
ログインはsessionで管理。

導入背景:

ローカルではDockerで開発したのでherokuもDockerで動かそうと思ったのですが
デプロイ後に403Forbiddenから抜け出せなくなったので
やむなくstackをheroku-22を使うことに。

起きた問題:

ローカルではトップ画面にログイン画面が出力されて、userとpassを入力すればログインできていました。
しかしherokuにデプロイした後はIDとPASSを入力しても再びログイン画面が表示されてしまうことに。

herokuのログをみると以下のことがわかりました。
“`$heroku logs -n 200 -a aibl

元記事を表示

正規表現におけるバックスラッシュ自身の表記方法について

一部 `pcregrep` [^1] を用いて説明しているが、これは言語仕様によるノイズを排除するためのもの

[^1]: PCRE の純正 grep。インストールの仕方などは省略

“`
# STRING => 検索文字列
# REGEXP => 正規表現
% echo STRING | pcregrep ‘REGEXP’
“`

の形で説明に利用している。

## 先に結論

16 進数表記を用いて記載する。特にお勧めは、`\xhh` 形式(ブレース無し)の `\x5c`。[^2]

[^2]: (少なくとも調べた言語中では)移植性が高いため

“`
% echo \\ | pcregrep ‘\x5c’
\ # <= マッチしている ``` こちらで記載するクセを付けると正規表現中に埋没することなく、 「ああ、バックスラッシュも対象なんだな。」と一目で判断が付く。 ``` # `[` か `\` か `]` に当るカスタム文字クラス % echo \\ | pcregrep '[\[\x5c\]]' \ # <= マッチして

元記事を表示

LaravelのEloquentを使ったデータベースからのデータ取得方法の違い

# データベースからのデータ取得方法の違い
Eloquentを使ったデータベースからのデータ取得をしてViewにて表示させようとした際に

“`php
// UserController.php

public function index()
{
$user = User::where(‘use_id’, 1)->get();
return view(‘users.index’, compact(‘user’));
}
“`
“`php5
//users/index.blade.php

{{ $user->user_id }}

“`
エラーメッセージ「プロパティ [user_id] はこのコレクション インスタンスに存在しません。」が表示される。
これは$userがコレクション(配列)であり、単一のオブジェクトではないためで、いままでgetメソッドは取得の際に単一オブジェクトを返すものと思っていた・・・

“`php
// UserController.php

public function index()
{
$user =

元記事を表示

【速習】LaravelとPHPブートキャンプ – QuickNetwork開発部

このコンテンツはクイックネットワークでエンジニアとして開発のお仕事する人が、ベーシックであるPHPとフレームワークのLaravelを用意に学べるよう作成いたしました。学生インターンとか新卒とか中途で他の言語経験がある方とかを対象にしている感じです。

PHPに関してはいくつかのサイトを参考に、Laravelのブートキャンプは本家サイトから引用しております。
[![](https://bootcamp.laravel.com/img/favicon/favicon-16×16.png)Laravel – Learn the PHP Framework for Web Artisans](https://bootcamp.laravel.com/introduction)

:::note warn
ちなみに本ドキュメントは[本家](https://bootcamp.laravel.com/introduction)を勝手に翻訳したものであり、意訳もかなり含まれております。
本家には翻訳公開して問題ないかの許諾をお願いしているところです。
その前提で読んでいただければと思います。
::

元記事を表示

OTHERカテゴリの最新記事