- 1. PHPerKaigi 2024 コードゴルフを解く (DAY 0)
- 2. 【Laravel】PHPUnitでテストコードを書く
- 3. Amazon linux 2023 にWordpress6.4.3をインストール
- 4. simplexml_load_fileで要素名にハイフンがついていると読み込めない
- 5. SiteGuardを導入するとHTTP_ACCEPT_ENCODINGなどのHTTPヘッダが削除されてしまう件
- 6. ランダムな値を生成する技を使い倒したい
- 7. PHP7.4 → PHP8.2にバージョンアップする手順
- 8. Homestead Vagrant 指令筆記
- 9. LibXL PHP Extensionでセルの文字列を読み取る
- 10. WordPressを扱うエンジニアに対する質問事項
- 11. TinyMCEがTableタグに「width」と「height」を勝手に設定する機能を無効にする
- 12. WordPressの記事をPHPから更新だけ行う方法
- 13. Real-Time Find and Replace で置換されないときの対処法
- 14. macOS(Monterey)で PHP を動かす
- 15. プログラムの可読性について(初学者向け)
- 16. PHP8.2までの環境で簡単にEnumからtryNameFromしたいよね
- 17. LibXL PHP ExtensionでExcelシートを非表示にする
- 18. 【PHP】キャッシュの制御
- 19. クエリビルダーの whereAll() および whereAny() メソッドが Laravel 10.47 に追加
- 20. PHP oci_connect SELECT テンプレ Smarty .tplで出力
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で説明します。## 可読性の高いプログラムとは
プログラムの可読性とは、そのプログラムコードが人間にとってどれだけ理解しやすいか、つまり読みやすく、理解しやすい状態にあるかを指す概念です。
コードの可読性が高い場合、他の開発者がそのコードを読んで理解するのが容易になり、バグの特定、修正、機能の追加が簡単になります。
可
PHP8.2までの環境で簡単にEnumからtryNameFromしたいよね
`PHP8.3`までは動的かつ簡単に`enum`から`tryNameFrom`する事は出来ません。
と言う事でお手軽に`tryNameFrom`しようじゃあないか。なおオチとしては`composer require putraits/enums`する方が早いです。
https://packagist.org/packages/putraits/enums
詳細な解説は[こちら](#putraitsenumsを用いた解決)。
:::note warn
注意次の例の通りPHP8.3からは動的なenumアクセスが出来るのでこの記事は不要となります。
“`php
enum HogeBackedEnum: string
{
case Fuga = ‘ふが’;
}enum HogeEnum
{
case Fuga;
}$name = ‘Fuga’;
var_dump(
HogeBackedEnum::{$name}, // enum(HogeBackedEnum::Fuga)
HogeEnum::{$name},
LibXL PHP ExtensionでExcelシートを非表示にする
## まえがき
LibXL PHP ExtensionというライブラリでExcelシートを非表示にしようとしたら大変苦戦したので、後学の為と自分の覚書の為にメモに残しておきます。## ほんだい
…前置きが長いとストレスにつながると思うので、いきなり本題ですが、簡潔に書くと下記のようになります。
“`PHP:qiita.rb//↓ この部分は一例です。各記法に従ってください
$excelBook = new \ExcelBook();
$excelSheet = $excelBook->getSheet(0); //この0はsheet1//略
//シートを非表示にする
$excelSheet->setHidden(true);“`
## あとがき
私はLibXL PHP Extensionが使われているシステム開発をしており、ExcelにデータをPHPから書き込み後、そのシートをユーザーに見せないようにしたかったので、非表示にする方法をずっと探していました。(計5日間ほど…)このLibXL PHP Extensionについての情報を検索してみると、日本語英語に
【PHP】キャッシュの制御
エンジニア歴1年弱の新米エンジニアです。
普段の業務ではフロントエンドはReact、バックエンドはPHPを使用しています。ググって調べて出てきたコードをコピペすれば問題自体は解決しますが、それだと身につかないと思ったので今回も備忘録として残したいと思います。
## 起きていた問題
顧客管理システムをローカル環境でメンテナンス中 **ユーザーA** のアカウントでログインログアウトし、今度は **ユーザーB** でログインしたところ前回ログインしたユーザーの情報 **(ユーザーA)** の情報が引っ張られてしまう## 試したこと
ログイン処理を行っているPHPファイルに対して様々な記事を参考に
“`
header( ‘Cache-Control: no-store, no-cache, must-revalidate’ );
header( ‘Cache-Control: post-check=0, pre-check=0’, FALSE );
header(‘Pragma:no-cache’);
“`
を追記しましたが変わらず…## 解決策
“`
header( ‘
クエリビルダーの whereAll() および whereAny() メソッドが Laravel 10.47 に追加
2024/03/06にリリースされたLaravel 10.47から、新しいクエリビルダーとして `whereAll()` と `whereAny()` メソッドが追加されました。
# 使い方
1つの値を複数のカラムと比較する検索のロジック等を作成する場合があります。
例えば、名、姓、電子メール、電話番号でユーザーを検索する場合は、これまで以下のような書き方をしていました。“`php:Controller
User::query()
->where(function ($query) use ($search) {
$query
->where(‘first_name’, ‘LIKE’, “%$search%”)
->orWhere(‘last_name’, ‘LIKE’, “%$search%”)
->orWhere(‘email’, ‘LIKE’, “%$search%”)
->orWhere(‘phone’, ‘LIKE’, “%$search%”);
});
“`
これだと大量の`o
PHP oci_connect SELECT テンプレ Smarty .tplで出力
### ■ 開発環境
・PHP7.4
・Smarty 2.xxx
・RedHat7.9
・oracle 19### ■ ソース概要
・OCIで、oracleへ接続
・接続後、SELECT文で値を配列へ格納
・上記で取得した値を、foreachで回して、別々の配列へ格納— ここから Smarty .tpl
・PHP側で取得した値を出力### ■ PHPソース
“`php index.phpfunction GET_KASOU_KUBUN()
{// OCI
$conn = oci_connect(DB_USER, DB_PASSWORD, DB_CONNECTION_STRING, DB_CHARSET);if (!$conn) {
$e = oci_error();
self::fnDispError(DB_ERROR, $e[‘message’], true, DEBUG_MODE);
}$sql = “SELECT カラム01, カラム02 FROM テーブル01 WHERE カラム01 < 3"; $sti