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

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

Laravel API SNSログイン機能を実装する

## 利用ライブラリ

– https://readouble.com/laravel/9.x/ja/socialite.html
– https://github.com/laravel/socialite
– https://socialiteproviders.com

公式を参考に進めます。

## Socialiteのインストール

“`shell-session
$ composer require laravel/socialite
“`

## 環境

– PHP: 8.1.5
– Laravel: 9.9.0
– [laravel/socialite](https://github.com/laravel/socialite): 5.5.2

## 実装

GitHubとSNSログインする場合を例に実装します。

### .env

“`.env
APP_URL=http://localhost

SESSION_DRIVER=cookie
SESSION_LIFETIME=120

GITHUB_CLIENT_ID=1234567890abcdefghij
G

元記事を表示

4K対応HPの制作 part2

こちらの続きとなります。

https://qiita.com/nanakochi123456/items/2a200c2f46e5608740bb

あまり4Kと関係ないこともかいていますが・・・

## WordPressである痕跡をなくす。
別にWordpressが恥ずかしいとかそういうのではないのですが、

“`
cd wp-content
“`
と非常に長文で打ちずらいのが理由です。

更に、手抜きしようとして
“`
# cd wp*
su: cd: too many arguments
“`
とういう落ちになるのも不快でした。

wp-content のディレクトリを変える

こちらの記事を参考にして、シンボリックリンクを張ります

### 更に痕跡をなくす
プラグインが使用しているものを取り外すと、それなりにWordpressっぽくなくなります。

“`functions.php
function load_recaptcha_js() {
if ( ! is_page(

元記事を表示

【メモ】PHPのstatic:: (遅延静的束縛)とは何なのか?

Laravelのサービスコンテナの仕組みを知りたい初心者です。
Laravelのサービスコンテナのコンストラクタを追っていたらいきなり`static::`を使っているコードが出てきました。`static::`ってなんだ????
“`php:\vendor\laravel\framework\src\Illuminate\Foundation\Application.phpから抜粋
protected function registerBaseBindings()
{
// static::ってなんだ????
static::setInstance($this);

$this->instance(‘app’, $this);

$this->instance(Container::class, $this);
$this->singleton(Mix::class);

$this->singleton(PackageManifest::class, function (

元記事を表示

PHP 2つの配列やオブジェクトの中身が同じかどうか調べる

## 説明

PHPUnitテストでオブジェクトが返ってくる時プロパティを一個一個比較してますか?私はserializeして文字列比較してます。「PHPで配列が同じかどうか比較する方法」なるものであまり良いものがない気がしたので私の書く比較方法を書きたいと思います。これは誤った方法かもしれません。でも構いません。誤った方法を世に広め世界を混沌に陥れるのは私の人生の目的であるのだから。

## まぢで完全に同じかどうか分身かどうか

trueになるのは

1. リソースが同じ(リソース番号が同じ)
1. オブジェクトが同じインスタンス(参照が同じ)
1. 配列の中身が同じ(オブジェクトが入っている時は同じインスタンスが入っている事)

“`php
$x === $y
“`
## 中身の値が同じかどうか

trueになるのは

1. オブジェクトのクラス名とプロパティとその値が同じ
1. 配列の中身が同じ(オブジェクトが入っている時はオブジェクトのクラス名とプロパティとその値が同じ)

※リソースはserializeすると「i:0;」となる。数値の0と同じ。意味がないため使わない

元記事を表示

【Laravel入門】Validator::Extend

導入

1周目のLaravel入門を実践中、引っかかった点があったので共有がてらあげます。

経緯

p157の「Validate::extendを利用する」を実践中、以下コードの「extend」の部分にエラーが出ていたため、「use」に問題があるのではないかとは思っていた。

“`php
public function boot()
{

Validator::extend(‘hello’, function($attribute, $value, $parameters, $validator){
return $value % 2 == 0;
});
}
“`

しかしまだ始めてから少ししか経っていないのにValidatorのuseに種類があるとは思わなかった。

なので別サイト(結構前にやったのでどのサイトか忘れました)から持ってきた、こちらのuseを使っていた。
“`php
use Illuminate\Validation\Validator;
`

元記事を表示

ワードプレスでwebスクレイピング を使って自動投稿するプログラム

自分で色々と開発した機能の保存メモとして残しています。

# 機能概要

・好きなURLの記事一覧から記事情報を取得して、各下層ページ記事のタイトル&内容も取得する。
・取得した各記事をワードプレスの投稿に入れる(公開or下書き)
・これをcronで時間指定をする
・最後に同じ記事の情報は取得しない。

# ※思いつきで作ったコードです。
変数名など適当なのでぜひ変えて使ってください。

“`php
//スクレイピング関数
//aタグそのまま使えるバージョン
function my_cron_function()
{

//DB情報
$dsn=’mysql:host=ホスト名;dbname=データベース名;charset=utf8′;
$user=’データベースユーザー名’;
$password=’パスワード’;

//スクレイピング用phpQuery読み込み
require_once( __DIR__ .”/phpQuery-onefile.php”);
$home = “取得するURLのTOPドメイン”;//トップURL
$html = fil

元記事を表示

PaizaラーニングのLaravel入門編1をやってみた。

昨日まででPaizaラーニングのLaravel入門編1を全部やってみたので、感想をお伝えしたいと思います。
# 全体的に
プログラミングスクールでコピーアプリをAWSを使いやったあとでの学習だったので、復習にはなったと思います。
# 内容は
Paizaのクラウド環境(PaizaCloud)を使用して、プロジェクトの作成からコントローラの作成・ルーティング・ビューの作成などを通して一行掲示板を作るものです。
# やってみて
コードの記述でやはり細かいミスをしてしまうことがあり、エラーになることがありました。(演習課題)
自分でやるとこんなもんかと思いました。

動画を見ながらの部分は問題ありませんでした。

以上が感想になります。

元記事を表示

Laravelでwhere句のグループ化

## where句のグループ化
以前入っていた現場で
“`sql
select * from users
where ((status = 1) and (confirm_email1 = ? or confirm_email2 = ? or confirm_email3 = ?))
or ((status = 2) and (approve_email1 = ? or approve_email2 = ? or approve_email3 = ?))
“`
上記のようなSQL文をLaravelで再現する必要がありました。(実際のコードから修正してあります)
そして私が最初に書いたコードはこんな感じでした。
“`php
$users = User::query()
->Where(‘status’, 1)
->orWhere(‘confirm_email1’, $email)
->orWhere(‘confirm_email2’, $email)
->orWhere(‘confirm_email3’, $email)
->orWhere

元記事を表示

Laravelのローカルスコープについて

### ローカルスコープとは?
簡単に説明するとローカルスコープとは、SQLのよく使う取得条件をあらかじめ定義しておいて再利用できる機能のことです。
“`php
$posts = Post::query()
->select(‘title’, ‘body’)
->where(‘status’, 1)
->get();
“`
上記のコードでは`where句`を使って`status`が`1`のデータを取得しています。この取得条件が他のところでも複数必要であれば、何回もこの`where句`を記述することになります。そんな時に使えるのがローカルスコープです。

モデルファイルにこのように記述します。
“`php
public function scopeOnlyOpen($query)
{
$query->where(‘status’, 1);
}
“`
メソッド名の先頭に`scope`を付けます。
そして、、
“`php
$posts = Post::query()
->select(‘title’, ‘body’)
->onlyOp

元記事を表示

TCPDFでA4タテヨコ混在状態で出力する

# はじめに
仕事で帳票を取り扱っているが、繁忙期で忙殺されているときにタテヨコ混在状態で出力できない壁にぶつかったことがあった。Acrobat reader とかで一瞬で回転できるのに、んなアホなって思ったけど当時は押し切った。時間が経って、研究できる時間ができた。仕事場のライブラリとは違うがいちおうできることを確認できた

# source
てきとーにコントローラから処理実行する(ほんとは libraries に入れたほうがいいね)
“`php:app/Config/Routes.php
$routes->get(‘home/rotate_pdf’, ‘HomeController::rotatePdf’, [‘as’ => ‘home_rotate_pdf’]);
“`
“`php:app/Controllers/HomeController.php
public function rotatePdf(): RedirectResponse
{
// 基本、タテA4の枠組みで出力
$tcpdf = new TCPDF(‘P’

元記事を表示

WordPress管理画面が真っ白に…

WordPressでHPやLPを制作し、本番環境にアップロードしたけど、いざ管理画面に入ると画面が真っ白に…

なんで!?と思って原因を探ると、「functions.php」に諸悪の根源がありました。

最後の行が

“`
?>

“`

となっていたのを
“`
?>
“`
と直します。

なにが変わったん?

と思うかもしれませんが、実は、改行がなくなっているのです。

閉じタグ後の改行ひとつで管理画面が真っ白になる原因になるらしく、この点を修正したら、自分も見事に管理画面が表示されました。

そもそも、HTMLに埋め込むタイプのPHPファイル以外は閉じタグをつけないということがデフォルトらしく、自分自身新たな学びとなりました。

他にも、Wordpress関連のエラー要因はたくさんあると思いますが、同じ原因で動かないという人がもしいらっしゃれば、この点も確認してみてください。

元記事を表示

Laravel API 認可機能(ACL)を実装する

LaravelでRole(役割)、Permission(権限)によるAccess Control List(アクセス制御リスト)の機能を実装します。

## 利用ライブラリ

– https://github.com/spatie/laravel-permission
– https://spatie.be/docs/laravel-permission/v5/introduction

## 環境

– PHP: 8.1.5
– Laravel: 9.9.0
– laravel-permission: 5.5.2

## laravel-permissionのインストール

“`shell-session
$ composer require spatie/laravel-permission
“`

“`php:config/app.php
‘providers’ => [
// …
Spatie\Permission\PermissionServiceProvider::class,
];
“`

“`shell-session
$ php arti

元記事を表示

Laravel Dacapo マイグレーションサポートツール

## 自己紹介

– ucan-lab(ゆうきゃん)
– 株式会社ROLO所属
– https://qiita.com/ucan-lab
– PHP/Laravel エンジニア
– エンジニア歴13年くらい
– 組み込み→アプリ→ウェブ

## 動画

## Laravel Dacapoのソースコード

ご紹介するライブラリのGitHubリポジトリです。

https://github.com/ucan-lab/laravel-dacapo

スター数が少ないとライブラリとしての信用度が上がらずなかなか使ってくれる人が増えないのでよければスターしてもらえると嬉しいです。

## Laravel マイグレーションとは

https://readouble.com/laravel/9.x/ja/migrations.html

– データベースのテーブル定義の変更履歴を管理する
– データベースのテーブル定義をSQLではなくPHPファイルで管理できる
– 特定のデータベースに依存しない(MySQL,

元記事を表示

特定のカスタム投稿タイプのみ投稿数を取得する

自分メモ。

> カスタム投稿タイプを複数使っていてカスタムタクソノミー等を共有している場合にカウントが、複数分のカスタム投稿タイプの合計が取得されてしまいますよね。
>例えば、事業所とスタッフというカスタム投稿タイプと、都道府県っていうタクソノミーがあってどっちの投稿タイプでも都道府県というタクソノミーを使っている場合、大阪のスタッフの数を取得したいのに事業所で登録している数も取得されてしまうようになるのです。

https://higezine.com/blog/front-end/wordpress/2020/01/16/615/

元記事を表示

【PHP】閏年判定プログラム

# コード
1・4で割り切れる年は閏年
2・400で割る切れる年はうるう年
3・100で割り切れる年は閏年ではない(※400で割る切れる年は除く)

“`PHP

元記事を表示

PHPでStannumを使って超簡単にValue Objectを作る

おはようこんにちはこんばんは。

さて、今回は自作したライブラリの宣伝にはなってしまいますが、Stannumというライブラリを使って、便利に使える値オブジェクト(Value Object)を簡単に作る方法を紹介したいとおもいます。

ライブラリ本来の使い方からは少し逸れますが、ライブラリのクラスでスカラー型をラップするという性質を利用して、そのクラスを継承してValue Objectとして活用しました。

## 導入
他のライブラリ同様、いつも通りcomposerから入れてあげます。

“`bash
composer require tumugin/stannum
“`

https://speakerdeck.com/tumugin/phpfalsesukaraxing-wokurasuderatupusitebian-li-nishi-eruyounisururaiburari-stannum-wozuo-tutahua

Stannumの紹介については、上のスライドを見ていただけると分かりやすいと思います!

## Value Objectを作る
今回は試しにユーザの苗字(L

元記事を表示

[PHP]宇宙船演算子

# 概要
宇宙船演算子`<=>`は
– 左辺が右辺より大きい場合は`1`
– 左辺が右辺より小さい場合は`-1`
– 左辺が右辺と等しい場合は`0`

を返す。

# 例
PHPの関数`usort`と併用します。

## 一次元配列

“`php
usort($array, function ($a, $b) {
return $a <=> $b;
}
“`

これにより`$array`内部は昇順に並び替えられます。

## 二次元配列

“`php
usort($array, function ($a, $b) {
return $a[‘hoge’] <=> $b[‘hoge’];
}
“`

これによりキー名が`hoge`の内容を対象に昇順で並び替えられます。

# 参考
https://www.php.net/manual/ja/migration70.new-features.php

元記事を表示

【PHP】gitのpre-commitフックを利用してコードチェックを自動化する

### 前提
#### pre-commitフックで実現する内容
* `php -l`コマンドによるシンタックスチェック
* php-cs-fixerによるコード整形
* phpmdによるコーディグルールのチェック
* phpstanによるシンタックスチェック
参考サイト↓
[[PHP] Git Commit 時にコードの整形、静的解析を実行](https://qiita.com/K-D-H/items/4ebba4504af6b4ec8637)

#### 環境
Docker使用
Laravelプロジェクト

#### ディレクトリ構成
backendにLaravelが格納されています。
その一個上の階層がプロジェクトのルートディレクトリとなっていて、そこに`.git`があるイメージですね。
Dockerを使用していると、こういう感じになっているかと思います。
**Laravelの1つ上の階層がルートディレクトリ**というのがpre-commitを書く上でも重要になってきます。

“`bash
$ tree -L 1 -a
.
├── .DS_Store
├── .git //

元記事を表示

【PHP】herokuで画像を保存

herokuでは画像が生成されません。
そのため、パスを保存して画像を表示するという方法が通用しません。

なので、DBに画像のパスを保存するのではなく、
画像のバイナリデータを保存する方法を採用します。

“`index.html



“`
画像ファイルを選択して、編集完了ボタンを押すと`test.php`に遷移します。

“`test.php

元記事を表示

【PHP】Stack Overflowの配列加工の質問をarray_mapを使って解いてみた

Stack Overflowに配列加工の質問があって気になったので解いてみた。
質問自体は一か月以上前で回答がなかったけど多分解決してそう;;

# 問題
DBから取得してきたデータの配列を加工して下記のように変更したい

## 加工前
“`php
$array = [
0 => [
‘id’ => ‘0GPHKD’,
‘target_layer’ => ‘男女 10代(T層)’,
‘key’ => [
0 => [
‘id’ => 10,
‘product_name’ => ‘コーヒー’
],
1 => [
‘id’ => 9,
‘product_name’ => ‘コーヒーマグカップ’
]
]
],
1 =>

元記事を表示

OTHERカテゴリの最新記事