- 0.1. PHP 具象クラス(Abstract class) について
- 0.2. $_SESSION
- 0.3. 【PHP】オブジェクト指向を使って初めて動くものを作った
- 0.4. WordPress 内の PHP から Azure Blob Storage にファイルをアップロードしてみた
- 0.5. Sail環境でのTailWind導入
- 0.6. 【PHPフレームワークFlow】登録日や更新日などのカラムを自動で更新する
- 0.7. PHP8の Attribute 、公式の説明読んでも全然頭に入ってきません
- 0.8. 【Docker × PHP5.4】DockerでPHP環境を作った時のつまずき
- 0.9. Excelの列番号(記号?)を取得する
- 0.10. PHPの環境変数管理術 – phpdotenv
- 0.11. $_ENV、$_COOKIE
- 0.12. RHEL9系でphp-memcachedが入らない
- 0.13. PHPUnit 11 でアノテーションからアトリビュート (Attribute) に移行するメモ
- 0.14. WSL2 Docker Laravel環境でPhpSpreadsheetを使うまでのメモ
- 0.15. $_SERVER
- 0.16. laravel breezeでマルチログインのタスク管理ツールを作る②_ユーザー一覧とタスク一覧、残タスク数一覧の作成
- 0.17. 【docker】mysqli_connect()に失敗しAccess deniedした時の対処
- 1. 1.Call to undefined function mysqli_connect()はmysqliのインストールで解決
PHP 具象クラス(Abstract class) について
# 具象クラス(Abstract class) について
– 抽象(Abstract)クラスは `class`の前に `abstract`を付ける。
– `abstract`クラス内でも普通に `public`メソッドとしても定義することは可能。
– 抽象メソッドを定義する場合は、`abstract public function getProduct();`というように先頭に `abstract`を付ける。
– abstractメソッドの場合、メソッド内に処理を書くことはできない。メソッド名のみの定義になる。
– 抽象クラスに対してインスタンス化できるクラスを `具象クラス` という。sampleの場合は `BaseProduct class` と `Product class`がインスタンス化できるので `具象クラス`になる。
– 具象クラスでは Abstractクラスを継承すると、必ず abstractメソッドを使用しなくてはならなくなる。使用しない場合は、エラーになる。__●__ `abstract` クラスを利用した例
“`php:sample.php
$_SESSION
## はじめに
$_SESSIONについて整理する。
### $_SESSION
セッション経由で渡された情報
### セッションの書き込み
セッション機能を使うには、あらかじめsession_start関数でセッションを開始しておく必要がある。
“`php
【PHP】オブジェクト指向を使って初めて動くものを作った
こんにちは、Reikaです。
現在、バックエンドエンジニアとしての転職を目指し、日々勉強に励んでいます。
勉強歴は約4ヶ月です。
最近では、スクールの課題としてオブジェクト思考の実装に取り組みました。
今回はこの経験を通じて学んだことについて、記述していきます。# 要件定義
早速ですが、今回は以下の要件を満たすゲームの実装を目指しました。
#### 大まかなルール
・プレイヤーがカードを出し合い、カードの数の大小を比べる。
・強いカードを出したほうが勝ちとなり、相手のカードを含めカードをもらう。
・このようにして続けていき、誰かの手札がなくなったら終了。最後に多くカードを持っていた人が勝ちになる。#### 細かなルール
・52枚のカードを使用。ジョーカーは使用しない。
・プレイヤーの人数は2〜5人。
・開始時、親になった人はカードをよく切り、各プレイヤーに裏向きで均等に配る。配られたカードを手札といい、手札は裏向きのままにしておきます。
・「戦争!」の掛け声とともに、各プレイヤーは一番上のカードをオモテ向きに置く。
・出したカー
WordPress 内の PHP から Azure Blob Storage にファイルをアップロードしてみた
WordPress のプラグイン自体に有料オプションで Azure Blob Storage にアップロードする機能があったりします。お金がないので、自分でアップロードする機能だけを作りたいと思いました。そこで今回は、WordPress の無料版 Duplicator プラグインで生成されるファイルを、ボタン一発で Azure Blob Storage にアップロードするプログラムを PHP で作成してみました。
## WordPress 内で検証用プラグインを作成
“`bash:bash
cd /var/www/html/wp-content/plugins/touch duplicator2azureblob.php
chown www-data.www-data duplicator2azureblob.php
vi duplicator2azureblob.php
“`## 無料版 Duplicator プラグインで生成されるファイル列挙
“`php:duplicator2azureblob.php
Sail環境でのTailWind導入
Sail環境で新規に追加したTailWindが反映されなかった時の対処について
# TailWindとは
オープンソースのCSSフレームワークで、Bootstrapなどの他のCSSフレームワークとは異なり定義済みクラスを提供しないのが特徴。
代わりに、ユーティリティCSSクラスを提供するので、これを組み合わせて要素をスタイリングする。https://tailwindcss.com/
# Tailwind CSSの導入
### インストール
Sailを立ち上げている状態でコマンド実行
“`
sail npm install -D tailwindcss postcss autoprefixer
“`
sailコマンドで以下をインストールするコマンド
* Tailwind CSS
* PostCSS
* Autoprefixer### 初期設定
Tailwind CSSの初期設定ファイルを生成
“`
sail npx tailwindcss init -p
“`
* `npx` npmリポジトリからパッケージを一時に実行する
* `init` 初期設定ファイルを生成
【PHPフレームワークFlow】登録日や更新日などのカラムを自動で更新する
# 初めに
テーブルにデータを登録/更新する際、登録日や更新日のデータは自動で更新されるようにしたいですよね。DDLでTBLを定義している場合は簡単ですが、ORMの場合は独自の設定が必要になる場合がしばしばあるかと思います。
今回は、Flowで使われているORM「Doctrine」にて、登録日/更新日の自動設定方法を解説します。# 環境
|技術スタック|バージョン|
|–|–|
|PHP|8.2.17|
|Flow|8.3.8|
|doctrine-orm|2.19.3|# TL;DR
実装はこんな感じです。“`php
PHP8の Attribute 、公式の説明読んでも全然頭に入ってきません
https://www.php.net/manual/ja/language.attributes.overview.php
[PHPUnit11 の Attribute](https://qiita.com/kazumacchi/items/eb6a3059f730a9e6e3d6) は記事書いて何となく理解出来たというか、アノテーションとほとんど変わらないような気がしますが、公式の説明だとアノテーションとは全然違うような印象
これを初見で理解できる人間が存在するんでしょうか…するんでしょうね
一応この行を書いている時点では理解していませんが、調べながらメモしていきます
記事を公開する頃には理解しているハズ…# サンプルコード
## Attribute は通常クラスに[Attribute]を記述することで定義する
“`php
namespace App\Attribute;// コレ。TestAttribute という名称の Attribute が定義される。
#[Attribute]
class TestAttribute
{
/**
* @p
【Docker × PHP5.4】DockerでPHP環境を作った時のつまずき
## 概要
担当案件の中で、PHP5.4が動く環境を準備する必要があり、準備を進める中でいくつかエラーが発生しました。
調査の中で参考にさせていただいた内容もあったので、今後のためにメモとして記録しておきます。## 参考記事
– [PHP 5.4環境をDockerで作る](https://qiita.com/blue32a/items/f47839f83317b54cea4d)
– [Dockerでapt-get upgrade](https://qiita.com/sowd0726/items/690e3bc94cada24f2a09)
– [docker build時にapt-get updateでPackages Not Found](https://qiita.com/teriyakisan/items/e5cf7d5228dc02500562)調査の際、上記のサイトに大変お世話になりました。
ありがとうございます!## Dockerfile
今回はdocker-compose.ymlを使用し、指定したフォルダ内に配置しているDockerfileをビルドしていま
Excelの列番号(記号?)を取得する
PhpSpreadsheetを本格的に扱うようになって知ったTIPS。
データをシートに書き込むとき、まとめて書き込む(読み込むときも)なら`$worksheet -> fromArray($data, NULL, ‘A1’);`みたいにできるけど、n列、n+16列、n+32列…というセルの値にアクセスしたいときに「n+128列の列番号(記号)って何!?」となる。
このとき便利なのが
“`php
$cols = [];
$a = ‘A’;
for ($i = 1; $i <= 1000; $i++) { $cols[] = $a; $a++; } echo $cols[940]; //AJD ``` というように文字列をインクリメントすると、勝手に`A, B, C, ... Z, AA, AB, ... AY, AZ, BA, BB, ... ZY, ZZ, AAA, AAB, ...`という文字列を生成してくれる仕様。 逆に列記号からn列目を引きたいときは ```php $cols_r = array_flip($cols); echo $cols_r['A
PHPの環境変数管理術 – phpdotenv
PHPで環境変数についてどのように管理していますか?
「環境変数を扱うならこれ!」っていうライブラリがありますのでご紹介します。## 環境変数って?
アプリケーションが異なる環境(開発、テスト、本番など)で動作する際に、設定を柔軟に変更できるような仕組みです。
こういった設定はGit管理をする必要がないですよね。これにより、セキュリティが向上し、異なる環境でのアプリケーションの設定変更が容易になります。例えば、環境ごとに接続するDatabaseの情報が異なることって結構多いですよね。
そんな時に、**PHP dotenv** がいい感じに管理してくれます。## phpdotenvについて
簡単に…
**PHP dotenv**は、プロジェクトで環境変数を扱うためのライブラリです。
“.env“ファイルから環境変数をアプリケーションに読み込む機能を提供します。https://github.com/vlucas/phpdotenv
## 使い方
### 1. インストール
“`bash
composer require vlucas/phpdotenv
“`
$_ENV、$_COOKIE
## はじめに
ENVやCOOKIEについて整理する
## $_ENV
サーバー側で設定されている環境変数を取得する。
## $_COOKIE
クッキーを取得する。
クッキーを保存するのはsetcookie関数の役割。
“`php
setcookie(string $name, [string $value [, int $expires = =0 [, string $path
[, string $domain [, bool $secure = false [, bool $httponly = false]]]]]]): bool
“`$name
クッキーの名前。$value
クッキーの値。この値がクライアントのコンピュータに保存される。$expires_or_options
クッキーの有効期限。$oath
クッキーが有効なパス$domain
クッキーが有効なドメイン$secure
暗号化通信の環境でのみクッキーを送信する。$httponly
HTTP経由でのみアクセスできるようにする設定。JS経由ではアクセスできなくなる。
XS
RHEL9系でphp-memcachedが入らない
## 事象
RHEL9でphpのmemcachedモジュールを有効化しようとインストールを試みるも、上手くいかない。
依存解決でlibmemcachedというパッケージが必要だが、リポジトリ上に無い様子。## 原因
RHEL9ではlibmemcachedがデフォルトで有効なリポジトリに存在せず、`CodeReady Linux Builder`というリポジトリを有効化しないといけないようだ。
https://access.redhat.com/documentation/ja-jp/red_hat_enterprise_linux/9/html/package_manifest/codereadylinuxbuilder-repository## 対応
リポジトリを有効化
“`
dnf config-manager –set-enabled codeready-builder-for-rhel-9-rhui-rpms
“`
確認
“`
dnf repolist
repo id repo
PHPUnit 11 でアノテーションからアトリビュート (Attribute) に移行するメモ
2024年02月に [PHPUnit11](https://phpunit.de/announcements/phpunit-11.html) がリリースされました。
休日に何気なく自分のリポジトリの PHPUnit を 11 にバージョンアップしてみたら全てのテストが動作しなくなり、調べてみたら PHPUnit 11 では PHPDoc のアノテーションは非推奨で、次のバージョンでは利用できなくなるのでアトリビュート (Attribute) を使うことが推奨されている模様。
“`bash
Metadata found in doc-comment for method Tests\XxxxTest::xxxxxx().
Metadata in doc-comments is deprecated and will no longer be supported in PHPUnit 12.
Update your test code to use attributes instead.
“`多分非推奨を無視するオプションとかがあるんでしょうけど、どうせ次のバージョンでア
WSL2 Docker Laravel環境でPhpSpreadsheetを使うまでのメモ
# はじめに
WEBエンジニア2年目の初心者です。
仕事でlaravel内でPhpSpreadsheetを使うためにインストールしようとしたらエラーが出てインストールできない・・・
Dockerも使った経験が浅いので、いろいろ調べたため、自分用のメモ兼困っている人の手助けになれば幸いです。# 1.Phpspreadsheetのインストールを試みる
以下のコマンドを打ってみると見事にエラーが出てさっそく困った
“`
composer require phpoffice/phpspreadsheet
“`
↓エラー内容
“`
Package phpoffice/phpspreadsheet has requirements incompatible with your PHP version, PHP extensions and Composer version:
– phpoffice/phpspreadsheet 2.0.0 requires ext-gd * but it is not present.
$_SERVER
## はじめに
$_SERVERについて整理する。
### $_SERVER
リクエストヘッダー、またはサーバー固有の変数情報
### リクエストヘッダーを取得する
ヘッダー情報とサーバー変数とを区別するために、生のヘッダー名を次の規則で整形したものを格納する。
・ハイフン(-)はアンダースコア(_)に変換
・接頭辞として「HTTP」を付加例えば、User-Agentヘッダーを取得するには、$_SERVER[‘HTTP_USER_AGENT’]のように記述する。
### レスポンスヘッダーを設定する
header関数を使うことでレスポンスヘッダーを設定できる。
ヘッダーを出力するのでheader関数の前に何か出力があった場合はエラーとなる。“`php
header(string, $header [, bool $replace = true [, int $response_code]]) : void$header :ヘッダー文字列
$replace :同名のヘッダーが出力済みである場合に置き換えるか
$response_code :HTTP応答ステ
laravel breezeでマルチログインのタスク管理ツールを作る②_ユーザー一覧とタスク一覧、残タスク数一覧の作成
# 環境
laravel10# これまで
[laravel breezeでマルチログインのタスク管理ツールを作る⓪_laravel Sailでdocker立上げ ※Windows版](https://qiita.com/forever—searcher/items/1321590cb6af4c4383d9)
[laravel breezeでマルチログインのタスク管理ツールを作る①_下準備(seederでダミーデータ作成まで)](
https://qiita.com/forever—searcher/items/34ef1827314c1756f9d0)# 学びたいこと
– laravel breezeでの表示画面(view)の増やし方# この章のゴール
ユーザー一覧
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1563301/91658759-2fc4-55b3-60dd-79c84155f387.png)
タスク一覧
![image.png](https://q
【docker】mysqli_connect()に失敗しAccess deniedした時の対処
docker環境下でphpからtableを作成しようと、mysqliを使おうとしたら手こずった備忘録。
環境
・Macbook air 2020 M1
・Docker v25.0.2
・php v8.3.6
・Mysql v8.3
1.Call to undefined function mysqli_connect()はmysqliのインストールで解決
“`% docker-compose exec app php data/dbcreate.php
Fatal error: Uncaught Error: Call to undefined function mysqli_connect() in /var/www/html/data/dbcreate.php:15
“`mysqli_connectが機能していないと。
なんと、php7.0以降はmysqliが入ってないので、mysqliをDLする必要がある。phpのモジュールインストール状況を見ると
“`
root@465201bc8bff:/var/www/html# php -m | g
Centos7でZabbixを建てる
# はじめに
現場に行くとなんだかんだ触るzabbixを作ってみようかと思った。
断っておくがこれは商用を想定したものではない。
あくまでZabbixの画面を比較的簡単に目にするためのもの。# 前提
iptables,selinux停止済みのCentOS7サーバが作ってある前提。# 前提リポジトリのインストール
今回インストールするzabbixは時代背景を鑑みて4.2を入れる予定。
zabbix4系列はphp5.4以上が必要だがremiリポジトリで簡単に7.2が手に入る。
なので今回はphp7.2を使う。
(別のバージョンでもいい)
そして一緒にepelリポジトリもインストールしておく。“`ruby:前提リポジトリのインストール
yum -y install epel-release
rpm -ivh http://rpms.famillecollet.com/enterprise/remi-release-7.rpm
rpm –import http://rpms.famillecollet.com/RPM-GPG-KEY-remi
“`# php7.2インスト
Laravel Auditingのログがクエリビルダのイベントでは記録されない
# 概要
業務でLaravel Auditingを使用しており、監視対象のカラムが変更された際にレコードがInsertされない事象に対応したときの備忘録です。
間違いがあればご指摘をいただけると嬉しいです!# Laravel Auditingとは
Laravel Auditingとは、DBにおいてレコードに変更が行われた際、自動でログを記録してくれるパッケージのこと。
どのカラムが誰によってどんな風に変更されたか監視することができます。
(問い合わせサポート業務とかであると助かるかも…)# クエリビルダを使用した場合はテーブルにレコードが入らない
以下のドキュメントにもあるようにクエリビルダによるDBの更新は記録されません。
EloquentでModelを使って変更してあげる必要があります。
https://laravel-auditing.com/guide/community/troubleshooting.html
https://laravel-auditing.com/guide/community/why-laravel-auditing.html# Eloqu
$_POST、$_GET
## はじめに
スーパーグローバル変数について整理する。
### $_POST
POST形式のHTMLフォームから渡された情報
ユーザーから入力された値や外部サービスから取得した値を表示する場合には、HTMLエスケープが必要となる。
エスケープ処理を正しく行わないとXSSの脆弱性の原因になる。“`php:Encode.php
function e(string $str, string $charset = ‘UTF-8’): string
{
return htmlspecialchars($str, ENT_QUOTES | ENT_HTML5, $charset, false);
}
“`“`php:post.php
ポストデータ
こんにちは、=e($_POST['name']) ?> さん!