- 1. カスタム投稿タイプとタクソノミーを使った絞り込み検索機能を作りたい
- 2. いまさらだけど、XAMPPで複数バージョンを一つのPCで切り替えて使う
- 3. CSVアップロード機能を作るためのメモ
- 4. unset()で複数引数持てる
- 5. IBMi V7R5 でPHP iToolkit ⇔ QXMLSERV 文字化け?
- 6. ダンプをとるよ、”VarDumper”
- 7. phpenvでphpをインストールする際のコマンドメモ
- 8. 【PHP / Laravel】現在のパスワードと一致するか確認するバリデーション
- 9. 手っ取り早くphpでログをファイル出力する方法
- 10. DiscordのWebHookで遊んでみよう
- 11. Laravelにおけるデータ取得のリファクタリング〜実体験を添えて〜
- 12. unset()の注意点
- 13. ZendFramework1 future の Zend_Db_Adapter_Db2#limitメソッド
- 14. ファイルを探すよ、”Finder”
- 15. PHP: Symfony Mailer の使い方
- 16. PHP: Swift Mailer の使い方
- 17. E2Eテストをより簡単に?!〜Playwrightってなんですか?~
- 18. ペネトレーションテスト
- 19. Laravel SailをPHP 8.3でインストールする
- 20. オプション設定をシンプルに、”OptionsResolver”
カスタム投稿タイプとタクソノミーを使った絞り込み検索機能を作りたい
https://qiita.com/advent-calendar/2023/cms
この記事は[CMS(WordPressやヘッドレスCMS) Advent Calendar 2023](https://qiita.com/advent-calendar/2023/cms)の15日目の記事です。
空きがあったので参加させていただきました。## はじめに
あまたある`WordPress`のプラグインの中でも`Custom Post Type UI`は超有名ですよね。最近`WordPress`については運用・保守作業ばかりで、サイト制作は全然なのですが制作時はよくお世話になりました。数年前の話になりますが、新規`WordPress`サイトの制作でクライアント(社内グループ各社)の要望に検索機能がありました。しかし予算の都合上、有料プラグインは使用できなそうだったので自作することになったのです。
今回、その時に制作した「カスタム投稿タイプとタクソノミー」を用いた検索機能について書いていこうと思います。
:::note alert
筆者が自ら集めた情報をつなぎ合わせる形で自作し
いまさらだけど、XAMPPで複数バージョンを一つのPCで切り替えて使う
# XAMPPって
XAMPPは、最も人気のあるPHPの開発環境です。
Apache + MariaDB + PHP + Perl がインストールできます。
Windows版、Mac版、Linux版があります。ここでは、Windows版を使って環境を作ります。公式サイトは、[こちら](https://www.apachefriends.org/jp/index.html)
# いまさら?
すでに四半世紀を超えた経験の中で、PHPはほぼ初めて(むかーしソースを呼んだ程度)です。
これから関わるプロジェクトで、PHPを使っているということだったので、環境を作ろうと思った次第です。ただ、複数の製品を提供していて、PHPのバージョンも異なるようなので、どうやったらきれいな環境を作れるかなーと思って、環境を作ってみました。
# 手順
## XAMPPをダウンロード
①公式ページのこちらのリンクを選択
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/132118/10db6756-f
CSVアップロード機能を作るためのメモ
## はじめに
※マジでメモです、すいません。※
この一年でCSVアップロード機能を作る機会が何回かありまして、その度に作り方を思い出す作業をしていたので自分用にメモを残します。## 必要なもの
1. CSVファイルを受け取るフォーム
1. 拡張子などファイルの形式チェック機能
1. CSVファイルをローカルに保存する処理
1. バリデーション機能
1. DBに保存できる形に変換する処理
1. DB保存処理## 1. CSVファイルを受け取るフォーム(View)
Formタグにenctype="multipart/form-data">
を追加する
“`php
unset()で複数引数持てる
## はじめに
私は株式会社qnoteにて、勉強会の幹事を務めております。
2023年度勉強会の珠玉のネタを2023Qiitaアドベントカレンダーに投稿していこうと思います。## 対象者
この記事は下記のような人を対象にしています。– 駆け出しエンジニア
– プログラミング初学者## 結論
unset()で配列の要素を削除する場合、引数を複数持たせて記述を短くしましょう!## 解説
ループ処理内でunset()を利用する際に、短く記述できる方法を紹介します。### unset()複数回記述する
こんな感じで、削除する要素の数だけ、unset()を実行してました…“`php
$array = [‘りんご’, ‘バナナ’, ‘いちご’, ];unset($array[0]);
unset($array[2]);print_r($array);
// 出力
Array
(
[1] => バナナ
)
“`### unset()に複数引数を記述
unset()に複数引数を持たせることが可能です。“`php
$array = [‘りんご’
IBMi V7R5 でPHP iToolkit ⇔ QXMLSERV 文字化け?
IBMi OS V7R5 にバージョンアップして以来、PHP iToolkit のコマンドが(例えば **DSPLIBL** )文字化けする。
原因を調査しても、一向に分からず、IBMサポートの方と3ヶ月ほどやりとりしたが、全然解決しない。## 解決
結論から言うと、原因は分からないが、TR3が利用したくて最新のPTFを当てたら文字化けしなくなった。IBMさん側では、「解決となる様な修正はないとのこと」。釈然としないが、同じことに遭遇してしまう、運の悪い方もいるかも知れないので、現象だけ記録に残しておく。
## PHP iToolkit って
-[zendtech/IbmiToolkit](https://github.com/zendtech/IbmiToolkit)
そもそも、「**PHP iToolkit**」 って何?って事ですが、PHPでXMLの入出力を介して、プログラム連携やコマンド連携を簡単に出来る便利なライブラリ。もちろんの [**CS^2**](https://www.cscweb.jp/solution/cscs/) にもバンドルされており、新しいバージ
ダンプをとるよ、”VarDumper”
[Symfony Component Advent Calendar 2023](https://qiita.com/advent-calendar/2023/symfony-component)の22日目の記事です。
## ダンプをとるよ、”VarDumper”
[VarDumper](https://symfony.com/doc/current/components/var_dumper.html)は、デバッグ用にダンプを出力するコンポーネントです。Symfony以外でも使えます。
### インストール
“`shell
composer require symfony/var-dumper –dev
“`### 使い方
Symfonyユーザにはお馴染みの`dump()`が使えるようになります。
“`php
$item = new Item(‘商品名’);
dump($item);
/**
Item {
-name: “商品名”
}
*/echo dump($item)->getName(); // dumpは引数を返すので、そのままメソッド
phpenvでphpをインストールする際のコマンドメモ
anyenv経由でphpenvを導入後、phpバージョン8.2.9 `phpenv install 8.2.9` が導入できず苦労したのでここに残します。
# 環境
– Mac M2
– Sonoma 14
– shell: bash実行してその度に足りないパッケージを追加していったところ以下のコマンドになりました。パッケージはすべてbrew経由で導入しています。
# コマンド
“`
PHP_BUILD_CONFIGURE_OPTS=”–with-zlib-dir=$(brew –prefix zlib)\
–with-bz2=$(brew –prefix bzip2)\
–with-curl=$(brew –prefix curl)\
–with-iconv=$(brew –prefix libiconv)\
–with-libedit=$(brew –prefix libedit)\
–with–ssl=$(brew –prefix openssl@1.1)\
–with-tidy=$(brew –prefix tidy-html5)”\
p
【PHP / Laravel】現在のパスワードと一致するか確認するバリデーション
株式会社やどかりの平山です。
パスワード変更画面での実装について書かせていただきます。〜やりたいこと〜
【現在のパスワード】が正しいものか検証し、
正しくなければバリデーションメッセージを表示したい![552c3a971ec10167a0b72e35b2eace93.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/3657995/f18718e5-54fc-e5f3-a4a3-5bac9d215325.png)
①ターミナルに下記を入力
“`php:ターミナル
php artisan make::rule CurrentPasswordRule
“`② ①で作成したCurrentPasswordRule.phpに必要事項を記述
(パスワードはセキュリティのためHash化しています)
“`php:CurrentPasswordRule.php
手っ取り早くphpでログをファイル出力する方法
開発環境などでログを出力したいが
phpiniの設定も変更できないし、ログ出力先も曖昧だし
簡単にログ出したいだけなのに、という場合の簡単ログ出力手順下記記述をログ出力したい箇所に差し込むだけ。
“`php:php
$filename = ‘test.log’; // ログファイル出力先if (!file_exists($filename)) { // ログファイル存在チェック
// ログファイルが存在しないとき新規作成
touch($filename);
}
$fp = fopen($filename, ‘a’);
$log_output = date(“Y-m-d H:i:s”) . “\r\n”;
fwrite($fp, $log_output);
fclose($fp);
“`さらに手取り早くログをファイル出力する方法
“`php:php
$b = ‘テストでログ出力’;
file_put_contents(‘filename.txt’, print_r($b, true));
DiscordのWebHookで遊んでみよう
初投稿なので文が変になっているかもしれません。
変なところはあまり気にしないでください。# はじめに
DiscordにはWebHookという機能があります。
Discord Botよりも簡単に動かせて、面倒な認証などせずに使えます。# 実際に遊んでみよう
使うものはDiscordのWebHookURLとHTTPクライアント(cURLでもなんでも)
WebHook URLの取得方法はDiscord>サーバー設定>連携サービスから取得ができます。
https://discordapp.com/api/webhooks/123456789012345678901234567/abcdefabcdefabcdef/
というようなURLが取得できると思います。## 実行環境
Windows 10
PHP 8.1## 実行方法
自分はPHPからcurlでやります。
ちょうどPHPのcurlも使ってみたかったんでね。
コードは以下の通りです。“`php:index.php
Laravelにおけるデータ取得のリファクタリング〜実体験を添えて〜
:::note info
これは [フェンリル デザインとテクノロジー Advent Calendar 2023](https://adventar.org/calendars/9360) 21日目の記事です
:::## はじめに
今年新卒で入社して、主にバックエンドを担当しているせーと申します。
入社してからあっという間に8ヶ月が経過し、アドベントカレンダーの季節がやってきました。ハヤイ。
当記事では、私が入社後初のプロジェクトで意識したデータ取得方法について共有します。## TL; DR
– N+1問題を引き起こさないように
– Eager Loadingを利用する
– selectメソッドで取得するカラムを制限し、メモリを節約する## 何が起こったか
初めてプロジェクトにアサインされ、Laravel10・MySQL8という環境でコーディングをしていました。
ローカルで開発していたときはデータ数が少なかったので、何事もなくコードを書いていました。
しかし、開発環境にデプロイして数万のデータが入った途端、APIの取得に10秒ほどかかってしまう状況になってしまいました。
unset()の注意点
## はじめに
私は株式会社qnoteにて、勉強会の幹事を務めております。
2023年度勉強会の珠玉のネタを2023Qiitaアドベントカレンダーに投稿していこうと思います。## 対象者
この記事は下記のような人を対象にしています。– 駆け出しエンジニア
– プログラミング初学者## 結論
unset()の引数として、配列/連想配列の存在しないインデックスorキーを指定してもエラー出ないので要注意!## 解説
ループ分の中でunset()を利用している場合、存在しないキーを指定するものの、エラーが出ず、処理が先に進んでしまうケースがあります。
別途、「配列内にキーが存在するかどうか」を判定する記述を入れる必要上がるかどうか、検討したほうがよさそうです。### 配列の場合
“`php
$array = [1,2,3];
unset($array[3]);
print_r($array);// 出力
Array
(
[0] => 1
[1] => 2
[2] => 3
)
“`### 連想配列の場合
“`php
$
ZendFramework1 future の Zend_Db_Adapter_Db2#limitメソッド
[ZendFramework1 future](https://github.com/Shardj/zf1-future) は **PHP8.1** コンパチで動作する、ありがたいライブラリ。(※8.1 も 2024/11/25 で [セキュリティサポート](https://qiita.com/bezeklik/items/72d1ff8393f66673e2bc) が来てしまいますが…)
過去の資産を使い、未だに多くの **IBMi** ユーザーが PHP 開発で、**ZF1** を使用しており、PHPのバージョンアップでは、非常に助かっている。
しかし、旧ZF1時代から、`Zend_Db_Adapter_Db2#limitメソッド` に問題があり(※DB2 LUW 試していないのでわかりません)我々が `IBMi` で使用する際には、一工夫が必要。## 参考リンク
– [repo – Shardj/zf1-future](https://github.com/Shardj/zf1-future)
– [issue – Zend_Db_Adapter_Db2 limit do
ファイルを探すよ、”Finder”
[Symfony Component Advent Calendar 2023](https://qiita.com/advent-calendar/2023/symfony-component)の21日目の記事です。
## ファイルを探すよ、”Finder”
[Finder](https://symfony.com/doc/current/components/finder.html)は、ファイルやディレクトリを探すコンポーネントです。Symfony以外でも使えます。
### インストール
“`shell
composer require symfony/finder
“`### 使い方
“`php
use Symfony\Component\Finder\Finder;$finder = new Finder();
// /var/www/html/assets/内の*.jsを探す
$finder->files()->in(‘/var/www/html/assets’)->name(“*.js”);// 探した結果があるか確かめる
if ($find
PHP: Symfony Mailer の使い方
こちらと同じことを、Symfony Mailer で行いました。
[PHP: Swift Mailer の使い方](https://qiita.com/ekzemplaro/items/16d3bc53fbf57f352b72)## ライブラリーのインストール
“`bash
composer require symfony/mailer
“`## プログラム
ツリー構造
“`text
$ tree -L 2
.
├── composer.json
├── composer.lock
├── symfonymailer.php
└── vendor
├── autoload.php
├── composer
├── doctrine
├── egulias
├── psr
└── symfony
“`“`php:symfonymailer.php
PHP: Swift Mailer の使い方
## ライブラリーのインストール
“`bash
composer require swiftmailer/swiftmailer
“`次の警告が出ますが、使えます。
“`text
Package swiftmailer/swiftmailer is abandoned, you should avoid using it. Use symfony/mailer instead.
“`## プログラム
ツリー構造
“`text
$ tree -L 2
.
├── composer.json
├── composer.lock
├── swiftmailer.php
└── vendor
├── autoload.php
├── composer
├── doctrine
├── egulias
├── swiftmailer
└── symfony
“`“`php:swiftmailer.php
E2Eテストをより簡単に?!〜Playwrightってなんですか?~
## はじめに
こんばんわ。今日はEC-CUBEアドベントカレンダーの20日目です。
アドベントカレンダーというものに初めて参加するため、何書いたらいいのか先輩方のを参考に悩んでました。
いろいろ考えてたら何やら、E2Eテストについての声が聞こえて来ました。
Playwrightというのがあるらしい。## 気になった経緯
一番気になっている理由は、非同期処理に強いことです。
現在のE2Eテストはcodeceptionで書かれているのですが、不安定なことがあります。
ページの要素が見つからないという理由で落ちている事が多く、再実行したらクリアするという謎現象。。。
テストコードを見ていると、Sleep関数がいくつかあります。上記から、非同期処理に強いPlaywrightが気になりました。
(ちなみにTypeScriptはよくわからないので、雰囲気で書きます。:v:)## Playwrightについて
Microsoftさんが主体となって開発しているツールです。
一時期、GitHubのトレンドにもなりました。機能について、ざっとまとめると以下になります。
– 対象ブラウザ
ペネトレーションテスト
今回は私達が昨年度作ったSNSサイトにvpn上で攻撃を仕掛けそのパケットを遮断するWAFを作るという事で素人ながらペネトレーションテストをやってみる
今回使うソースコード
https://github.com/21c1100017/WELP
※xammppで動かす場合はドキュメントルートの設定を変えてくださいローカル環境で動かす人用
データーベース情報
# データーベース情報| データーベース名 | welp |
| — | — |
| ユーザー名 | welp_admin |
| パスワード | welp_admin |# 以下SQL文
“`SQL:welp.sqlSET SQL_MODE = “NO_AUTO_VALUE_ON_ZERO”;
START TRANSACTION;
SET time_zone = “+09:00”;/*!40101 SET @OLD_CHARACTER_SET_CLIENT=@@CHARACTER_SET_CLIENT */;
/*!40101 SET @OLD_CHARACTER_SET_RESULTS=@@CHARA
Laravel SailをPHP 8.3でインストールする
別の記事を書く目的で新しいLaravelプロジェクトをインストールしようとしたときに、どうせならPHP 8.3を使ってみようと思ったものの、環境構築で一瞬悩んだので備忘録。
# 新規Laravelプロジェクトダウンロード & インストール
公式ドキュメントの通りインストールしてみます。
“`sh
curl -s https://laravel.build/php83-laravel | bash
“`https://laravel.com/docs/10.x/installation#sail-on-windows
たちあげてバージョンを確認してみると・・・8.2ですね。
“`sh
# Laravelのプロジェクトディレクトリに移動
cd php83-laravel# コンテナ立ち上げ
./vendor/bin/sail up -d# コンテナ名確認
docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS
オプション設定をシンプルに、”OptionsResolver”
[Symfony Component Advent Calendar 2023](https://qiita.com/advent-calendar/2023/symfony-component)の20日目の記事です。
## オブジェクトのプロパティ設定をシンプルに、”OptionsResolver”
[OptionsResolver](https://symfony.com/doc/current/components/options_resolver.html)は、配列でオプションの値を管理している際に、デフォルト値をシンプルに定義するレゾルバを提供します。
### インストール
“`shell
composer require symfony/options-resolver
“`### 使い方
通常、配列でオプションの値を管理して、メソッドで値を設定できるようにするには、ちょっとめんどくさいことをしなければいけません。
“`php
class SomeService;
{
private array $options;publi