- 1. (自分用)Flask_AWS_1(AWS仮想環境にPHP,MySQL,phpMyAdmin,Pythonのインストール)
- 2. 環境を汚さずに Composer を使いたい
- 3. PHPUnit 配列の順番は考慮・気にしないAssert
- 4. 学習日記8日目(2020/6/27)
- 5. Laravelアプリ同士をWeb APIで連携させるには
- 6. Laravel MySQL DBのカラムタイプを途中で変更する
- 7. Laravel MySQL DBのカラム名を途中で変更する
- 8. 【Laravel】グローバルスコープを用いてコード量を減らす
- 9. 【PHP】DateIntervalクラスで、あさってが「1日差」になっちゃった!?
- 10. Laravel開発用のDockerイメージできたのでシェアします。
- 11. Eccube で OutOfMemoryException が出た時にやってみたこと
- 12. 【SQL】3つのテーブルのリレーション方法
- 13. foreach と type=”radio” の共存の仕方
- 14. MacにPHP環境を(再)構築する & Webサーバー:Apacheの設定をする
- 15. CentOS とOSXでphp, fetch,javascriptの挙動が違う
- 16. 書籍「テスト駆動開発」をPHPで写経するためのDocker環境構築手順
- 17. phpの”->”を説明してみる。
- 18. PHP8.0.0α1がリリースされたのでさっそくJITの威力を体感する(した)
- 19. PHP gzip圧縮転送支援スクリプト
- 20. jsonのPHP、JSでのエンコードとか
(自分用)Flask_AWS_1(AWS仮想環境にPHP,MySQL,phpMyAdmin,Pythonのインストール)
# 項目
1. PHPのインストール
2. MySQLのインストール
3. PHPMyAdminのインストール
4. Pythonのインストール# 1.PHPのインストール
“`bash:ターミナル
# まずLinux仮想マシンに接続、ここを覚えてないなら1つ前のやつを見て
$ ssh -i ~/.ssh/FirstKey.pem ec2-user@(パブリックIP)# 管理者権限に変更
$$ sudo su# PHPをインストール
$$ yum install -y php# PHPの設定を変える前にバックアップを取っておく
$$ cp /etc/php.ini /etc/php.bak# viでPHPの設定変更
$$ vi /etc/php.ini
“`– `:set number`で行番号を表示
– `:520`で520行目に移動
– `i`にて記述モードにし、`error_reporting = E_ALL & ~E_DEPRECATED`という行を、`error_reporting = E_ALL & ~E_DEPRECATED & ~E_NOTI
環境を汚さずに Composer を使いたい
# 要約
* Docker には Composer イメージがあって Docker Compose から使うと便利
* [使い方とサンプルコード](https://github.com/SnowCait/docker-compose-composer-example)# Composer どうやって実行してますか?
PHP 開発に [Composer](https://getcomposer.org/) は必須です。
ではどうやって実行しているでしょうか。* ローカルで composer コマンドを使う
* ローカルにインストールする
* composer.phar をコミットする
* Docker コンテナで composer コマンドを使う
* PHP コンテナにインストールする
* 自前インストール
* Composer イメージを使ってインストール
* コミットされた composer.phar を PHP コンテナ内で使う
* Composer コンテナを使う
* Docker
PHPUnit 配列の順番は考慮・気にしないAssert
## 概要
配列(連想配列も含む)の順番は気にせず、要素は同じであることを検証するためのAssert
※ そもそも、順番も保証された上でのテストであったほうが良いというのも分かるのですが、今回はスコープ外とします
※ こんなAssertがあればいいなと作成したものなので「既にPHPUnitで用意されてるよ」などあればコメントお願いします?
## 本題
利用したいテストでこのTraitを使う想定でこんな感じで実装しました :pencil:
“`php
assertSame([
学習日記8日目(2020/6/27)
# 学習内容
– JavaScript基礎学習:Progateの学習コース全終了
JSの学習を終了してPHPやLaravelの学習に移っていきたいと思います。
# その他
– タイピング練習
– paizaのスキルチェックに挑戦参加しているサロンの方々がやっているのを目にし、気になったのでpaizaのスキルチェックやってみました。しかし、、**標準入力ってなんやねん!**という感じでそもそも入力値を変数等に代入できなくて積みました?
そんなこんなでfgets関数を使ったことがなかったので調べ、どうもfgets関数を繰り返し実行すれ入力を一行目から順に取り出せるらしいことがわかったので明日以降Cランクの問題にチャレンジしようと思います。今日はDランクの問題1問解いて終了です。
# 明日の予定
– UdemyでPHP&Laravelの学習
Laravelアプリ同士をWeb APIで連携させるには
オンプレで動く Laravel と、クラウドで動く Laravel を、Web API でシステム間連携させてみた話。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/990023f8-3c07-27a6-f225-7ed013663ad5.png)# やりたいこと
社内オンプレの給与明細APサーバにアクセスすると、クラウドの勤怠打刻APサーバのデータも取得し、給与明細と合わせて勤怠実績明細も表示できるようにする。
シーケンス図で書くと次のようになる。
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/807f5916-ea81-721f-c6df-ababbd270e2c.png)
明細表示例
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/236222/7727c
Laravel MySQL DBのカラムタイプを途中で変更する
# 目的
– Laravelにて新規作成後のDBのカラムタイプの変更方法をまとめる
# 実施環境
– ハードウェア環境
| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.5) |
| ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2 GHz クアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |– ソフトウェア環境
| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.3 | Homwbrewを用いて導入 |
| Laravel バージョン | 7.0.8 | commposerを用いてこちらの方法で導入→[Mac Laravelの環境構築を行う](https://qiita.com/miriwo/items/ad
Laravel MySQL DBのカラム名を途中で変更する
# 目的
– Laravelにて新規作成後のDBのカラム名の変更方法をまとめる
# 実施環境
– ハードウェア環境
| 項目 | 情報 |
| — | — |
| OS | macOS Catalina(10.15.5) |
| ハードウェア | MacBook Pro (13-inch, 2020, Four Thunderbolt 3 ports) |
| プロセッサ | 2 GHz クアッドコアIntel Core i5 |
| メモリ | 32 GB 3733 MHz LPDDR4 |
| グラフィックス | Intel Iris Plus Graphics 1536 MB |– ソフトウェア環境
| 項目 | 情報 | 備考 |
| — | — | — |
| PHP バージョン | 7.4.3 | Homwbrewを用いて導入 |
| Laravel バージョン | 7.0.8 | commposerを用いてこちらの方法で導入→[Mac Laravelの環境構築を行う](https://qiita.com/miriwo/items/adaa
【Laravel】グローバルスコープを用いてコード量を減らす
##はじめに
実装していてモデルのクエリに制約で何度も同じ実装することはありませんか。
そんな時はグローバルスコープというLaravelの機能のグローバルスコープを使って1回の実装で済むようにするのも1つの方法かなと思います。##グローバルスコープとは
>グローバルスコープにより、指定したモデルの全クエリに対して、制約を付け加えることができます。Laravel自身のソフトデリート機能は、「削除されていない」モデルをデータベースから取得するためにグローバルスコープを使用しています。独自のグローバルスコープを書くことにより、特定のモデルのクエリに制約を確実に、簡単に、便利に指定できます。
引用:[Eloquent:利用の開始 7.x Laravel](https://readouble.com/laravel/7.x/ja/eloquent.html)
グローバルスコープを1回の実装すれば特定のモデルのクエリに制約ができ、かなり便利です。
##グローバルスコープの実装
`Illuminate\Database\Eloquent\Scope`配下に適当なファイルを作成します。
【PHP】DateIntervalクラスで、あさってが「1日差」になっちゃった!?
# 環境
CentOS 7.6
PHP 7.1.20# 現象
PHPの [DateInterval クラス](https://www.php.net/manual/ja/class.dateinterval.php) は、
今日が 2020/01/01 とすると、2020/01/03 との日数差が
なぜか「1」で返る場合があります(2が欲しいのに。)“`php
$date1 = new DateTime(); //今日
$date2 = new DateTime(‘2020-01-03’); //あさって
$diff = $date1->diff( $date2 );echo $diff->days; // 1
“`# 原因
今日の `$date1 = new DateTime();` に現在時刻が含まれているからです。
その分、日数差が2日に届かず、1日となっているようです。例えば 現在時刻をクリアすれば、期待する「2」が得られます。
“`php
$date1 = new DateTime();
$date1->setTime(
Laravel開発用のDockerイメージできたのでシェアします。
これからLaravelを使って開発とかしていく予定だったので、すぐにスタートできるようにDockerでイメージ作りました。
同じ環境で開発してる方など、よかったら持ってってください。https://hub.docker.com/r/ryuki0529/webserver
##大まかなイメージ環境
– OS:CentOS 7.8
– サーバー:Apache 2.4.6
– PHP 7.4.7
– PHPMyAdmin 5.0.2
– Composer 1.10.7
– Laravel Installer 3.1.0
– Git 2.9.5
– データベース:mysql Ver 15.1 Distrib 10.4.13-MariaDB##注意点
`docker run`でコンテナ作るときに、`–privileged`と起動時のコマンドで`/sbin/init`を指定しないと`systemctl`コマンド周りが使えないので注意です。これで3時間ほどハマってしまいました。詳しくは下記の記事で説明されてます。
[CentOS7のコンテナでsystemctlを使うための方法](ht
Eccube で OutOfMemoryException が出た時にやってみたこと
“`php
$qb = $em->getRepository(‘Eccube\Entity\Order’)->createQueryBuilder(‘o’);
$qb
// query builder に関する処理 …
;$query = $qb->getQuery();
$result = $query->getResult();foreach($result as $Order) {
// Order に対する処理
}
“`
こうすると巨大なOrder オブジェクトに対して一度に処理することになりOutOfMemoryException が発生した。ので、
“`php
$qb = $em->getRepository(‘Eccube\Entity\Order’)->createQueryBuilder(‘o’);
$qb
// query builder に関する処理 …
;$query = $qb->getQuery();
$iterableResult = $query->iterate();for
【SQL】3つのテーブルのリレーション方法
# はじめに
こんにちは、takumi([@takumidiary](https://twitter.com/home))です。
タイトルの通り今回は3つのテーブルのリレーションをします。WEBサービスを開発している過程で3つのテーブルをリレーションしないといけない場面があったので調べながら実装しました。意外と簡単です。
# 環境
OS : `mac Catalina vaersion10.15.5`
ディベロッパーツール : `MAMP version 5.7`# 目次
[1. テーブルの準備](#1-テーブルの準備)
[2. リレーションする](#2-リレーションする)
[2-1. 方法1〜外部結合](#2-1-方法1外部結合)
[2-2. 方法2〜内部結合](#2-2-方法2内部結合)
[3. おわりに](#3-おわりに)#1. テーブルの準備
以下の3つのテーブルを準備します。
phpMyAdmin使いました。– userテーブル
– areaテーブル
– itemテーブル###userテーブル
| id | name |
foreach と type=”radio” の共存の仕方
# foreach (PHP)
~~~php
~~~####こう表示される
>ぶどうみかんもも# type=”radio” (HTML)
~~~html
~~~# ガッチャンコする
~~~php
~~~####こんな感じで表示される
>●ぶどう●みかん●もも##思ったこと
ベースをHTMLにして書いてるからPHPとして埋め込んで書くところをちゃんと指定して区別してやってあげないとね!って感じ
MacにPHP環境を(再)構築する & Webサーバー:Apacheの設定をする
# やりたいこと
MacにPHP環境を構築する。Macには始めからPHPがインストールされているが、任意のバージョンを入れたい。[この記事](https://qiita.com/P__act2_tech/items/69a5b94ead8ee3edbc7e) でAmazon Linux 2にphp7.4をインストールしたので、自分のMac PCにphp7.4.Xをインストールしたい。#やったこと
##現在のバージョンを確認
とりあえず今入っているphpのバージョンを確認する。“`
$ php -v
PHP 7.X.X (cli) (built: Jun 12 2020 00:04:10) ( NTS )
Copyright (c) The PHP Group
Zend Engine v3.4.0, Copyright (c) Zend Technologies
with Zend OPcache v7.X.X, Copyright (c), by Zend Technologies
“`# Homebrewをupgrade
本題とは直接関係ありませんが、Hom
CentOS とOSXでphp, fetch,javascriptの挙動が違う
OSXはこれで行けたが、CentOSではダメ
Javascript
“`javascript
function checkNewOrder(uuid) {
var res = fetch(“./test.php”, {
method: “POST”,
headers: {
“Content-Type”: “application/json”,
},
body: JSON.stringify({
//引数が色々あって…。
})
}).then((response) => {
if (response.ok)
return response.json(); // レスポンスをテキストとして変換する
})
書籍「テスト駆動開発」をPHPで写経するためのDocker環境構築手順
# はじめに
会社でテスト駆動開発の輪読会をやることになり、
あわせて書籍の中に出てくるコード(書籍内ではJavaで記述されている)をPHPで写経して理解を深めようと考えていました。この勉強会のためだけに、自分のMacにcomposerをインストールするのは嫌だったので、
使い捨てのコンテナでcomposerおよびphpunitを動かす方法を調べました。同じことを考える人が少なくとも10人くらいはいると思うので、記録に残しておきます。
# 対象の方
– 環境構築に時間をかけずに、さっさとPHPで書籍「テスト駆動開発」の写経をはじめたい方
# 前提条件
– **PHPおよびPHPUnitで**写経したい
– ローカルPCにcomposerを**インストールしたくない**
– ローカルPCにDockerをインストール済み# 各種バージョン
“`
PHP 7.4.7
PHPUnit 9.2.5
Composer version 1.10.7
“`# 手順
ご自身の環境にあわせて、適当なディレクトリを作り、手順を開始してください。
## composer.
phpの”->”を説明してみる。
オブジェクト指向を学んでいて、頻繁に こういう記述を目にします。
“`php:index.php
echo $curry->name;
“`
今回は、自分の言葉で自分の言葉で->の意味を説明して見ます。
結論から先に言うと、「curryという実体が、設計図内にあるnameにアクセスする」です。(ドルマークは、書式スタイルが変わってしまうので、省略しています。)これだけだとわかりずらいので、設計図と実体を表したコードを記述しました。↓“`php:index.php
class Menu{
public $name;
}
$curry=new Menu();
$curry->name=’CURRY’;
echo $curry->name;
“`
最初にMenuという設計図を作成し、設計図をもとに、curryという実体を作っていきます。curryは、設計図のnameにアクセスし、(curry->name)その値をCURRYと定義しました。つまり、->は、インスタンスのプロパティ(設計図の材料。今回はname。)を参照する時に用いられるものです。
PHP8.0.0α1がリリースされたのでさっそくJITの威力を体感する(した)
2020/06/25、[PHP8.0.0α1がリリースされました](https://www.php.net/archive/2020.php#2020-06-25-1)。
PHP8系の初のバージョンです。
ただし名前のとおりα版であり、まだまだ実環境で使えるものではありません。
今後は2020/08/04にフィーチャーフリーズ、即ち新機能の取り込みが終了し、その後はβやRCで徐々に完成度を高めながら、2020/11/26に正式版がリリースされる予定です。そんなわけでPHP8の目玉、[JIT](https://qiita.com/rana_kualu/items/ba312d2789bd228f887a)の性能を試してみることにしましょう。
今回はXAMPPに導入してWebサーバとして動かすことができなかったので、以下のベンチマークはコマンドラインで実行した結果となります。
きっとそのうちXAMPPも対応してくれるはず。# インストール
[QA Releases](https://windows.php.net/qa/)からVS16 x64 Thread Safeのzipを
PHP gzip圧縮転送支援スクリプト
主に**mod_deflate**モジュールによる圧縮転送が利用できないサーバで圧縮転送を行なうためのスクリプトです。
対象ファイルがリクエストされた際にPHPスクリプトでGZIP圧縮して送信しますが、一度圧縮したファイルはサーバ上にキャッシュファイルとして保存し2度目以降のリクエスト時にはキャッシュを利用しますので、**mod_deflate**での圧縮負荷を抑えたい場合にも利用できるかと思います。本スクリプトで圧縮可能なデータは静的ファイルのみで、CMS等で動的に出力されるHTMLデータは対象外となります。
##設置方法##
gzip圧縮転送したいファイルのあるディレクトリに**gzenc.php**を置き、同階層の **.htaccess** に以下を追記してください。####.htaccessへの追記内容####
~~~plain:.htaccess
#BEGIN gzenc.php
RewriteEngine On
RewriteCond %{REQUEST_URI} ^.*\.(html?|css
jsonのPHP、JSでのエンコードとか
## php
fetchall(PDO::FETCH_ASSOC) — 結果セットに 返された際のカラム名で添字を付けた**配列**を返す。
json_decode — JSON形式の文字列を**オブジェクトもしくは連想配列に変換**する
json_encode — 値をJSON形式にして返す## JSON
JSON.parse — JSON形式で書かれた文字列をJavaScriptの**JSONオブジェクトに変換**する
JSON.stringfy — JSONオブジェクトを**文字列に変換**する