- 1. 新・Bランクレベルアップメニュー(PHP)レベルアップ問題集 【マップの扱い 1】マップの書き換え・1 マス
- 2. PHP dateをMysqlやPostgreSQLのdateタイプデータから曜日を取得する。
- 3. SQLクエリ管理をシンプルにするKoriym.QueryLocator
- 4. PhpSpreadsheetのgetCalculatedValue()で謎のFatal error(Formula Error)に遭遇
- 5. WordPress+cookie+JavaScriptでお気に入り登録の機能を実装する
- 6. 【CakePHP 5】Dockerで環境を作成する
- 7. 【PHP】Enumを活用して元号データを管理する方法
- 8. Effortless Deployment: ServBayでわずか3分でWeb開発環境を構築
- 9. PHPのループ処理を強化するKoriym.Loop
- 10. OSSに初めてコントリビュートしてみた
- 11. Laravel環境構築時にlocalhostでSQLSTATE[HY000] [2002] Connection refused (Connection: mysql, SQL: select * from sessions where id = 5d3B1AuW5zW1TpmKRRFXLSYLoiefJcQDG2kSAhBl limit 1)が出た話
- 12. AWS SDK for phpを使って、一括送信機能を実装する
- 13. PHP CGI 引数インジェクションの脆弱性 / CVE-2024-4577
- 14. Rocky Linux 9 でPHPを8.0から8.2にアップグレード
- 15. 【Wordpress】ファイルマネージャーからプラグインを削除する方法
- 16. [Laravel] テスト実行時にテスト用データベースへ切り替わる仕組み
- 17. PHP_XDEBUG_REMOTE_HOSTとPHP_XDEBUG_CLIENT_HOSTの違い
- 18. 個人利用のためのインターネット速度テストツールの紹介
- 19. PHP の論理積 (&&) の短絡評価で null check しつつ bool を返す
- 20. 【Account Engagement】はじめてのフォームカスタマイズ
新・Bランクレベルアップメニュー(PHP)レベルアップ問題集 【マップの扱い 1】マップの書き換え・1 マス
#### 問題
https://paiza.jp/works/mondai/b_rank_new_level_up_problems
#### 解答
にょっす:raised_hand::cow:
入力を受け取り、変えたい座標の文字列を条件式で変換するだけです“`php
PHP dateをMysqlやPostgreSQLのdateタイプデータから曜日を取得する。
サイトにスケジュール等を日付別に表示する際、日付の横に(日)の様に曜日名を表示する際の記述例です。
“`
$youbi = array(“日”, “月”, “火”, “水”, “木”, “金”, “土”);
echo “(“.$youbi[date(‘w’, strtotime($row[‘‘]))].”)”;
“`
参考になればと思います。
SQLクエリ管理をシンプルにするKoriym.QueryLocator
# SQLクエリ管理をシンプルに
PHP開発者として、コード内でSQLクエリを管理するのはプロジェクトが成長するにつれて煩雑で厄介になることがあります。PHPコード内に直接SQLクエリを埋め込むと、可読性と保守性が低下することがあります。そこで役立つのが[Koriym.QueryLocator](https://github.com/koriym/Koriym.QueryLocator)です。このライブラリは、SQLクエリを別ファイルに保存し、必要に応じて読み込むことで、クエリ管理を効率化します。
この記事では、Koriym\QueryLocatorを使用してSQLクエリをより効率的に管理する方法について説明します。
## なぜQueryLocatorを使用するのか?
SQLクエリを別ファイルで管理することにはいくつかの利点があります:
– **可読性の向上**:PHPコードはロジックに集中でき、SQLが混在しないため、コードがクリーンで読みやすくなります。
– **メンテナンスの容易さ**:SQLクエリを更新する際にPHPコードを変更する必要がなく、SQLファイルだけを修正
PhpSpreadsheetのgetCalculatedValue()で謎のFatal error(Formula Error)に遭遇
最近ExcelをPHPに読み込んであれやこれややることが多いのだが、その中でハマった話。
主要部分だけピックアップするとこんな感じのスクリプト。
“`test.php
require(‘/lib/vendor/autoload.php’);
use PhpOffice\PhpSpreadsheet\Spreadsheet;
use PhpOffice\PhpSpreadsheet\Reader\Xlsx as XlsxReader;
$file = ‘/var/www/file/test.xlsx’;$reader = new XlsxReader();
$spreadsheet = $reader -> load($file);
$worksheet = $spreadsheet -> getSheetByName(‘test’);
echo $worksheet -> getCell(‘D60’) -> getCalculatedValue();
“`
こいつを走らせてみたところ
“`
Fatal error: Uncaught PhpOffice\PhpSpreads
WordPress+cookie+JavaScriptでお気に入り登録の機能を実装する
## はじめに
はじめまして。こんにちは。
初めて記事を書くので拙い文章で非常に読みにくいと思いますが、柔らかい優しい目で見て頂けると有り難いです。
今回WordPress(php)、Cookie、javascriptを使ってお気に入り登録ができる機能を実装しましたので、個人の備忘録としてまとめてみました。
調べていく中で、WordPressプラグイン「WP Favorite Posts」を使った実装のサイトが多かった為、プラグインを使わないやり方として、この内容での実装がどこかで誰かの役に立てればいいなと思っています。
## やりたいこと
![スクリーンショット 2024-05-26 22.54.15.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3800808/94c5618c-e2e8-8b87-c339-0ecd47a0dd65.png)
![スクリーンショット 2024-05-26 22.54.30.png](https://qiita-image-store.s3.ap-northeast-
【CakePHP 5】Dockerで環境を作成する
# はじめに
こんにちは、エンジニアのkeitaMaxです。
CakePHPの動作環境をDockerで作りたいと思っています。
以前Laravelで環境構築したのとほぼ同じように進めてみようと思います。
https://qiita.com/keitaMax/items/7bc51212a32a6418aa1c
# PHPのコンテナを起動する
まず作業用のフォルダを作成します。名前はcake-example-appにしました。
つぎに、Dockerの設定をしていきます。
cake-example-appフォルダ直下にdocker-compose.ymlファイルを置きます。
そしてdockerフォルダを用意し、その中にappフォルダ、その中にDockerfileファイルとphp.iniファイルを置きます。
現在のフォルダ構成は以下のようになります。
“`:cake-example-app
├ docker
│ └ app
│ ├ Dockerfile
│ └ php.ini
│
└ docker-compose.yml
“`#
【PHP】Enumを活用して元号データを管理する方法
## はじめに
PHP8.1のリリースでEnum(列挙型)が搭載されましたね。型安全性の向上や、コードの可読性と保守性の向上に繋がるので積極的に使っていきたいなと感じています。
元号データを様々な形式で表示するようなEnumを実装してみました。
今回はそちらをご紹介させていただきます。
## Enumとは?
> 列挙型(Enumerations) または Enum を使うと、 開発者は取りうる値を限定した独自の型を定義できます。 これによって、”不正な状態を表現できなくなる” ので、 ドメインモデルを定義する時に特に役立ちます。https://www.php.net/manual/ja/language.enumerations.overview.php
本記事では、座学的な説明は省かせていただきます。
こちらの記事理解しやすかったです。(特に血液型のところがお気に入り)https://qiita.com/KeijiYONEDA/items/b300048b1b45e7d68b27#enum%E5%88%97%E6%8C%99%E5%9E%8B%E3%81%A8%E
Effortless Deployment: ServBayでわずか3分でWeb開発環境を構築
ServBayは、統合された使いやすいローカルWeb[開発環境](https://www.servbay.com)を提供します。ServBayを使用すれば、開発者はわずか数分でローカル開発環境を設定できます。これにより、PHPやNode.jsなどのインストールやメンテナンスの問題を効果的に解決し、テストエンジニアや小規模チームにも最適です。また、迅速な環境アップグレードと継続的なメンテナンスが可能です。
このガイドは、そのプロセスを簡単に説明し、ServBayのデプロイメントが初心者でも取り組みやすいように、複雑さを排除してスムーズでシンプルなプロセスに変えることを目指しています。### 準備
まず、ServBayをダウンロードしてインストールする必要があります。その前に、システムが以下の要件を満たしていることを確認してください:
– オペレーティングシステム: macOS 12.0 Monterey 以上
– プロセッサ: Intel または Apple Silicon (M1/M2/M3) チップ
– ストレージスペース: 10GB以上の空き容量確認ができたら、最新バージョ
PHPのループ処理を強化するKoriym.Loop
# PHPでの効率的なループ処理
PHP開発において、データベースの結果セットやCSVファイルなどの反復可能なデータセットを処理する場面は多々あります。これらのデータを効率的に扱い、テンプレートエンジンのようなループ情報を提供し、さらにエンティティクラスにデータを代入する機能を持つ便利なライブラリが[Koriym.Loop](https://github.com/koriym/Koriym.Loop)です。本記事では、このPHPライブラリの基本的な使い方とその利便性を紹介します。
## Koriym.Loopとは?
Koriym.Loopの主な特徴は以下の通りです。
– エンティティリストジェネレーターに変換: データセットをエンティティクラスのリストに変換
– ループ情報の提供: テンプレートエンジンのようなループ情報(isFirst、isLast、index、iteration)を提供
– 依存性の注入: エンティティに依存インスタンスを注入可能
– イテレーターのサポート: 配列だけでなくイテレーターもサポート## インストール方法
Koriym.LoopはCom
OSSに初めてコントリビュートしてみた
# なぜコントリビュートしようと思ったか
– 元々OSSへコントリビュートしてみたかった
– 次の職場でCakePHPを利用するため、チュートリアルを一通りやっている中でドキュメントをもっとこうした方が良いのでは?と思ったから# コントリビュートしたOSS
## リポジトリ
https://github.com/cakephp/docs## PR
https://github.com/cakephp/docs/pull/7865# コントリビュートまでの流れ
1. OSSのコントリビュート方法を確認する
– https://book.cakephp.org/5/ja/contributing/documentation.html
2. リポジトリをForkする
3. “`5.x“`ブランチから修正用のブランチを作成する
4. PRを作成する
5. Reviewerのチェック後にマージされる# その他
– 今回はドキュメントに対するコミットでしたが、いずれはCakePHP本体にもコミットしていきたいなと考えている
– OSSにコミットしてからLapra
Laravel環境構築時にlocalhostでSQLSTATE[HY000] [2002] Connection refused (Connection: mysql, SQL: select * from sessions where id = 5d3B1AuW5zW1TpmKRRFXLSYLoiefJcQDG2kSAhBl limit 1)が出た話
# Laravel環境構築時のエラー
初めまして、Laravel初学者のものです。
新しいアプリを作成してみようと思い、`Laravel sail`を使用して環境構築しlocalhostを開いたところ下記エラーが表示されました。
“`
SQLSTATE[HY000] [2002] Connection refused (Connection: mysql, SQL: select * from sessions where id = 5d3B1AuW5zW1TpmKRRFXLSYLoiefJcQDG2kSAhBl limit 1)
“`
「あれ?今までこんなエラー表示されたっけ?」
今まで何度か環境構築してきましたが、構築時にこのようなエラーが表示されることはありませんでした。# 結論
セッションドライバの設定が「database」になっていることが原因でした。
新しく構築した環境では`config/session.php`と`.envファイル`にてdatabaseを使用するよう設定されいたため、localhostを開く前にデータベーステーブルを作成するためのマイグレーションが
AWS SDK for phpを使って、一括送信機能を実装する
## 概要
SesV2Clientを使って、メールテンプレート登録、一括送信機能を実装しました。意外とドキュメントにも書いていないことがあったので、役にたてばと思い記事を書きます。
## この記事で伝えたいこと
– ローカル環境でSDKを使ってメール送信機能を実装する手順
– 初見のAWSサービスを使うときのアプローチの仕方
## 前提
– ローカルでSES APIを使うためのコンテナ作成
– CLIコマンドの準備
(ローカル環境の参考はこちら https://zenn.dev/machui/articles/bfd998c086d81f)
(CLIコマンド準備 https://zenn.dev/hayato94087/articles/7848e9d6a2e3d6)
## メールテンプレート登録、一括送信をSDKで実装するときの流れ(ローカル環境)
– まずAWS CLIで動くか確かめる
– エラーが出るので必要な項目、必要な形式がわかる。
– SDKに直して、実装する。
初めからSDKを使った方が早いように思えますが、上記の手順で必要な項目を絞っていくのが一番早い気がします。急がば
PHP CGI 引数インジェクションの脆弱性 / CVE-2024-4577
こんにちは
PHPの脆弱性のニュースがでていたのでメモっときます。## 内容
PHP に影響を与える新たな重大なセキュリティ上の欠陥についての詳細が明らかになりました。この欠陥を悪用すると、特定の状況下でリモート コード実行が発生する可能性があります。## 特定の状況下、とは?
防御側にとって、このバグは特定のロケールの Windows ベースの PHP インストール (PHP が CGI モードで具体的に使用されている) でのみ悪用されています。
Windows 版 XAMPP のサーバーで起きる問題で、さらに特定のロケールは
– 日本語 🔥
– 中国語※他のロケールも未確認なだけで可能性あり
ということです。
## パッチ
PHP の新しいバージョン8.3.8、8.2.20、8.1.29 がリリースされました。### 1. PHP をアップグレードできないユーザーの場合:
“`
RewriteEngine On
RewriteCond %{QUERY_STRING} ^%ad [NC]
RewriteRule .? – [F,L]
“`#
Rocky Linux 9 でPHPを8.0から8.2にアップグレード
テスト用マシンにRocky Linuxを入れてからけっこう経ってしまって、そう言えばアップグレードを怠ってたな、ということで覚書を兼ねて。
“`
# dnf -y upgrade
“`
全408モジュール、814ファイルものアップグレードがあった。サボりすぎ。ところでPHPのバージョンは、というと
“`
# php –version
PHP 8.0.3 (cli) (built: Aug 3 2023 17:13:08) (NTS gcc x86_64)
Copyright (c) The PHP Group
Zend Engine v4.0.30, Copyright (c) Zend Technologies
with Zend OPcache v8.0.30, Copyright (c), by Zend Technologies# dnf module list php
Rocky Linux 9 – AppStream
Name Stream Profiles
【Wordpress】ファイルマネージャーからプラグインを削除する方法
# 概要
久しぶりにwordpressにログインしようとしたら、以下のエラーで管理画面に入れず…なんじゃこりゃ!> Warining require:(xxxxx/content/plugins/backwpup/vendor/composer/../../src/infrastructure/restore/restore.php): failed to open stream: no such file or directory in /xxx/public_html/wp-content/plugins/wordpress-popular-posts/vendor/composer/classloader.php on line 478
(以下省略)ということで、プラグインのエラーでログインできない場合の対処方法を紹介します。
# 原因と対処方法
このエラーはbackwupというプラグインのバージョンが原因らしい。調べるとたくさん記事が出てきました。
大抵こういったエラーはプラグインの影響と考えて良いでしょう。ということで、ファイルマネージャーから対応します。
[Laravel] テスト実行時にテスト用データベースへ切り替わる仕組み
## 要点
Laravelでは、**テスト用DBの作成と切り替えを全て自動で行ってくれます**。
一連の仕組みに関わっているファイルは以下の通り。– テスト用DBの作成 → `docker-compose.yml`および`docker/mysql/create-testing-database.sh`
– テスト用DBヘの切り替え → `phpunit.xml`および`.env`## 前提
**Laravel Sailを使ったDocker環境**で開発をしているという前提で話を進めます。– macOS 13.5.2
– PHP 8.2.11
– Laravel Framework 10.28.0
– laravel/sail v1.25.0
– Docker 23.0.5
– laravel/breeze v1.25.0## 本題
### はじめに
アプリケーション開発において、テストを実行すると**DBに保存されているデータが全て消去されます**。
そのため、テストを行う際は必ずテスト用DBに切り替える必要があります。::
PHP_XDEBUG_REMOTE_HOSTとPHP_XDEBUG_CLIENT_HOSTの違い
## まとめ
`PHP_XDEBUG_CLIENT_HOST`: Xdebug **2** ではこれ
`PHP_XDEBUG_REMOTE_HOST`: Xdebug **3** ではこれXdebugが2から3へバージョンアップされた際に構成設定の名前が変更された
https://xdebug.org/docs/upgrade_guide/ja
他にも変更された項目がある
例)– `xdebug.remote_autostart` → `xdebug.start_with_request`
– `xdebug.remote_log` → `xdebug.log`
– `xdebug.remote_port` → `xdebug.client_port`(デフォルト値も`9000`→`9003`)## 背景
古めのプロジェクトで修正する際にハマった。
うまくいっている設定を使えばデバッグ出来るだろうと、Xdebug3の書き方で書いてたが止まらずハマった。## あとがき
PHPStormの設定が優秀なのと先人達の作ってきた道を辿って、なんとなくXdebugを利用し
個人利用のためのインターネット速度テストツールの紹介
皆さん、こんにちは!今日は、私が個人利用のために開発したインターネット速度テストツールを紹介したいと思います。このツールは、ユーザーのインターネット接続速度を簡単にテストできるように設計されています。また、リンクを皆さんと共有します。以下に、コードとその動作について詳しく説明します。
[SpeedTest] (https://speedtest.tehito.com)
![Screenshot 745.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3801337/145470d6-39d4-5c0e-708f-e183078a3e1b.png)
### コードの説明
“`speedtest.js“`
“`
// speedtest.jsvar worker = new Worker(‘speedtest_worker.js’);
worker.onmessage = function (event) {
if (event.data.type === ‘result’) {
PHP の論理積 (&&) の短絡評価で null check しつつ bool を返す
# はじめに
PHP は `if` 文に `null` 入れると `false` を返してくる。
そんな中、null check して、`null` なら `false`、`null` じゃなかったら関数を実行するコードがあり、何も不思議に思わなかったが IDE がもっといい書き方あるぜって言ってきた。
“`php
$is_smartphone = $client_type ? $client_type->isSmartphone() : false;
“`自動変換してもらったらこうなった。
“`php
$is_smartphone = $client_type && $client_type->isSmartphone();
“`
…..。
null check どこいった?`false` どうやって入る?って思ってちょっと調べた。追記: 記事最下部に PHP 8.0 以降の書き方も紹介しています。
# PHP の論理積 (&&)
どうやら PHP では、左の評価をして否定されたら終わるという実行形式らしい。これ**短絡評価**っていうみたい。
PHP で
【Account Engagement】はじめてのフォームカスタマイズ
カスタマイズ自由度が低く使い勝手が良くないAccount Engagementフォームを最小限イケてる感じに持っていくため4つのカスタマイズを施した覚書です。
### フォームの作成
レイアウトテンプレートにデフォルトでテンプレートが1つ用意されており、それを元にフォームを簡単に追加出来るようになっている。
![sidebar.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2295479/e58ea28d-b3ae-0390-1588-c6df5b31d747.png)
カスタマイズ用レイアウトテンプレートを用意し、そこから1つ作成したフォームがこちら。
「素」ですね(°д°)..![default_form.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/2295479/437fc958-b5ff-f054-ad08-739894a0f3d0.png)
足りない項目はフォーム→フォームウィザード→2.項目