- 0.0.1. PHP 連想配列の値とキーを取得する方法
- 0.0.2. ※学習用メモ デザインパターン:Decorator編[PHP]
- 0.0.3. PHPでの入力フォーム作成
- 0.0.4. 最近やったことのメモ(MVVM, asyncとdefer)
- 0.0.5. HHVM(proxygen) 環境を構築してみよう
- 0.0.6. 技術備忘録【composer・環境変数設定】
- 0.0.7. Basic認証がある環境でBearerトークンを使用する(Sample: nginx+PHP Laravel)
- 0.0.8. 【PHP】BacklogのAPIを使って課題を取得&更新してみる
- 0.0.9. テスト実行時に DB の Port Listen を待つ
- 0.0.10. php5.4.x系からphp7.x系への作業まとめ
- 0.0.11. MVCモデルとは
- 1. MVCモデルとは
- 1.1. Model
- 1.2. View
- 1.3. Controller
- 1.3.1. AtCoderの迷路を「深さ優先探索」とPHPで解く
- 1.3.2. PHPでShift-JISのコードポイントを確認する
- 1.3.3. 特定のディレクトリ配下のファイル名を全部取得する
- 1.3.4. CIサービスはもういらない!?github actionsでphp-cs-fixerを使ってみる
- 1.3.5. 【Azure】の【Azure App Service】を使ってみた!
- 1.3.6. get,findなどの返り値表
- 1.3.7. 【PHP】標準入力で受け取った、空白を挟んだ複数の値をそれぞれ変数に入れる【初心者】
- 1.3.8. 投稿機能を作る
- 1.3.9. モデルの編集
- 1.3.10. コントローラーの編集
- 1.3.11. リレーション先の要素のレコードを取得する
- 1.3.12. リレーション先の取得
PHP 連想配列の値とキーを取得する方法
# 目的
– 連想配列に格納された値とそのキーを取得する方法をまとめる。
# 前提情報
– 下記サービスを用いて動作を確認した。
– [https://paiza.io/ja](https://paiza.io/ja)
– 超基礎の内容であるが理解できていなかったのでまとめる。# 詳細
– 下記のようにforeach文を使用することで値とキーを取得する事が可能である。
“`php
‘こんにちは’,
‘str2’ => ‘おはようございます’
];foreach ($strList as $key => $value){
echo “キーは $key” . “\n”;
echo “値は $value” . “\n”;
}
?>
“`– 上記のコードを実行すると下記のように出力される。
“`
キーは str1
値は こんにちは
キーは s
※学習用メモ デザインパターン:Decorator編[PHP]
# Decoratorパターンとはどういうものか
Decoratorとは**装飾者**という意味です。
このパターンは既存のオブジェクトを新しいDecoratorオブジェクトでラップすることで機能やその状態の拡張を実現します。
また、ラップされていることで、基の状態を維持する事につながり、1つのベースに対して状態のバリエーションを作り出す事も出来ます。>Decoratorパターンの方針は、既存のオブジェクトを新しいDecoratorオブジェクトでラップすることである。その方法として、Decoratorのコンストラクタの引数でラップ対象のComponentオブジェクトを読み込み、コンストラクタの内部でそのオブジェクトをメンバに設定することが一般的である。(wikipediaより)
[参考サイト]
https://ja.wikipedia.org/wiki/Decorator_%E3%83%91%E3%82%BF%E3%83%BC%E3%83%B3
https://www.ritolab.com/entry/132
https://qiita.com/i-tanaka730/ite
PHPでの入力フォーム作成
#PHPでの入力フォーム作成について
以下のような入力フォームをPHPで作成し、
別ファイルへ出力するようにした。![スクリーンショット 2020-12-03 20.20.14.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/794525/49907ce2-4028-3adc-c667-c57eb815977c.png)
ソースコード(ファイル名index.php)
“`
Document
HHVM(proxygen) 環境を構築してみよう
# HHVM構築
ひと昔前はHHVMを用意するのにも大変な時代がありましたが、
現在はDockerを利用して簡単に構築することができます。
今回は一からHHVM開発環境を作成してみましょう!HHVMのコンテナ自体はDocker Hubにて公式が公開しています。
[hhvm/hhvm-proxygen](https://hub.docker.com/r/hhvm/hhvm-proxygen/)
本番運用などを考えると、fastcgiで動かすメリットはあまりありません。
proxygenを利用することで、HHVM自体の管理機能やパフォーマンス面でもアドバンテージがあります。
(実際のコンテナ運用ライクな内容は別で紹介します。)GCP/AWSなどで運用する場合はhhvm-proxygen単体でも十分ですが、
今回はNginxをフロントに置き、upstreamでhhvm-proxygenに流す構成にします。
(log収集などもそちらの方が楽でしょう!)## HHVM container
まずはhhvm/hhvm-proxygen:latestを利用します。
“`dock
技術備忘録【composer・環境変数設定】
自分自身の学習記録として記録しています。
今回は「Composer」についてです。
![Logo-composer-transparent.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/568321/6bdfa09c-1987-c7ec-0aec-2701eeca8773.png)公式サイト:https://getcomposer.org/
composerはパッケージ管理ツールです。
どういう事かというと、
何かしらのWebサービス等を開発する際に、
先人達が開発した「ライブラリ」を使う事で、
素早くサービスを開発したり、機能を追加することが出来ます。※ライブラリって?
特定の機能を提供するコードをひとまとめにしたようなものを言いますしかしながら、そのライブラリ自体も様々なライブラリを組み合わせて作られていることも多く、
一つのライブラリのバージョンが異なる事で正常に機能しなくなってしまう事もあります。そこで、このcomposerを使用することで、
「ライブラリ同士の依存関係」を
Basic認証がある環境でBearerトークンを使用する(Sample: nginx+PHP Laravel)
これは[SOUSEI Technology アドベントカレンダー](https://qiita.com/advent-calendar/2020/st)3日目の記事です。
記事の内容は会社の業務とは一切関係ありません。## 前置き
セキュリティ的に良いとは言えないですが、まだ開発中で非公開だし、クローラやボットの巡回で画面が表示されたりするのを避けられれば良いやくらいのお手軽な手法として、今でもBasic認証は度々使われることがあると思います。
そんな他のアクセス制御かかかった環境にAPIを追加するようなケースでのお話なので、開発用の環境を想定しています。
結果的にRFCを無視しますので、所謂production(実運用している)環境でやるようなことではありませんよー、と前置きさせていただきます。**nginxのBasic認証の設定については、他に良い記事がたくさんありますので省略しています。**
## ざっくりまとめ
結論から言うと、ミドルウェア(nginx)の設定を変えるのが難しい(できない?)ので、Bearerトークンを送るHTTP headerを変える。アプリケー
【PHP】BacklogのAPIを使って課題を取得&更新してみる
業務でBacklogの課題を一括更新する要件があったので、APIを使って行った対応内容をまとめます。
一括作成に関してはAPIでもできますが、スプレッドシートを使う方法が楽なのでそちらを参考にしてください。
[Google スプレッドシートを使って、Backlogに課題を一括登録しよう | Backlog](https://support-ja.backlog.com/hc/ja/articles/360042820873-Google-%E3%82%B9%E3%83%97%E3%83%AC%E3%83%83%E3%83%89%E3%82%B7%E3%83%BC%E3%83%88%E3%82%92%E4%BD%BF%E3%81%A3%E3%81%A6-Backlog%E3%81%AB%E8%AA%B2%E9%A1%8C%E3%82%92%E4%B8%80%E6%8B%AC%E7%99%BB%E9%8C%B2%E3%81%97%E3%82%88%E3%81%86)
## 環境
PHP 7.3.11
Backlog API v2## 前準備
BacklogのAPIを使うにはいくつ
テスト実行時に DB の Port Listen を待つ
# 簡潔に
`wait-for-it` で特定の Port の Listen を待って、任意のコマンドを実行することができます
“`bash
$ ./wait-for-it.sh -s -t 60 db:3306 — php artisan test –testdox
“`# 対象読者
– テスト実行時に DB などの Port Listen を待つ必要がある
– 特に、 CI 環境で DB をコンテナで立ち上げるときなど
– 今は `sleep` でなんとなく待って凌いでいるけど、本質的な解決じゃないのでなんとかしたいと思っている以上の質問に全部 YES と回答した方
# wait-for-it とは
https://github.com/vishnubob/wait-for-it
– 特定のホストと TCP ポートが利用可能になるまで待つ機能をもった bash スクリプトです
– 利用可能になるまで待ったあと、任意のコマンドを実行できます
– 待つ時間の上限を指定できます ( `-t | –timeout` オプション )## In
php5.4.x系からphp7.x系への作業まとめ
最近久々にサーバーのリプレースに伴ってプログラムをphp5からphp7に上げる必要があり、再度調べたりしたので、今まであった修正を今後のためにまとめておきます。
ちなみに以下のような状況です。* 複数クライアントに展開しているASPの保守を担当
* フレームワークは基本的にはfuelphpを使用、でも他社作成のコードの保守を行うこともある
* 未だphp5環境のサーバーで動かしているクライアントがいるので、php5環境でも動作は保証したい
* でも、一部php7に上げているクライアントがいるのでphp7対応にする必要がある
* php5.4系からのアップグレードが多い# 新しいオブジェクトを参照渡しで代入できない
自社開発のコードでは出会ったことがないですが、外部ライブラリ使っているとよくあります。
以下のようなコード。“`php
class C {}
$c =& new C;
“``Parse error: syntax error, unexpected ‘new’ (T_NEW) in ***** ` と怒られます。
[下位互換性のないその他の変更](htt
MVCモデルとは
今回は僕自身の知見を深めるために基礎中の基礎であるMVCモデルについて書きたいと思います。
MVCモデルとは
MVCモデルとは、、、Model View,Controllerの頭文字から来ています。
Model
主にDBと連携しデータの操作を行うことができます。
基本的に1つのテーブルに1つのModelが存在します。View
Modelを表示することができます。
Controller
主にModelとViewを制御することができます。
ModelからDBにアクセスを行い、取得したデータをControllerで加工してViewに渡すことができます。
AtCoderの迷路を「深さ優先探索」とPHPで解く
36時間くらい前まで「クラスって何、わけわかんない!」って言ってた僕が、[AtCoderの深さ優先探索の迷路問題](https://atcoder.jp/contests/atc001/tasks/dfs_a)をPHPのクラスで解きました。ここに辿り着くまでにおよそ1日半かかりました。。これはもうダメだ、自分はプログラミング向いてないかも、放っておいて次の問題に行こうかなど考えました。
あとはプログラミングの動きをきちんと理解しておきたいので、ここでアウトプットします。問題は[こちら](https://atcoder.jp/contests/atc001/tasks/dfs_a)。
**注意!こちらの記事は適宜追記していきます。m(._.)m**
#実装!
##入力例
0行め:行の数 列の数
`s`スタート `g`ゴール `.`通れる道 `#`壁“`html:入力例2
10 10
s………
#########.
#…….#.
#..####.#.
##….#.#.
#####.#.#.
g.#.#.#.#.
#.#.#.#.#.
#.#.#.#.#
PHPでShift-JISのコードポイントを確認する
とある案件でShiftJISのコードポイントが確認したかったので、その際の処理を( ..)φメモメモ
大人の事情でPHP5.3とかいう微妙なバージョンだったけど、たぶん7系でも動くはず…“`php
$str= ‘あいうえお’;// 文字列を1文字ずつ配列に分割 (-1は無制限(デフォルト値)、PREG_SPLIT_NO_EMPTYは配列前後に入る空白文字の除外)
$chArray = preg_split(‘//u’, $str, -1, PREG_SPLIT_NO_EMPTY);foreach($chArray as $ch){
// UTF8→SJISに変換
$ch_SJIS = mb_convert_encoding($ch, ‘SJIS-win’, ‘auto’);
// SJISのコードを出力
echo bin2hex($ch_SJIS).PHP_EOL;
}
die;
“`
特定のディレクトリ配下のファイル名を全部取得する
“`php
$result = glob(‘/path/to/target/’ . ‘*’);
foreach ($result as $key => $value) {
var_dump($value);
}
“`
CIサービスはもういらない!?github actionsでphp-cs-fixerを使ってみる
本記事は、[サムザップ Advent Calendar 2020 #2](https://qiita.com/advent-calendar/2020/sumzap2) の12/3の記事です。
# はじめに
タイトル煽ってすみません(笑)github actionsを使って、php-cs-fixerでコードのオートフォーマットを試してみた記事です。
みなさんは、チーム開発でファイル毎にインデントや改行等コードフォーマットの違いで可読性の下がったコードに悩まされたり、お互いに異なるコードフォーマットで修正し合うループに陥ったりしたことはないでしょうか。
その解決のため、コードフォーマットの統一するべく、IDEや開発ツールの統一を図ろうとし、
「自分〇〇派なので!」
「開発効率が落ちる!」
と反対されたり、逆に自身が使い慣れたツールを手放さなければならなかったりして困ったことはないでしょうか。
はたまたこれらの解決に、gitのフック機能(クライアントサイド)を使おうとして、各自の環境に依存したり、個々の問い合わせに対応が必要になって手間が大きくなる予感をエスパー並みにヒシ
【Azure】の【Azure App Service】を使ってみた!
#はじめに
【Azure App Service(PHPバージョン)】ですがシンプルなPHPのみ、
複雑な環境設定はいらないなどのサイト公開するのに使うのが個人的にいいのかなと思ったりしています。サービスデプロイ時に何使うが適当かと思い、とりあえず使ってみよう!共有しよう!っといったものです。
こういうの個人で使う時『お金かかりすぎないかな〜〜〜』って思うのは私だけでしょうか?:tired_face:分からないことだらけなのでオススメなどありましたら、
優しく教えて頂けると感謝感激です。:bow:後自分的にとらえやすい言い方に変換しています。
ドキュメント見たい方のためにその場その場でリンク貼るようにしていますので許してください:bow:後、macでやってます。
#Azureとは?
『microsoft』さんが提供するクラウド上でサービスを運用するためのサービス。
[Azureとは何ですか?](https://docs.microsoft.com/en-us/azure/guides/developer/azure-developer-guide#what-is-az
get,findなどの返り値表
# find()
`App\Model::find(1)` の返り値は**Modelのオブジェクト**
# get()
`App\Model::where(‘id’,1)->get()` の返り値は**Collectionクラス**
(中身はModelのオブジェクト。ゆえに`foreach()`で回せば各々の値を取得できる。)# first()
`App\Model::where(‘id’,1)->first()` の返り値は**Modelのオブジェクト**
※もしなかった場合は`NULL`を返す
以下[tinker](https://github.com/laravel/tinker)(laravel用REPL)で実行した際の様子
“`
$ php artisan tinker
New version is available (current: v0.8.14, latest: v0.8.15)
>>> App\Model::find(1)
=> App\Model{#458
id: 1,
name: “モデル1”,
【PHP】標準入力で受け取った、空白を挟んだ複数の値をそれぞれ変数に入れる【初心者】
空白を挟んだ複数の値(例:2 3)を標準入力で受け取ってそれぞれを変数に入れたい。
自分が知ってるやり方は2つ
#####方法(1つ目)
“`hoge.php
//文字前後の空白や改行コードとか消して$numに代入
$num = trim(fgets(STDIN));//空白を区切りに配列に分割して代入
$array = explode(” “,$num);//配列の1つ目を変数に代入
$first = $array[0];//配列の2つ目を変数に代入
$second = $array[1];“`
#####方法(2つ目)
“`huga.php
//文字前後の空白や改行コードとか消して$numに代入
$num = trim(fgets(STDIN));//空白で区切って、それぞれ$firstと$secondに代入
[$first,$second] = explode(” “,$num);
“`このだいぶ短くなったほうは、「分割代入」っていうらしいです。
###補足(2020/12/3 更新)
※@il9437様からご指摘頂きました。あり
投稿機能を作る
モデルの編集
“`Artist.php
class Artist extends Model
public function followingArtist()
{
// このユーザがフォロー中のユーザのidを取得して、配列にする
$userIds = $this->followings()->pluck(‘users.id’)->toArray();
// このユーザのidもその配列に追加
$userIds[] = $this->id;
// それらのユーザが所有するアーティストを絞り込み、返す。
return Artist::whereIn(‘user_id’, $userIds);
}
“`コントローラーの編集
“`ArtistController.php
public function output()
{
/*————-自分だけのタイムライン—————–
リレーション先の要素のレコードを取得する
リレーション先の取得
“`Model.php
belongsTo(Artist::class);
}//そのユーザーが所有するアーティスト達を取得し、アーティスト達の user_id を全て取り出す。
public function work_artist_userid()
{
$artists = $this->artist()->get();
foreach ($artists as $artist){return $artist->u