- 1. PHPerKaigi 2024でレギュラーセッション登壇してきました!
- 2. 【Laravel】useした時に`Class not found`とでて困った話
- 3. 【PHP】マイナーフレームワーク「Flow」を試してみる~イベント管理編~
- 4. 「AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~」をPHPで解いてみた
- 5. 2025年に開催される(かもしれない)全国のPHPカンファレンスのまとめ
- 6. PHPerKaigi 2024 コードゴルフを解く (DAY 0)
- 7. 【Laravel】PHPUnitでテストコードを書く
- 8. Amazon linux 2023 にWordpress6.4.3をインストール
- 9. simplexml_load_fileで要素名にハイフンがついていると読み込めない
- 10. SiteGuardを導入するとHTTP_ACCEPT_ENCODINGなどのHTTPヘッダが削除されてしまう件
- 11. ランダムな値を生成する技を使い倒したい
- 12. PHP7.4 → PHP8.2にバージョンアップする手順
- 13. Homestead Vagrant 指令筆記
- 14. LibXL PHP Extensionでセルの文字列を読み取る
- 15. WordPressを扱うエンジニアに対する質問事項
- 16. TinyMCEがTableタグに「width」と「height」を勝手に設定する機能を無効にする
- 17. WordPressの記事をPHPから更新だけ行う方法
- 18. Real-Time Find and Replace で置換されないときの対処法
- 19. macOS(Monterey)で PHP を動かす
- 20. プログラムの可読性について(初学者向け)
PHPerKaigi 2024でレギュラーセッション登壇してきました!
## はじめに
>PHPerKaigi(ペチパーカイギ)は、PHPer、つまり、現在PHPを使用している方、過去にPHPを使用していた方、これからPHPを使いたいと思っている方、そしてPHPが大好きな方たちが、技術的なノウハウとPHP愛を共有するためのイベントです。
2024年3月7日(木)〜 3月9日(土)開催でした。
https://phperkaigi.jp/2024/
## 登壇セッション
https://fortee.jp/phperkaigi-2024/proposal/939533ae-f26a-4bd3-a8e4-c88d820943c6
去年に引き続きプロポーザル採択での登壇となりました。
([去年の記事](https://qiita.com/yamamoto_hiroya/items/5e3780f163093176f34e))
トーク聞いていただいた方、
【Laravel】useした時に`Class not found`とでて困った話
# はじめに
こんにちは、プログラミングを始めて約3年のエンジニアのkeitaMaxです。
今回は、`Class “Lib\UsePost” not found`というエラーがでてしまって困った話をします。
# 困ったこと
Laravelプロジェクト直下に`Lib`というディレクトリを作成し、’UsePost.php’というファイルを作成したのですが、
これをコントローラから読み込もうとしたときに`Class “Lib\UsePost” not found`となってしまい読み込むことができなくて困ってしまいました。
# 最初に実装した内容
最初に実装した内容としては、`PostController`と`UsePost`を以下のように実装しました。
“`php:PostController.php
【PHP】マイナーフレームワーク「Flow」を試してみる~イベント管理編~
# 初めに
「ある処理が実行された時に、別の処理を割り込みで実行させたい」という時ありますよね?「APIのレスポンスが作成されたら、それをログに書き出す」のような。
このような**イベント管理**の処理を実現するために、Flowには”**Signal & Slot**”と呼ばれる機能が備わっています。# イベント管理とは
イベント管理は、「ある処理をトリガーとして別の処理が実行される」という概念です。GUIアプリケーションにおいて、ユーザの操作に応じて対応する処理が実行される仕組みを指します。バックエンドよりはフロントエンドの開発においてより頻繁に利用される印象です。# Flowにおけるイベント管理
Flowでは、**Signal & Slot**という機能でイベント管理を行います。
特定のイベント(Signal)が発生したときに特定の処理(Slot)を実行するというものです。※AOPと似てますよね。違いについては後述。
:::note info
Signal & Slotは、C++のQt(キュート)というフレームワークで利用されていた概念です。Flowではその概念を元
「AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~」をPHPで解いてみた
# はじめに
[@drken](https://qiita.com/drken)さんの記事である[「AtCoder に登録したら次にやること ~ これだけ解けば十分闘える!過去問精選 10 問 ~」](https://qiita.com/drken/items/fd4e5e3630d0f5859067#%E7%AC%AC-4-%E5%95%8F–abc-087-b—coins-200-%E7%82%B9)にはPHPの解答はないので、類題も含めてPHPで解いてみました。
※筆者はPHP初心者なので、解答は決してきれいなものではないです。
リファクタリングもしておらず、実際に一番最初に書いて、正解となったコードを載せています。
その点はご了承ください:bow:また、こういう解き方もあるよ!という方は、優しくコメントで教えていただけますと幸いです:relaxed:
# まず、解いてみよう!
## 試行錯誤しよう
「よし、解き方がわからなかったからちょうどよかった。どれどれ、答えは?」
と思ったそこのあなた!とにかく、**もう30分だけ粘ってみてください!**
「こうし
2025年に開催される(かもしれない)全国のPHPカンファレンスのまとめ
# 2025年に開催される(かもしれない)全国のPHPカンファレンスのまとめ
## PHPカンファレンス関西 2025 ???
撤収、完了しました!
皆様ありがとうございました!!また来年!!#phpkansai pic.twitter.com/1SF97J6Qfh
— PHPカンファレンス関西2024 (@phpcon_kansai) February 11, 2024
PHPerKaigi 2024 コードゴルフを解く (DAY 0)
# PHPerKaigi 2024 ⛳️
コードゴルフを解きました。
—–
この記事はQiitaのスライドモードで作ってるよ!
DAY 1以降では僕より短い回答いっぱい出てたので、最短を狙うための記事はもっとほかの人が自分で書いてるのでは!—–
以後、バイト数は行頭インデントと改行を抜いて計測します。
—–
# 問題 #1 FizzBuzz
——
![スクリーンショット 2024-03-07 1.35.50.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/4121/08662d1b-669c-7008-c00d-818b722bd408.png)
——
標準回答 (182バイト)
“`php
for ($i = 1; $i <= 100; $i++) { echo match ([$i % 3 === 0, $i % 5 === 0]) { [true, true] => “FizzBuzz”,
[true, false]
【Laravel】PHPUnitでテストコードを書く
# はじめに
こんにちは、エンジニアのkeitaMaxです。
今回は、以前作成したLaravelの環境をつかってコードテストを書いていきます。
https://qiita.com/keitaMax/items/7bc51212a32a6418aa1c
Laravelの公式サイトをもとに、PHPUnitを使用してテストコードを作成していきたいと思います。
# インストール
>Laravelはユニットテストも考慮して構築されています。実際、PHPUnitをサポートしており、最初から含まれています。
(引用元:https://readouble.com/laravel/10.x/ja/testing.html)Laravel公式サイトによると、PHPUnitが最初から含まれているということなので、PHPUnitを使用したいと思っても新しく何かをインストールする不必要はなさそうです。
# テストを作成する
以下のようなコマンドを実行してあたらしいテストケースを作成します。
“`
php artisan make:test PostTest
“`すると、`test
Amazon linux 2023 にWordpress6.4.3をインストール
# なにしたの
とあるミッションがあり、Wordpressにプラグインを入れて動作確認をすることが必要になりました。
最近あまりwordpressを触っていないので、AWS上に軽く立てて動かそうというのが狙いです。
以下の解説はインストール開始以降に絞っており、事前にAWSでインスタンスを立ててnetwork設定したりするところは大いに割愛しています。# 参考にしたもの
https://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/hosting-wordpress.html
## いろいろバージョン
- EC2
- Amazon Linux 2023 AMI 2023.3.20240304.0 x86_64 HVM kernel-6.1
- mysql
- Ver 8.0.36 for Linux on x86_64 (MySQL Community Server – GPL)
- php
- php8.2-mysq
simplexml_load_fileで要素名にハイフンがついていると読み込めない
simplexml_load_fileで要素名にハイフンがついていると読み込めず、「`Parse error: syntax error, unexpected ‘[‘`」エラーが発生する場合の対処方法です。
※ これは2016-10-25に[個人ブログ](https://bicstone.me)で公開した記事を移植したものです。
## 現象
simplexml_load_fileで取得できなかったUser-Agents.orgのxmlは次のとおりになっていました(抜粋)。
“`xml
“`次のPHPコードを実行するとエラーが発生しました。
“`php
user-agent[0]->String);
?>
“`“`plai
SiteGuardを導入するとHTTP_ACCEPT_ENCODINGなどのHTTPヘッダが削除されてしまう件
「SiteGuard」を導入にすると一部のHTTPヘッダーがとれなくなります。意外と気付かず条件設定などにおいてハマってしまうことがあります。
※ これは2016-09-28に[個人ブログ](https://bicstone.me)で公開した記事を移植したものです。
## 概要
さくらのレンタルサーバを使用しているサイトにおいてgzip圧縮データを返すようなPHPを作って動作確認していたのですが、いかなる環境で接続しても圧縮されたデータが返されませんでした。「`$_SERVER[‘HTTP_ACCEPT_ENCODING’];`」の値が常に空だったのです。
他のサーバーにあげたら利用できたのでさくらのレンタルサーバの環境が原因なのかと思っていました。他のサイトにあった記事ではさくらのレンタルサーバ固有の問題であるという書き方がなされていました。しかし、さくらのレンタルサーバで作っているテスト用ドメインでは動作したのです。
…あれ?
「`phpinfo();`」を眺めていて気が付きました。両方のサーバーでHTTPヘッダーに違いがあったのです。
## HTTPヘッダーの違い
ランダムな値を生成する技を使い倒したい
## 前提
– ランダムな値を生成する技を使い倒したい!!!!というきもちでまとめます。## 本編
### 1. PHP関数編1. **random_int**:「0~10の間のランダムな整数」
“`php:
# (最小値, 最大値) をいれる!
random_int(int $min, int $max): int$number = random_int(0, 10);
-> 6 # 結果1
-> 8 # 結果2
-> 0 # 結果3
“`
2. **mt_rand**:「0 ~ 10の間のランダムな数字」
※ 整数でも小数でもOK
“`php:
# (最小値, 最大値) をいれる!
mt_rand(int $min, int $max): int$number = mt_rand(0, 10);
-> 6 # 結果1
-> 8 # 結果2
-> 0 # 結果3# 1.0から9.0までの範囲
$nu
PHP7.4 → PHP8.2にバージョンアップする手順
# 動作環境
– MacBook Air M1 2020
– macOS Sonoma 14.2.1
– Homebrew 4.1.18
“`
$ brew –version
Homebrew 4.1.18
Homebrew/homebrew-core (git revision addae16383c; last commit 2023-11-03)
“`
– PHP homebrewのパッケージphp@7.4を使用
“`
$ php -v
PHP 7.4.30 (cli) (built: Jun 9 2022 09:20:03) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.4.30, Copyright (c), by Zend Technologies
$ which php
/opt/homebrew/opt/php@7.4/bin/php
“`# php7.4からphp8.2へバ
Homestead Vagrant 指令筆記
> PHP8.1 バージョンで `composer` コマンドを実行する必要がある場合は、次のようにします。
“`
php8.1 /usr/local/bin/composer update
“`> プロジェクト内で PHP の実行バージョンを指定するには、`homestead.yaml` ファイル内のサイトでPHPバージョンを指定する必要があります。以下のようにします。
“`
– map: homestead.test
to: /home/vagrant/code/Laravel/public
php: “8.1”
“`> `homestead.yaml` ファイルを変更した後、そのファイルの設定を再読み込みするには、以下のコマンドを使用します。
“`
vagrant provision && vagrant reload
“`> CLI モード下の PHP バージョンを切り替える場合、次のコマンドを使用します。
“`
sudo update-alternatives –config php
sudo update-alternatives
LibXL PHP Extensionでセルの文字列を読み取る
## はじめに
LibXL PHP Extensionを使って、Excelに入力されたデータを読み取るシステムを開発していた時、数式が入力されているセルで、read(row, column)を使うと数式だけが読み取られてしまって苦戦したので備忘録です。
## 本題
解決方法の調査に半日ほどかけた結果、公式(?)ドキュメントみたいなものに辿り着けました。https://github.com/iliaal/php_excel/blob/master/docs/ExcelSheet.php
以下、私なりの解釈です。
“`php:controller.php
//概念の説明read($row, //0から始まる行数
$column, //0から始まる列数
&$format = null, //フォーマット(参照渡しに設定されている)
$read_formula = true //←これが重要。デフォルトでtrue = 数式を拾う設定になっているので、これをfalseにすれば値を取ってくるよ
WordPressを扱うエンジニアに対する質問事項
これまでWordPressを用いたWebサイト制作を多く手掛けてきましたが、フリーランスの方や他社様と制作業務をご一緒させていただくこともあります。
一口にWordPressを用いたWebサイト制作といっても、想定している進め方やレギュレーション、習得具合や期待などの認識がずれる懸念もありますので、このあたりを確認するとお互いのギャップが減るのではないかと質問事項を考えてみました。
この内容はWordPressでのサイト制作を行うエンジニア採用においても転用できる部分があると思います。
また、質問の意図を補完する意味で私の場合の回答例も記載しました。
この回答が正しいとも限りませんが、何を聞きたいかのイメージがしやすいかと思います。## 質問事項
### CMS選定について
サイトのリニューアルを行う際に、WordPressを継続利用するかどうかも含めて提案して欲しいという要望があった場合、どのような観点で他のCMSの選定、もしくはWordPressの継続利用を判断しますか?
#### 回答例
下記の観点でヒアリングし検討します。
* 運用担当者の方のリテラシーや慣
TinyMCEがTableタグに「width」と「height」を勝手に設定する機能を無効にする
WordPressがアップデートされてから、TinyMCEがTableタグに「width」と「height」を勝手に設定する機能が追加されました。レスポンシブデザインのサイトにおいて、この機能はむしろデザインを崩す原因となってしまいます。この機能を無効にする方法をご紹介します。
※ これは2016-08-28に[個人ブログ](https://bicstone.me)で公開した記事を移植したものです。
## 問題
TinyMCE 4.3.3以上(WordPress 4.5以上)においてテーブルの境界線を一度でも触ってしまうと、TinyMCEはTableタグに「width」と「height」を勝手に設定します。
![2×2のHTMLテーブルのスクリーンショット](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/684999/081b61b8-7c33-8a6b-94aa-de99e05f201f.png)
![テーブルの枠線を触る](https://qiita-image-store.s3.ap-north
WordPressの記事をPHPから更新だけ行う方法
WordPressの記事や固定ページをPHPから更新だけ行う方法です。
※ これは2016-10-25に[個人ブログ](https://bicstone.me)で公開した記事を移植したものです。
## 需要
キャッシュプラグインを使用している時に、一定時間で自動更新される外部ページを読み込む仕組みがあるWordPressの記事を更新したい場合に利用できます。
## 方法
次のようなPHPを実行します。場合によっては読み込みに数秒かかる場合があるのでタイムアウト設定などにご注意ください。
“`php
[記事ID]));
?>
“`## 参考
https://wpdocs.osdn.jp/%E9%96%A2%E6%95%B0%E3%83%AA%E3%83%95%E3%82%A1%E3%83%AC%E3%83%B3%E3%82%B9/wp_update_post
post_titleとpost_contentを
Real-Time Find and Replace で置換されないときの対処法
Real-Time Find and Replaceプラグインでの置換が適用されないときの対象方法を紹介します。
※ これは2016-09-26に[個人ブログ](https://bicstone.me)で公開した記事を移植したものです。
## プラグインの概要
WordPressで表示される公開ページの置換、正規表現置換ができるプラグインです。
## 置換されない…
Autoptimizeプラグインで生成されたjs、cssファイルのURLを変更するために使用したのですが、置換作業がうまくいきませんでした。
## 原因
AutoptimizeプラグインやReal-Time Find and Replaceプラグインも `template_redirect` フックを利用していました。優先順位がどちらも同一であったため、名前順でAutoptimizeプラグインの出力のバッファリングが先に開始されてしまったことが原因です。
## 対処
Real-Ti
macOS(Monterey)で PHP を動かす
# はじめに
廃棄予定だった [HTML の参考書](https://amzn.asia/d/2JiazU3)に掲載されていたPHP のサンプルコード(後述)を
手持ちの MacBook の Apache で動かしたところ、以下のようなレスポンスページ
(PHPのコードが丸見えのプログラムが動いてない状態)となり、
“`
print_r($_POST);
?>
“`
環境を整える必要性に気付きました。最終的に以下の作業を行ったため、
– macOS に PHP をインストール
– macOS に Apache をインストール
– インストールした Apache の設定勉強になったことを備忘録をかねて残したいと思います。
# 0. HomeBrewのインストール(事前準備)
詳細は後述しますが、macOS Monterey で PHP を動かすためには、
PHP および Apache のインストールが必要です。
macOS は HomeBrew でパッケージ管理をするので、
まずは HomeBrew をインストールします。ただ、私が持っている MacBook が人
プログラムの可読性について(初学者向け)
## 概要
プログラマになって早数年、日々良いプログラムとは何かを考えながらプログラミングをしていました。
一概には言えませんが、良いプログラムとは、究極 **バグがない** プログラムを指すと思います。(要件を満たしているかなどはさておき)
もちろん開発経験のある方ならそれが無理難題だとお気付きでしょう。では、もう少し現実的に良いプログラムにするためには何が必要か、具体的に良いプログラムとは以下のような事を指すことが多いです。
– 可読性の高いプログラム
– 再利用性の高いプログラム
– エラー処理に対処したプログラム
– テスト可能なプログラム
– etc今回はそれらの中で **可読性** に焦点を当てて説明してみたいと思います。
※言語はPHPで説明します。## 可読性の高いプログラムとは
プログラムの可読性とは、そのプログラムコードが人間にとってどれだけ理解しやすいか、つまり読みやすく、理解しやすい状態にあるかを指す概念です。
コードの可読性が高い場合、他の開発者がそのコードを読んで理解するのが容易になり、バグの特定、修正、機能の追加が簡単になります。
可