- 1. LaravelをMacにインストールしてみよう!
- 2. WordPress カスタムフィールドプラグイン「smart custom fields」の使い方メモ
- 3. Rim fdraw As require ’pop->File->Draw’
- 4. DVWA(XXS:DOM)全レベルの脆弱性について
- 5. 【PHP8】もう`strpos($haystack, $needle)!==false`って書かなくていいんだ
- 6. WordPress固定ページに文章を予約公開する
- 7. これはサンプルです
- 8. Brefを使って完全サーバレスな、Symfony + Vue.js + Aurora Serverless製TODOリストを作る
- 9. 魔法のようなLaravelも素のPHPに始まり素のPHPに終わる。Laravelのライフサイクルを簡単に解説。
- 10. MySQL server has gone away の時は wait_timeout
- 11. 【Laravel】引数でタイプヒントしただけでインスタンスがもらえるのはなぜ?Laravelの魔法を解明してみる。
- 12. 【Laravel】サービスコンテナとは?2つの強力な武器を持ったインスタンス化マシーン。簡単に解説。
- 13. macOSでLaravelの環境構築でつまずいた
- 14. 三段論法でPHPは語れない
- 15. PHP7.3以降でAsia/TokyoでUTCとの時差が9:18:59になることがある
- 16. php.ini 内で環境変数を参照した設定ができる
- 17. AWS Cloud9でPHPのコード整形をしたい
- 18. openshift4.3でlaravel+MariaDBする
- 19. 自動でcomposer updateしてPull Requestを作るGitHub Actionsを作った
- 20. laradock環境下でexif extensionが使えない罠
- 21. cURLを使ってみた
LaravelをMacにインストールしてみよう!
#LaravelをMacにインストールしてみよう!
##概要
macOSにローカル開発環境としてLaravelをインストール公式サイト
https://readouble.com/laravel/6.x/ja/installation.html##前提
■環境
macOS HighSierra 10.13.16
Homebrew 2.2.9
Composer 1.9.3
PHP 7.4.3
Laravel 7.0.8■インストール済みソフト
Homebrew(macOS用パッケージマネージャー)
>日本語サイト:[Homebrew](https://brew.sh/index_ja)
>インストール参考記事:[Homebrew使い方まとめ](https://qiita.com/vintersnow/items/fca0be79cdc28bd2f5e4)##準備
■Composerインストール
PHP用ライブラリ依存管理ツールをインストール“`
$ brew install composer
“`>参考記事:[PHPのライブラリ
WordPress カスタムフィールドプラグイン「smart custom fields」の使い方メモ
#Wordpress カスタムフィールドプラグイン「smart custom fields」の使い方メモ
##ちょっと前置き
今までは[Advanced Custom Fields](https://www.advancedcustomfields.com/)を使っていて問題はなかったのですが
オプションページ、繰り返し機能が有料版にしかないため有料版を購入しようかと調べていたら
無料かつオプションページ、繰り返し機能が付いているプラグインがあったので使い方を調べつつ
自分用のメモとして書いていきます。実行環境
Windows 10
Xampp|種類|バージョン|
|:—————–:|:——————:|:——————:|
|php|7.3|
|Wordpress|5.3##とりあえずインストール
プラグインの新規追加から「smart custom fields」を検索
![smart custom fields.png](https://qiita-image-store.s3.ap-northeast
Rim fdraw As require ’pop->File->Draw’
#ファイルの有無を調べなければインストール
“`
Sik pop @popのインストール
echo Sik pop @こうすれば同時にログも取れて安心(あればtrueなければfalse)
“`“`
Rim require “pop” @ライブラリの取り込み
Rim fdraw As require “pop->file->draw”
“`Rimはファイル自身。requireは文字列の名前空間を探す。asは別名を作成
“`
@代入にはset簡単でしょ
n set loop t of range 10 to if t->mod 2 = 1:{1,t->tostr}:{2,t->tostr}
call T t->add1 n 0@メソッド定義
Trait T
bind f h m n = h->each->(m)->append n
Trait end@メソッド定義
Method T extends Trait
@めんどくさけりゃusing ? repeat $だぜ!
using bind repeat $
$add1 h m = f h m 1 @h->each
DVWA(XXS:DOM)全レベルの脆弱性について
## 前提
– kali linux環境がある
– [DVWAのセットアップ済み](https://qiita.com/KPenguin/items/7e4f1c428c3dadf8591c)
– [初級レベル理解済み](https://qiita.com/KPenguin/items/983348dace1527ef9963)## 目標
– 脆弱性の理解を深める。## 手順概要
– 大まかな挙動を把握する
– コードを見て脆弱性をみつける
– コードの脆弱性を攻撃する## 内容
###挙動の把握
– ボタンを押すとGETリクエストが飛ぶ
– クエリにdefault=hogeが乗っかる
– そのクエリをもとにoptionタグへ値が転写される(下図)
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/584889/85b9c412-ed2f-e4e6-a07b-47012a670069.png)### コードを確認
#### low
– 特に設定なし。
– scriptを差し込
【PHP8】もう`strpos($haystack, $needle)!==false`って書かなくていいんだ
ある文字列中に特定の文字列が存在するかを調べる方法として[strpos](https://www.php.net/manual/ja/function.strpos.php)が存在します。
しかし、そもそもstrposは『ある文字列中で特定の文字列が何文字目に出てくるか』を調べる関数であり、第一に使用目的が異なる関数です。
そしてこちらも有名な話ですが、先頭が一致すると0が返ってくるので、緩やかな比較ではfalseと区別されません。
PHPのよくある落とし穴のひとつです。“`php
if(strpos(‘放課後アトリエといろ’, ‘アトリエ’)){
echo ‘”放課後アトリエといろ”には”アトリエ”が含まれる’; // 表示される
}if(strpos(‘放課後アトリエといろ’, ‘放課後’)){
echo ‘”放課後アトリエといろ”には”放課後”が含まれる’; // 表示されない!!
}if(strpos(‘放課後アトリエといろ’, ‘放課後’) !== false ){
echo ‘”放課後アトリエといろ”には”放課後”が含まれる’; // 表示される
}
WordPress固定ページに文章を予約公開する
記事を予約投稿するのではなく、すでに公開している記事に文章を予約し公開するための方法。
特定の時間に文章を追加表示する。ムダにページを増やさずにリアルタイムな更新が可能です。
利用例:株式[投資](https://www.keibasite.com/)やニュースを1ページ内で順次表示するなど
“`php:page.php
= ‘2020/03/08 13:15:00’ ) { ?>これはサンプルです
ここに文章を記述します
“`
Brefを使って完全サーバレスな、Symfony + Vue.js + Aurora Serverless製TODOリストを作る
[SymfonyとVue Routerを使ってTODOリストを作ってみました](https://qiita.com/ippey_s/items/c8274bd6d8ea4ad24a43)。せっかくなので[Bref](https://bref.sh/)を使って完全サーバレスにしてみました。
## Brefとは
BrefとはAWS Lambda上でPHPを動作させるためのもろもろの設定を楽にしてくれるCLIです。Brefを利用するためには、AWSアカウント、[aws-cli](https://aws.amazon.com/jp/cli/)、[serverless framework](https://serverless.com/)が必要となります。## 構成
![構成.001.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/9882/3889a4bc-c64d-3c06-c4be-9abd8161ca5f.png)
| サービス | 内容 |
|—|—|
| Lambda | PHPを実
魔法のようなLaravelも素のPHPに始まり素のPHPに終わる。Laravelのライフサイクルを簡単に解説。
# はじめに
![Untitled Diagram.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297693/a570d4b1-3c35-6284-5ed9-cf8f6e68d564.png)
普段Laravelでアプリケーションを実装するときは
コントローラでリクエストを受け取り、
コントローラでレスポンスを返却するまでの範囲しか
あまり意識していませんでした。ですが、実際には
WEBサーバがHTTPリクエストを受け取ってから
コントローラに処理が渡されるまでの間や、
コントローラからレスポンスを返却してから
WEBサーバがHTTPレスポンスを送信するまでの間
にはいろいろと処理が行われているはずです。・`/public`ディレクトリに実際のHTMLファイルはないけどなぜルーティング処理されるんだ?
・どこの誰がどうやって処理対象のコントローラを特定してくれているんだ?
・あの便利なRequestインスタンスはいつ誰が作って渡してくれているんだ?
などなど
普段意識していなかった
**
MySQL server has gone away の時は wait_timeout
*connect_timeout と毎回間違えるのでメモ・・・*
バッチ処理などで下記のエラーが出て MySQL との接続が切れた場合。
“`
HY000 2013 MySQL server has gone away
“`タイムアウト系の設定で関係があるのは **wait_timout**
# 設定値の確認
“`sql
show global variables like ‘wait_timeout’;
“`“`
MariaDB [(none)]> show global variables like ‘wait_timeout’;
+—————+——-+
| Variable_name | Value |
+—————+——-+
| wait_timeout | 10 |
+—————+——-+
1 row in set (0.01 sec)
“`# 設定変更
“`sql
set global wait_timeout = 120;
“`global
【Laravel】引数でタイプヒントしただけでインスタンスがもらえるのはなぜ?Laravelの魔法を解明してみる。
# はじめに
Laravelを使ってアプリケーションを実装するうえで、
最も便利だと感じる機能が、「コンストラクターインジェクション」です。
[Laravel 6.x コントローラ:コンストラクターインジェクション](https://readouble.com/laravel/6.x/ja/controllers.html#dependency-injection-and-controllers)クラスのコンストラクタの引数で、特定のクラスを型宣言しておくだけで、
自動的に引数としてそのクラスのインスタンスを渡してくれるという機能です。これには、
サービスコンテナの「依存解決」という機能が利用されています。サービスコンテナとは何なのか?
依存解決とは何なのか?
についてはこちらの記事で解説しています。
[【Laravel】サービスコンテナとは?2つの強力な武器を持ったインスタンス化マシーン。簡単に解説。](https://qiita.com/minato-naka/items/afa4b930a2afac23261b)先にこちらの記事を読んで、サービスコンテナの概要につ
【Laravel】サービスコンテナとは?2つの強力な武器を持ったインスタンス化マシーン。簡単に解説。
# はじめに
サービスコンテナは、
Laravelのコアとなる機能で
Laravelのめちゃくちゃ便利で魔法のような仕組みを
実現してくれているものです。しかし、普段Laravelを使っていても
簡単なアプリケーションを作るうえではあまり意識しないところかもしれません。
(意識しなくていいようになってる)このサービスコンテナについて理解すると、
より便利に自分でカスタマイズしたりできるし、
何より面白いです。Laravelのサービスコンテナとは何なのかについて
調べましたので、簡単に解説します。# サービスコンテナとは
サービスコンテナとは、
一言でいうと
「クラスをインスタンス化してくれるマシーン」
というイメージ。
![Untitled Diagram-Copy of Page-3.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/297693/1e9e4755-8b17-8a48-e888-08ce20a65e97.png)具体的なコードで見てみます。
ClassAをインスタ
macOSでLaravelの環境構築でつまずいた
macOSでLaravelの開発環境を構築した時に、引っかかった箇所とその解決方法です。
いくつかのサイトやQiitaの記事を参考にしたので、同じようなパターンでハマった人がいたら参考にしてみてください。##使用環境
– macOS Catalina
– PHP version 7.3.8
– composer version 1.9.2
– Laravel installer 3.0.1##やったこと
下記を書いている方と奇跡的に開発環境が同じだったので、書かれている内容を踏襲して実行しました。
[macOS CatalinaにしてからLaravelの環境設定が詰まった](https://qiita.com/michimoy/items/73834c07f425a55ee552)一通り良さそうなのでLaravelのプロジェクトを作ってみる
“`
$ laravel new sampleApp
“`エラー
“`
[InvalidArgumentException]
Script “post-i
三段論法でPHPは語れない
皆さんは三段論法という 絶対法則 をご存知だろうか?
# 【三段論法とは】
> 大前提(主に普遍的な法則)と小前提(個別の単なる事実)から結論を導き出す推論方法。
> 簡潔に説明すると以下のような論法である。
>
> AはBである。
> ↓
> BはCである。
> ↓
> よってAはCである。
>
> 「A」と「C」という元々直接的には関係しない事柄を、両方と関連性のある「B」という事柄を用いて論理的に結びつけることができる。
> 三段論法の有名な例としては以下の文が挙げられる。
>
> ソクラテスは人間である。
> ↓
> 全ての人間は死すべきものである。
> ↓
> ゆえにソクラテスは死すべきものである。
>
>
> 上述の説明に当てはめると、「ソクラテス」はA、「人間」はB、「死すべきもの」はCに該当する。
> 「ソクラテスは人間である」という小前提と「全ての人間は死すべきものである」という大前提により、「ソクラテスは死すべきものである」という結論が導き出されたのである。https://dic.nicovideo.jp/a/%E4%B8%89%E
PHP7.3以降でAsia/TokyoでUTCとの時差が9:18:59になることがある
下記のようなコードで検証。
“`php
setTimezone(new DateTimeZone(‘Asia/Tokyo’));
var_dump($zero->format(‘Y-m-d H:i:s’)); // string(19) “0000-01-01 09:18:59”$y1887 = new DateTime(‘1887-01-01’, new DateTimeZone(‘utc’));
$y1887->setTimezone(new DateTimeZone(‘Asia/Tokyo’));
var_dump($y1887->format(‘Y-m-d H:i:s’)); // string(19) “1887-01-01 09:18:59”$y1888 = new DateTime(‘1888-01-01’, new DateTimeZone(‘utc’));
$y1888->setTimezone(new Dat
php.ini 内で環境変数を参照した設定ができる
docker-composeで開発環境を構築していて、
.env に各コンテナ名の情報を定義しておき
docker-compose.yaml の env_fileに読み込ませ
各コンテナ間の疎通に環境変数に定義したコンテナ名を利用したりしていた。“`docker:.env
#docker-composeプロジェクト名定義
COMPOSE_PROJECT_NAME=projecta
#php(web)コンテナ名
WEBCONTAINER=projecta_web_1
#mysqlコンテナ名
DBCONTAINER=projecta_mysql_1
“`“`docker:docker-compose.yaml
env_file:
.env
“`こうしておくと、phpのスクリプト内で環境変数を使ってDBコンテナを指定できる
“`php:php
// DB接続先定義
define(‘DB_HOST’, getenv(“DBCONTAINER”));
“`phpのセッション保存用にmemcachedのコンテナも立ち上げていて
こちらはcompose内で
AWS Cloud9でPHPのコード整形をしたい
プログラミングは良いロジックを書くのも大切ですが、まずは読みやすいコードを書くことを心掛けましょう。
読みやすいコードとは、コードを書いた自分以外でも読めるようなコードです。
しかし、手作業で空白を調整するのは少し手間だと思います。
そこで、ファイルを保存したときに自動で調整するように設定してみましょう。
以下の手順を試してください。# 設定の手順
(1) PHP-CS-Fixerをダウンロード
PHP-CS-Fixerとは、PHPの標準のコーディング規約に則り、ソースコードを調整してくれるツールです。
https://github.com/FriendsOfPHP/PHP-CS-Fixer“`console
$ wget https://cs.symfony.com/download/php-cs-fixer-v2.phar -O php-cs-fixer
“`(2) PHP-CS-Fixerをインストール
“`
$ sudo chmod a+x php-cs-fixer
$ sudo mv php-cs-fixer /usr/local/bin/php-cs-
openshift4.3でlaravel+MariaDBする
# はじめに
前回までで基本的なLaravelを動作させることができましたが
やっぱりDB無いと話になりませんよね。ということで前回の環境にMariaDBを追加します!
前回のお話はこちら
[openshift4.3でlaravelする](https://qiita.com/imp555sti/items/ad530f671015b64b0af0)前提
- CODEREADY CONTAINERS 1.6が起動していること
- PHPプロジェクトでLaravelが正常に動作していること# MariaDBの追加
ProjectにMariaDBを追加していきます。
+Addから「From Catalog」を選択しフィルタで「MariaDB」と入力します。![2020-03-08 (12).png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/324255/ee2d80e5-a653-5f6c-bd22-6178b972eef3.png)
![2020-03-08 (1).png](htt
自動でcomposer updateしてPull Requestを作るGitHub Actionsを作った
composer使ってるプロジェクトなら何でも使えるはず。
https://github.com/kawax/composer-update-action
https://github.com/marketplace/actions/composer-update-actionPHP7.4が下限なので7.4ではインストールもできないプロジェクトではcomposer.jsonでconfig.platformの設定が必要かも。
プライベートリポジトリでも使える。プランごとに月に何分までの制限があるけど。
## 使い方
`.github/workflows/update.yml`を作るだけ。UTCの0時は日本時間で9時。好きなように変更する。
“`yml
name: composer updateon:
schedule:
– cron: ‘0 0 * * *’ #UTCjobs:
composer_update_job:
runs-on: ubuntu-latest
name: composer update
steps:
laradock環境下でexif extensionが使えない罠
数日間嵌ったのでメモ?
laradockで画像のアップロード機能を実装していたが、どうしても画像が横向きに表示されてしまう…
画像の向きに関して、こちらに分かりやすい解説がありました。なるほど…
https://qiita.com/k-holy/items/2ed10bdcf53181bb695d
>
EXIFタグのOrientationは、カメラで撮影した時に画像の向きに関する情報をファイルに埋め込むことで、アプリケーション側で表示する際にその情報を見て向きを補正するための仕様です。
しかし、これが設定された画像ファイルをサーバ側で受け取って縮小する際、GD等による加工の過程でEXIFタグの情報が失われてしまうために、画像の向きが補正できなくなってしまうわけです。
なので、まず exif_read_data() を使ってEXIFのOrientation値を読み込み、それに併せてGD関数で画像を反転/回転させた後、縮小します。?こちらを参考にintervention imageインストール
https://blog.capilano-fw.com/?p=1574#orientat
cURLを使ってみた
#はじめに
案件で外部APIのシステムにアクセスするためのcURLのコードを書いたので、合わせて今まで書いたことがなかったのでcURLの使い方をメモしておきます。#使い方
##基本的な関数は4つ
1. `curl_init($URL)`
– cURLのセッションを初期化する。引数にはリクエスト先のURLを渡してあげるます。
2. `curl_setopt()`
– 転送用の様々なオプションを設定することができる(例: CURLOPT_POST←POSTメソッドで送信する)
3. `curl_exec()`
– curl_exec — cURL セッションを実行する
4. `curl_close()`
– cURL セッションを閉じる##基本的な関数の使い方
以下が簡単な使い方である“`php:cUrl.php