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

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

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 =>

元記事を表示

XServer で ComposerV2を使うために

# はじめに
XServerにて、PHPのプログラミングをしていた時、Composerのバージョンを上げる事が上手くできませんでした。
色々検索しましたが、上手くヒットしなかったので共有できればと記事にします。

# 結論
端的に述べれば、
1. ユーザー内にComposerをインストール。
2. パスを通して、Composerの名前を変更。
3. Composerを利用するときに変更後の名前を使う。
となります。

# PHPのパス
先人の方々が、書かれておりますが、利便性の為にメモ書き。
## PHPのシンボリックリンク

“`bash:CreatePHPLink
$ cd
$ mkdir ~/php
$ ln -s /usr/bin/php8.0 ~/php/php
“`

## パスの追加

“`bash:~/.bash_profile
# PATH=$HOME/.config/composer/vendor/bin:$HOME/bin:$PATH
PATH=/bin:/sbin:/usr/local/bin
PATH=$H

元記事を表示

医療情報技師の過去問サイトを爆速で作った話【Python/PHP】

# 背景

医療情報技師の資格試験が8月にあり、過去問の勉強しようと過去問サイトを探していたが、なかなか良いWebサイトがない。。。

以下のWebサイトを見つけたが、いくつか問題点があって、自作でWebサイトを作ることにしました。

https://iryoujyouhou.wiki.fc2.com/wiki/トップページ

# 問題点について

[背景](#背景)で述べた問題点についてですが、以下となります。

### 1. 問題の正解不正解を記録してくれない

自分が今何問正解しているのかを毎回紙にメモするのが面倒でした。
合格基準を満たしているか確認するために正答率も出したかったので、システム側で記録して欲しかった。。。

### 2. スマホ画面だと解答が丸見え

01.jpg

上記の画像のようにスマ

元記事を表示

【PHP】PHPでActive Directoryを検索する方法

#### 今度はPHPでAD連携してみよう
今度はPHPでもAD連携をしてみます。
 PHPではPHP自体の設定ファイルphp.ini の以下の場所のコメントを外すと、
最初から入っている組込みのLDAP関数群が使えるようになります。
“`dosini
;extension=php_ldap.dll
“`
[PHP: LDAP 関数](http://php.net/manual/ja/ref.ldap.php)

 全て関数名の最初が“ldap*“ で始まるので分かりやすいのですが、使い方はC#とまったく違って独特です。
 以下、PHP 5.6 で確認しています。最新のPHP7-8ではないですが大きな違いはないかと思います。

#### AD接続クラス ADConnectSample
* ADのサーバ名+検索先ディレクトリのベースDN、ユーザ、パスワードの3つが必要な情報になります。与え方などは適宜修正してください。
* コメントにもありますが、“ldap_connect()“すると名前からしてもう繋がった……と思いきや、パラメータ検査と接続できるかの確認だけなの

元記事を表示

【個人開発】ディベート掲示板作ってみた!

初めに

この度
Avis
というwebアプリを開発しました。
ディベートに特化したSNSです。
本日も叫ばれる様々な社会問題(SDGsなど)、人それぞれが抱える人生の悩み、そして些細な日常の言い争いまで…様々な論題についてユーザー参加型のディベートを行い、何が正しいのかを模索してくサービスです。

https://avis.city/slist.php?mode=sdgs

Avisの機能

ディベート作成

ユーザーによりディベートを作成することができます。
作成されたディベートは東軍西軍いずれかが目標ポイント(250or500)に到達するとプログラムにより勝敗が確定します。

![senkyou.png](https://qiita-image-store.s3.ap-northea

元記事を表示

PHP array_filterを再帰的に行うarray_filter_recursiveを書いた

## 説明

必要だったから探した。探したけど納得できるものが見つからなかったから書いた。車輪の再発明。劣化コピー万歳!

1. 配列に対してarray_filterっぽいのを再帰的に行うarray_filter_recursive
2. オブジェクトに対してarray_filterっぽいのを再帰的に行うobject_filter_recursive
3. テストもあるよ

## プログラム
“`php
/**
* 再帰的に配列をフィルタリングする
*
* @param array $array
* @param $callback
* @return array
*/
function array_filter_recursive($array, $callback): array {

if (! is_array($array)) {
trigger_error(__FUNCTION__.'(): Argument #1 ($array) must be of type array.’, E_USER_ERROR);
}

元記事を表示

Laravel API 例外発生時のHTTP ResponseをJson Responseにする

Laravelで正常時にJsonレスポンスを返していても、例外時はHTTPレスポンスを返す場合があります。
HTTPヘッダーに`Accept`: `application/json` が指定されてないとHTTPレスポンスが返ってきます。

フロント側でHTTPヘッダーを追加して送ってもらうのも正しいですが、指定がないとHTTPレスポンスが返るのもAPIサーバーとしては謎な挙動なので常にJsonレスポンスを返すためにミドルウェアを作ります。

## 環境

– PHP: 8.1.5
– Laravel: 9.9.0

## 手順

“`shell-session
$ php artisan make:middleware ForceJsonResponse
“`

“`php:app/Http/Middleware/ForceJsonResponse.php

元記事を表示

【メモ】.htaccessが非推奨な理由

最近Laravelプロジェクトが動く仕組みを調べている初心者です。
XAMPPのドキュメントルートにLaravelプロジェクトを作ったのですが、Laravelプロジェクトのpublic配下にApacheのWebサーバの設定を記述できる.htaccessがありました。.htaccessはhttpd.confで使用できるか否かを設定できるのですがXAMPPのデフォルトでは.htaccessの使用が許可されていました。
ちなみに.htaccessが有効になっている場合はhttpd.confに記載されている内容より優先されます。
Laravelプロジェクトでpublic配下にあるファイルにアクセスしようとすると.htaccessの設定によってindex.phpに集約されるようになっていました。が、仕組みがいまいちわからない。。。
そこで使い方等を調べていたのですがどうやら.htaccessは非推奨でhttpd.confを極力使うのが公式が推奨している方法のようでした。今回は.htaccessが非推奨な理由のメモです。

# .htaccessで設定することが多いURLの書き換え
リクエストUR

元記事を表示

Yiiで学ぶDI

このの記事では、Yiiフレームワークの[公式ドキュメント](https://www.yiiframework.com/doc/guide/2.0/ja/concept-di-container “Yii 2.0 決定版ガイド”)に記載されている、[素晴らしい解説](https://martinfowler.com/articles/injection.html “Inversion of Control Containers and the Dependency Injection pattern”)をもとに、依存性の注入について、なるべく基本的なところから書いていこうと思います。

# 依存性の注入とは

wikipediaには、こう書かれています。
「依存性の注入とは、コンポーネント間の依存関係をプログラムのソースコードから排除するために、外部の設定ファイルなどでオブジェクトを注入できるようにするソフトウェアパターンである。」

こちらを理解するためには、いくつかの前提となる知識が必要ですので、それについて説明します。

## 疎結合

クラスが疎結合である、という考え方が

元記事を表示

laravel Framework 9.10.1 ユニットテストコマンド

個人思い出し用

““`ターミナル
php artisan test tests/Feature/ExampleTest.php
““`

元記事を表示

OTHERカテゴリの最新記事