- 1. WordPressのwebp、avif画像の読み込みを更に高速化する
- 2. PHPで5の付く日曜日を出力するプログラム
- 3. OSSへのコントリビュート体験記
- 4. PHPでフレームワークを使わずに掲示板アプリを作ってみる④ ログイン画面
- 5. 【php】連想配列を見やすくする工夫
- 6. list()の活用
- 7. phpでcsvを読み込んでyaml形式で出力する
- 8. Web制作会社2年目PHPerがライブラリに頼りつつ生PHPでオブジェクト指向チックにお問い合わせフォームを制作する
- 9. [メモ]docker環境のPHPでPostgreSQLを使う際にcould not find driverが出る時の対応
- 10. 未経験者が家事・育児しながらLaravelでポートフォリオを作成し、AWSでデプロイしてみた
- 11. PHPで時刻(00:00:00)を秒に変換する方法
- 12. Twitter API v2 を使い php でツイート検索
- 13. 可変長引数でディレクトリ、ファイル名を結合する
- 14. 【調査】PHPのクロージャ(無名関数)の仕様
- 15. GETとPOSTの違い
- 16. PHPでフレームワークを使わずに掲示板アプリを作ってみる③ DB登録
- 17. 【PHP】バルクインサートのためのグループ番号を自動生成する
- 18. PHPでのcurlリトライ。エラー番号やメッセージで判定する。
- 19. WordPressの記載されるURLを少し短くする
- 20. LaravelでMockeryを使った試験の話
- 21. 【Laravel】CSVファイルのデータインポート&エクスポートする方法
WordPressのwebp、avif画像の読み込みを更に高速化する
## はじめに
https://qiita.com/nanakochi123456/items/adedfe54e50bbb3653d5
この記事を利用した、.htaccess によるリダイレクト型の
高圧縮画像表示には難点があり、
302リダイレクトが発生し、特に海外(米国)から計測すると
100バイト程度のリクエストとはいえ、
再度リクエストすることにより200ms~600msと大きな遅延を発生させてしまいます。同じように国内においてもMVNO回線や電波の悪いモバイル回線でも同じようなことが発生しうると考えられます。
WordPressとphpの知識を必要としますが、リダイレクトを発生をさせないよう、uaを検出して最適な画像を配信します。
### 必要なもの
・Wordpressのfunctions.phpの知識
・キャッシュ系プラグインのOFF、キャッシュ系のサーバー設定のOFF
・Wordpressで自動的にwebpに変換するプラグイン今回はこれを使用、有料課金すればavifも使用できますが、webpだけの対応とします。
https://wordpress.
PHPで5の付く日曜日を出力するプログラム
実務で3ヶ月経過したので4ヶ月前に書いたのと同じものを作ってみました
↓↓Javaで5の付く日曜日を出力するプログラム
https://qiita.com/noczz/items/aa1caccf6aebc334b0f8今見返すと酷いコードですね…
初心者なりに前よりも良いコードを書けるように考えてみました
実務ではPHPを触っていますのでPHPで書いてみました**プログラム要件**
* endと入力されるまで無限ループ
* Enterキーを押すと1つずつ次の5のつく日曜日の年月日が表示される“`php
format(‘Y-m-d’);
}
OSSへのコントリビュート体験記
憧れの初OSSコントリビュート記念で投稿します!:grinning:
ちなみに、業務経験役2年のwebエンジニアです。### I.まとめ
動き出しからマージまで、業務後作業で5日間(8時間くらい)でした。
CSSの4行だけの変更でしたが、達成感がありました!
最終的に出したプルリクエストはこちらです↓
https://github.com/joomla/joomla-cms/pull/37695### Ⅱ.流れ
#### 1. プロジェクトを探す。(~~半年~~、1日くらい)
↓のQiita記事を参考にさせて頂き、”good first issue”というサイトで探しました。
https://qiita.com/Naughty1029/items/cf8750f375fa99bce9bb
業務で使用しているPHPやVue.jsで探しましたが、
各プロジェクトをざっくり見て、やっぱ無理。。というのを数ヶ月おきにしつつ、
ドキュメントと雰囲気がめっちゃ親切そうな
“Joomla”というプロジェクトにチャレンジすることにしました:star:https://github.com/j
PHPでフレームワークを使わずに掲示板アプリを作ってみる④ ログイン画面
# はじめに
※自身の学習を記事に投稿することでアウトプットするのが目的です。
「よくわかるPHPの教科書」のchapter6に書いてある通りにアプリを
作成していくので、私と同じような駆け出しエンジニアの皆さんは、
書籍を買ってアプリを作っていただいた方がわかりやすいかもしれません。# 使用しているエディタ、実行環境
* VS Code
* XAMPP* PHP7
* windows## ログイン処理を作成していく
この辺は、今まで作ったプログラムの応用で作れるので、
サクサクとコードを載せていきます。
“`
【php】連想配列を見やすくする工夫
なんてこともないことですが、
覚えてで忘れそうでもあるのでその備忘録がてら投稿します。list()の活用
DBからレコードをSELCTするとカラム名に値が入っている形になっていると思う。
それをそのまま活用してもいいが、読みやすいかといわれると微妙。
そこでlist()を活用すると少しでも読みやすくなるかなと思った。
例えばこんな感じ。“`php
$userData = [‘田中太郎’, ’25’, ‘man’, ‘東京都’];
list($name, $age, $gender, $address) = $userData;
“`ちょっとでも読みやすくなるコードを書いていきたいなという思いです。
phpでcsvを読み込んでyaml形式で出力する
### はじめに
csvを読み込んで、yaml形式で出力します。
コマンドを実行したときに、outputディレクトリにyamlファイルが生成されるところまでを作成します。今回はフレームワークは使用せず、生のphpでスクリプトを作成します。
githubに上げているのでどうぞ参考にしてください!
https://github.com/masahiro96848/php-yaml### ディレクトリ構成
“`
yamlCongig/
┣ input/
└ sample.csv
┣ output/
└ sample.yaml
│ vendor
Yaml.php(yamlに変換するスクリプト)
Map.php (csvの列を指定するクラス)“`
### 使用方法
1. inputディレクトリ下にcsvファイルを作成。
2. コマンド(php Yaml.php csvのファイル名(引数))を実行
3. outputディレクトリにyamlファイルが生成。## Yamlとは?
YAMLは構造化デ
Web制作会社2年目PHPerがライブラリに頼りつつ生PHPでオブジェクト指向チックにお問い合わせフォームを制作する
:::note warn
フレームワークは使用しておらず正しい実装とは限りませんので、あくまで参考として見てください。
:::# はじめに
はじめまして、[Orisend]()と申します。Qiita初投稿です。私はもうすぐPHPer3年目を迎えようとしています。
入社当初に比べて実装力は付いたと感じています。
しかしながら地方小規模制作会社のため先輩という先輩がおらず、自分の考える実装方法が正しいのかどうか不安に思い本記事を投稿しようと決めました。# なぜフレームワークを使わないのか
案件によってはLaravelなどのフレームワークを使用することはあります。ただWeb制作会社なので基本的にはコーポレートサイトや期間限定のサイトなどのごく小規模なものが多く、手続き的な書き方のPHPで済んでしまうような案件が多いです。
それでも拡張性や保守のしやすさを考えてオブジェクト指向チックになるよう心がけて、例のような実装をしています。
# 実装例
ほとんどが静的ファイルで構成されているお問い合わせフォーム付きサイトを制作すると仮定する。
なるべく拡張しやすい実装にする。
ルー
[メモ]docker環境のPHPでPostgreSQLを使う際にcould not find driverが出る時の対応
## 対処法
DockerFileに追記
“`
RUN apt-get update && apt-get -y install libpq-dev
RUN docker-php-ext-install pdo_pgsql
“`
## 参考
https://chusotsu-program.com/docker-could-not-find-driver/
未経験者が家事・育児しながらLaravelでポートフォリオを作成し、AWSでデプロイしてみた
# 0.はじめに
今回実務未経験者が転職活動のために、ポートフォリオとしてWebアプリを作成しました。
Webアプリの紹介や作成過程などを**学習背景やバックグランドも含めて**記載しますので、似たような境遇の方やこれからポートフォリオを作成しようと考えている方に参考にして頂けたら幸いです。# 1.自己紹介
32歳、元地方病院勤務の理学療法士
(前職では日々の業務に加え後輩教育・担当病棟チームのサブリーダー、実績管理、各管理書類の最適化、マニュアル管理、研究・学会発表、勉強会開催を経験)
既婚、3歳の子持ちで**育児・家事全般をメインで実施**(パパ育休プラスで計8ヶ月取得)・・・・男です。
料理・お菓子作り(というかおいしいものを食べる事)が趣味# 2.学習期間と背景
本格的にプログラミングを学習したのは2021年2月あたり。当時は子育ての合間や、子供が寝てから少しずつyoutubeや教材を始めました。情報、IT系学校・学部未就学のため何もわからない状態で初めはHTML・CSSなどの学習。
1日数時間を継続し、7月くらいにはデザインから一通りコーディング・レスポンシブ
PHPで時刻(00:00:00)を秒に変換する方法
##はじめに
仕事柄、頻繁に時刻であったり記録(●●分●●秒など)を扱う機会が多いです。
PHPで時間(時刻)を計算するには、UNIXタイムスタンプの値を操作することで求めることができますが、「時刻じゃなくて記録(36時間24分56秒などもあり)なんだよな~」、「一度秒にしてから四則計算してこんなことをしたいんだよな~」と思うことが多々ありました。
大したことは全くしていませんが、誰かの参考になれば幸いです。
##時間(00:00:00)から秒へ変換
“`php:php
// 時間から秒へ変換(00:00:00→00000秒)
function hour_to_sec(string $str): int
{
$t = explode(“:”, $str); //配列($t[0](時)、$t[1](分)、$t[2](秒))にする
$h = (int)$t[0];
if (isset($t[1])) { //分の部分に値が入っているか確認
$m = (int)$t[1];
} else {
$m = 0;
Twitter API v2 を使い php でツイート検索
# はじめに
twitter api v2 で ツイートを投稿するとうまくツイートできない。
よってツイートする場合は cowitter を使う。検索するときは abraham/twitteroauthを使う。
参考
https://twitteroauth.com/
https://qiita.com/ichii731/items/40b8c837028e7cef13d4
https://labo.kon-ruri.co.jp/twitter-api-v2-search-tweets/# 制限
1アプリあたり
450回/15分# インスコ
“`
composer require abraham/twitteroauth
“`“`
use Abraham\TwitterOAuth\TwitterOAuth;//中身
//v2ならベアラートークンを管理画面から取得できる
$bearer = ‘AAAAAAAAAAAAAAAAAAAAAxxxxxxxI’;$twi = new TwitterOAuth(
config(‘app.twitter
可変長引数でディレクトリ、ファイル名を結合する
phpでディレクトリを複数結合してパスを取得するfunctionを作りました。
“`php
function __getPath() {
return preg_replace(‘/\\/+/’, ‘/’, implode(‘/’, array_filter(array_map(‘trim’, func_get_args()), ‘strlen’)));
}
“`使用例
“`php
echo __getPath(‘/’, ‘/images/common/’, ‘logo’, ‘thumb_logo_bsquare.svg’);
“`結果
“`
/images/common/logo/thumb_logo_bsquare.svg
“`引数にnullやスペース、スラッシュが複数入っていても大丈夫です。
“`php
echo __getPath( null, ”, ‘ ‘, ‘///images/common/’, ‘logo’, ‘thumb_logo_bsquare.svg’);
“`結果
“`
/images/common/log
【調査】PHPのクロージャ(無名関数)の仕様
Laravelのindex.phpを順番に読んでいたらクロージャ(無名関数)を知らないと何やっているのかわからないコードが出てきたのでPHPの公式を参照しながら調査しました!
https://www.php.net/manual/ja/functions.anonymous.php
# 無名関数(クロージャ)とはそもそも何か?
>無名関数はクロージャとも呼ばれ、関数名を指定せずに関数を作成できるようにするものです。
“`php:クロージャの例
spl_autoload_register(function ($class_name) {
include $class_name . ‘.php’;
});
“`
上の例はcallable型の引数に、コールバック関数としてクロージャを渡している例です。クロージャはcallable型の引数に使えるだけではなく、変数の値として使用することもできます。
変数の値として使用する場合は定義したクロージャを自動でClosureインスタンスに変換します。
このClosureクラスはクロージャそのものを表すクラスでクロージャの設定を少し変
GETとPOSTの違い
# はじめに
Laravelでコードを書くときに先輩からこの2つ説明できる?って聞かれてすぐに答えられませんでした。
いざ言われると意外と話せないことがあるのでこの記事を書くことにしました。# 使う場面
“`GET“`は***情報を取得する時***に使います。
何か情報を検索したり取得するために使います。仕様で安全なものとなっていて
読み取り専用な機能に使うメソッドにみたいです。“`POST“`は***指定したリソースを実装した機能に従って処理をする機能***で
登録処理や更新処理などに使うメソッドです。ex)
DBの登録
Qiitaなどの記事投稿
新規ユーザー登録
新たに情報を加えるなどです。
# 終わりに
ざっくりですが上のような違いがあるみたいです。
もっと詳しい情報は下の資料を読んでみてください。# 資料
https://qiita.com/kanataxa/items/522efb74421255f0e0a1#:~:text=GET%E3%81%AF%E3%83%AA%E3%82%BD%E3%83%BC%E3%82
PHPでフレームワークを使わずに掲示板アプリを作ってみる③ DB登録
# はじめに
※自身の学習を記事に投稿することでアウトプットするのが目的です。
「よくわかるPHPの教科書」のchapter6に書いてある通りにアプリを
作成していくので、私と同じような駆け出しエンジニアの皆さんは、
書籍を買ってアプリを作っていただいた方がわかりやすいかもしれません。# 使用しているエディタ、実行環境
* VS Code
* XAMPP* PHP7
* windows## 確認画面にセッション情報を保存して表示する。
“`
【PHP】バルクインサートのためのグループ番号を自動生成する
システムを構築する際には、データを一括登録したいという要望を受けることがよくあります。そのシステム構築にはcsvデータやExcelデータなどを読み込み、DBテーブルにインポートしていくという流れで実装していきます。
そして、DBテーブルに登録していく場合、自分はよく**バルクインサート**を用います。バルクインサートとはinsert文一つで複数のデータ行を登録できるというもので
“`sql
insert into trn_records values(1,1,”hoge”),(2,1,”fuga”),(1,2,”hoge”)…………;
“`こんな感じで記述していきます。なぜ、このバルクインサートを活用するかといえば、もし登録データにエラーなどが生じた場合に処理を中断してくれるからで、これがプログラム内でinsert文を行数分繰り返したりすると、エラーが生じた場合に、その時点で中断されます。なので、次からどのデータを入れていけばいいのかわからない、という事態に陥ることがあります。
ですが、このバルクインサートにおいて大きな問題点があります。それは**グループごとのシーケンス
PHPでのcurlリトライ。エラー番号やメッセージで判定する。
## 概要
API通信では、HTTPのレスポンスがエラーとなり失敗してしまうことがあります。
API通信を再度実行することで、復帰ができる可能性がある場合、curl実行のリトライが有効でしょう。本記事では、実際にリトライ処理を実装した際に参考にした文献と、追加で検討した内容について述べます。
## 結論
→[cURL retry in PHP](https://stackoverflow.com/questions/6080369/curl-retry-in-php)
– 下記判定により、リトライをするかどうかを判断する。
– PHPの標準ライブラリにある`curl_errno`を用いてエラー種別を確認。
– (採用)PHPの標準ライブラリにある`curl_error`を用いてエラー文言を確認。## エラー文言をリトライ処理の判定に組み込んだ理由
**`TCP connection reset by peer`のエラーメッセージが返される場合にリトライを行う**実装にしたかったので、そのエラーメッセージが返ってくる時のエラー番号で判定しようと考えていました。
WordPressの記載されるURLを少し短くする
## なぜ、Wordpressはすべて絶対URLなの?
その理由はわかりません。
同一サイトを同一ドメインだけで運用するのであれば、絶対URLである必要はないわけです。
いくら defrate やら gzip やら br 圧縮が効いたとしても、URL記述文も削減できます。
## どの変換をするの?
“`convert.txt
https://qiita.com/drafts/f9d8e18ff9166ee09d73/edit↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓↓
/drafts/f9d8e18ff9166ee09d73/edit
“`こうするだけで、大量に記載されるスキーマとホスト名を節減できます。
## 多分これでいけます
functions.php の適当な所に記述してみてください。
“`functions.php
function urlshort($buffer) {
$search = array(
‘/href=”https?:\/\/’ . $_SERVER{‘HTTP_HOST’} . ‘/i’,
‘/href=\’https?:\
LaravelでMockeryを使った試験の話
サービスを試験する時、試験対象サービスから別の連結するサービスがあったとします。
その時はどう試験しますか?
以降の連なるサービスを含めて試験を行うというのは変ですね。
Unit試験は自己完結が範囲だとか愚行します。
以降のサービスに不具合があった場合にはこのサービスの試験がNGになるのは変です。
つまりは以降のサービスをブラックボックスにできる方法がベストです。
次のサービスに引き渡す値の結果が想定した結果を戻るだけでいいのです。これを解決するのにMockery(mock)を使います。

# mockとは
mockとは… 辞書で調べるとこんな感じです。まがいの、偽りの、まねごとの
https://ejje.weblio.jp/content/mock
mockオブジェクトとは本来のオブジェクトではなく想定の結果を返すオブジェクト
【Laravel】CSVファイルのデータインポート&エクスポートする方法
Laravel でテストケースを書く際にCSVファイルのデータを挿入する機会があった。その際は、Seederファイルを作成して、そのテストケース用のデータを挿入した。しかし、実際に利用するCSVファイルからデータを挿入する方が早いと思ったため、今回その機能を実装してみることにした。
また、挿入したデータをCSVファイルとして出力できたら、相互的にデータのやりとりができると思い、CSVファイルのエクスポートも実装してみた。
まずは、CSVファイルファイルをインポートし、データを挿入することから行う。
# CSVファイルからのインポート
処理の流れとして、フォーム欄からCSVファイルのアップロードを行、CSVファイルをストレージに保存する。その内容をもとにコレクションを作成し、データベースに挿入するという流れで実装する。
まとめると、以下のようになる。**処理の流れ**
①フォーム欄からCSVファイルの取得
②取得したCSVファイルをコレクションに置き換える
③置き換えたコレクションに対して不正なデータがないかの確認
④置き換えたコレクションを配列にしてデータベースに挿入#