- 投稿日:2019-06-22T17:58:01+09:00
php-master-changes 2019-06-21
今日は Mac 向けの実装修正、JIT / opcache の実装修正、gd での TGA 形式の読み込みサポートの追加、VM コードのリファクタリング、メモリ/リソースリークの修正、mysqlnd のコードでの明示的なキャスト追加、gd でフォントキャッシュの tsrm mutex を MSHUTDOWN で解放するようにする修正があった!
2019-06-21
nikic: Handle gr_mem misalignment on macos
- https://github.com/php/php-src/commit/d80f0ff6c0a557d8c993a9d2bd006fb488f6d564
- [7.4~]
- gr_mem のエントリが Mac ではアラインされてないかもしれないとのことで一旦ローカル変数へコピーする修正
nikic: Handle misaligned ifreq on macos
- https://github.com/php/php-src/commit/dd6d47183432df70d48a47d456ecde318174770d
- [7.4~]
- ext/sockets で、ifreq が Mac ではアラインされてないかもしれないとのことで一旦ローカル変数へコピーする修正
nikic: Remove leftover check
- https://github.com/php/php-src/commit/59974000eb1fac8973600893df0534610f62ebbb
- [7.4~]
- Mac 用の修正により不要となったチェックコードの削除
nikic: Avoid shift ub for regsets
- https://github.com/php/php-src/commit/42f3ed480d3bb7a2c15d7a538c27cce68aafbcbf
- ext/opcache/jit で、ZEND_REGSET の鼻から悪魔ならシフト演算を修正
cmb69: Fix #78189: file cache strips last character of uname hash
- https://github.com/php/php-src/commit/fcd6f2de60e1fc593fa301f3af42b871624946d9
- [7.2~]
- ext/opcache で、Windows 版でのファイルキャッシュのファイル名決定の実装でユーザネームからのハッシュ値を 1 バイト分無駄に捨ててしまっていた問題の修正
cmb69: Support TGA reading
- https://github.com/php/php-src/commit/81fd113506e4c5833e64998651f232734ebb2cb7
- [7.4~]
- ext/gd で、TGA 形式の読み込みサポートの追加
dstogov: Additional fix for bug #78185 (File cache no longer works)
- https://github.com/php/php-src/commit/1707f6645a2f80fd529c9f987317b73ae94dba93
- ext/opcache で、ファイルキャッシュが正常動作しなくなっていた問題の修正
nikic: Dasm: Perform unaligned stores through unaligned pointers
- https://github.com/php/php-src/commit/291eb19419200db2b565bf3c7c36e52ba4b65111
- ext/opcache/jit で、DASM_ALIGNED_WRITES なしでの dasmw() / dasmd() に 1 バイトアライン指定のポインタ型を使うよう修正
nikic: Avoid ub in shift overflow check
- https://github.com/php/php-src/commit/8227e0f747d3e585d328a8316345d2b36177b7e0
- [7.4~]
- ext/opcache で、シフト時のオーバーフローチェックでの鼻から悪魔を修正
nikic: Make ZEND_SEND_* flags unsigned
- https://github.com/php/php-src/commit/a84771573dd79988f247272b025e00c1daa4bba9
- [7.4~]
- ZEND_SEND_* のフラグを符号なし整数に修正
nikic: Don't try to exclude zreg_none
- https://github.com/php/php-src/commit/7a1ca07a608d7b147010668abf729c4967021596
- ext/opcache/jit で、レジスタ割当処理の修正
- ZREG_NONE は -1 で ZEND_REGSET_EXCL() はビットマップから指定ビットを抜くような処理に見えるが、正直よく分からず!
dstogov: Cleanup
- https://github.com/php/php-src/commit/e1e8e670df7784bd873c09a55bf08cd7465704c5
- [7.4~]
- VM コードのリファクタリング
kelunik: Fix memory leak in TLS matches_san_list
- https://github.com/php/php-src/commit/fea9f93166a31760679101269aee2326ee8185e9
- [7.2~]
- ext/openssl で、matches_san_list のメモリリークを修正
nikic: Fix leak in bcpowmod
- https://github.com/php/php-src/commit/f781c8f1100ebefec800889171f4c8d0cf3c6637
- [7.4~]
- ext/bcmath で、bcpowmod() でのメモリリークの修正
nikic: Fix memory leaks in browscap parsing
- https://github.com/php/php-src/commit/1de7c4b91941347d1a5fc4a9d2990601b6d33fe7
- [7.4~]
- browscap のパース処理でのメモリリークの修正、微妙に処理も効率化
nikic: Free cert in php_openssl_load_stream_cafile()
- https://github.com/php/php-src/commit/90cb3743be293aab801a78196ad038c039786c19
- [7.2~]
- ext/openssl で、X509_free() が足りずメモリ/リソースリークしていた問題の修正
nikic: Fix CSR leaks in openssl
- https://github.com/php/php-src/commit/e0bafc6da440f5b028453ca19d012d6a02234fc8
- [7.2~]
- ext/openssl で、openssl_csr_get_subject()、openssl_csr_get_public_key() でのメモリ/リソースリークの修正
nikic: Fix X509 leak in openssl_pkcs7_verify()
- https://github.com/php/php-src/commit/a0da2fb2b78b4783666be2c82d5eda23f9f65552
- [7.2~]
- ext/openssl で、openssl_pkcs7_verify() でのメモリ/リソースリークの修正
nikic: Fix netscape spki leak in openssl
- https://github.com/php/php-src/commit/dfe6f0c1c6838d1fd9e6be49fd6896d421b4dac8
- [7.2~]
- ext/openssl で、openssl_spki_export_challenge() でのメモリ/リソースリークの修正
nikic: Fix d leak in ecc openssl_pkey_new
- https://github.com/php/php-src/commit/c939a67866536247325b204929d8b9cac021c71e
- [7.2~]
- ext/openssl で、openssl_pkey_new() でのメモリ/リソースリークの修正
nikic: Fix PKCS12 leak in openssl
- https://github.com/php/php-src/commit/99f3e0f0ed6668097bf4fb2820f3e97db1197869
- [7.2~]
- ext/openssl で、openssl_pkcs12_read() でのメモリ/リソースリークの修正
Andrey Hristov: Add explicit cast to uint32_t.
- https://github.com/php/php-src/commit/102c64e8274e072426c95f8805dd727e87c5f69d
- [7.2~]
- ext/mysqlnd で、キャストの追加
- 「動いてたから元々コンパイラが暗黙にキャストしてくれてたんだと思う!たぶん!」みたいなこと言ってる
cmb69: Properly shut down font cache mutex
- https://github.com/php/php-src/commit/eec5d2a25f75c3cacd07f8cb0f88ce3343641528
- [7.4~]
- ext/gd で、フォントキャッシュの tsrm mutex を MSHUTDOWN で解放するよう修正
- 投稿日:2019-06-22T16:01:50+09:00
自分が書いた汚いコードを綺麗にしようの巻!
はじめに
前回の記事はこちら。続編です。
https://qiita.com/ryuuga_h/items/5a49b0bd4287d08d075b昔、自分が書いた恥ずかしい(手抜き)コードを修正して遊ぶ
これはドメインを出力するコードだ。詳しくは前回のを見て欲しい。
domain_get500.php<?php $arfa = range('a', 'z'); $number = range(0, 9); $num = 0; $nnn = 500 * 1; for($i=0;$i<count($arfa);$i++){ for ($l=0; $l < count($arfa); $l++) { for ($x=0; $x < count($arfa); $x++) { $num++; if($num < $nnn - 500){ continue; } if($num > $nnn){ continue; } echo $arfa[$l] . $arfa[$i] . $arfa[$x] .".me"; // echo $arfa[$l] . $arfa[$i] . $arfa[$x] .".co"; // echo $arfa[$l] . $arfa[$i] . $arfa[$x] .".xyz"; echo "<br>"; } } }少し綺麗にする コメントが多いので長く感じる
domain_get500.php<?php //ドメインの設定 .xyz .se など //使ったものをコメントに書いていくと分かりやすい .com .net define("DOMAIN", ".me"); //手動で変更する。500個ずつやらないといけない。今回は2回目 define("PAGE", 2); #--------------------------------# #以下は変更する必要がない。初期バージョンではこれ以降を触っていたので変なところでミスが出た可能性がある。 #本来は別ファイルにするとよい //全部で出力するのは500個 define("MAX", 500); $arfa = range('a', 'z'); //$numberは使う時だけコメントアウトする #$number = range(0, 9); $count = 0; //$nunから$countへ変更 $limit = MAX * PAGE; // $nnnから$limitへ変更 //ループの中でcountすると処理が重たくなるのでループの外で一回だけ変数に入れる。 $roop_count = count($arfa); for($i=0;$i<$roop_count;$i++){ for ($l=0; $l < $roop_count; $l++) { for ($x=0; $x < $roop_count; $x++) { $count++; if($count < $limit - MAX){ continue; } if($count > $limit){ continue; } //前回ではなぜかこういう順番で出力していた! $l と $iが逆! //echo $arfa[$l] . $arfa[$i] . $arfa[$x] .".me"; echo $arfa[$i] . $arfa[$l] . $arfa[$x] . DOMAIN . "<br>"; } } }ポイントはいくつかあるが、定数しかいじらなくてよくなったこと
初期のコードはループ内の文字を変更していた。
そういうことをするとヒューマンエラーをすることになる。まだ甘いコードだ。
・三重ループのインデントがとても気になる。
・continueが気になる
・ループを関数化したいさらに改良する
domain.php<?php //ドメインの設定 .xyz .se など //使ったものをコメントに書いていくと分かりやすい .com .net .me define("DOMAIN", ".gg"); //手動で変更する。500個ずつやらないといけない。今回は3回目 define("PAGE", 3); #以下は変更する必要がない。初期バージョンではこれ以降を触っていたので変なところでミスが出た可能性がある。 #本来は別ファイルにするとよい //全部で出力するのは500個 define("MAX", 500); $limit = MAX * PAGE; //ループの外で計算 $arfa = range('a', 'z'); //$numberは使う時だけコメントアウトして適当な場所の変数と入れ替える #$number = range(0, 9); //ループの中でcountすると処理が重たくなるのでループの外で一回だけ変数に入れる。 $roop_count = count($arfa); $count = 0; //$nunから$countへ変更 //インデントをへらすぞ for($i=0;$i<$roop_count;$i++){ roop_mid($i); } function roop_mid($i){ //globalを使うことでグローバル変数を使用する global $roop_count; for ($l=0; $l < $roop_count; $l++) { roop_last($i,$l); } } function roop_last($i,$l){ global $limit,$count,$roop_count,$arfa; for ($x=0; $x < $roop_count; $x++) { $count++; if($count < $limit - MAX or $count >= $limit){ //$count >= $limitにした。 continue; } //$count . "<>" .を前半につけるとテストしやすい。 echo $arfa[$i] . $arfa[$l] . $arfa[$x] . DOMAIN . "<br>"; } }ざっくり解説
ちょっとドメイン名を出力したいのに、こんな面倒なコード書くやつおりゅw?
関数化することによって見やすくなったかもしれないが、目が慣れていないとこっちのほうが訳がわからないかもしれない。
global キーワードを知らないと全部引数にしてスッキリしない。
https://www.php.net/manual/ja/language.variables.scope.phpこれを更にクラス化することもできるだろう。
コードの世界は、動けばいいからというレベルからヒューマンエラーを防いだり、メンテナンスしやすくしたりと、奥が深い。
基本的にいじらないコードは別ファイルにして読み込んで使うのが良いだろう。[課題1] 変数をフォームから受け取って表示させよ
いや、誰がやるねん。ワイに見せられても困るしw
[課題2] javascriptで提出せよ
いや、だから誰がやるねん、ワイに見せられても「いいね」というしかない。
[課題3] オブジェクト指向を使ってやってみよ
いや、だから誰がやるねん。
まとめ ネタバラシ
いや、ホント書き方っていろいろあるなあ。
ThoughtWorksアンソロジー
https://qiita.com/search?q=ThoughtWorks%E3%82%A2%E3%83%B3%E3%82%BD%E3%83%AD%E3%82%B8%E3%83%BC+&sort=stockThoughtWorksアンソロジー はオワコンと言われていたりするが、一応知っておいたほうがいいだろう。
ちょっとしたエクササイズでした。
おっつ!しかし、全体的にこの記事全体的に滑ってるよなあ
- 投稿日:2019-06-22T07:35:08+09:00
ワイ「せや!3文字ドメイン取ったろ!」 なお・・・
はじめに
3文字ドメインを取得するというのは個人webサービス開発者の夢である。
以下、その夢を追った当時若者のドキュメンタリーソースコードである。domain_get500.php
domain_get500.php<?php $arfa = range('a', 'z'); $number = range(0, 9); $num = 0; $nnn = 500 * 1; for($i=0;$i<count($arfa);$i++){ for ($l=0; $l < count($arfa); $l++) { for ($x=0; $x < count($arfa); $x++) { $num++; if($num < $nnn - 500){ continue; } if($num > $nnn){ continue; } echo $arfa[$l] . $arfa[$i] . $arfa[$x] .".me"; // echo $arfa[$l] . $arfa[$i] . $arfa[$x] .".co"; // echo $arfa[$l] . $arfa[$i] . $arfa[$x] .".xyz"; echo "<br>"; } } }なにをしているのだろうか?
value-domainではログインをすると一気に500個ドメインが取得できるか確認できるので、500個生成するプログラムである。
https://www.value-domain.com/regdom.php?action=checklist1
つまり、出力してコピペして検索するを繰り返す。半自動である。
経験を積むとコードが汚く見える
[悲報] 現在、このコードがクソすぎて読む気にならない。
パッと見で分かるツッコミどころ
・クソみたいなファイル名である
・\$numberと\$numがわかりにくい
・\$nnnのネーミングセンスが0
・500 * 1ってなんだよ。
定数にしろ。変数に入れろ。(ちなみに500は500個という意味で、1は一回目という意味で、二回目に出力するときは手動で+1にして実行する)
・ループが深い。関数化しろという声が聞こえてくる。
・forの中でcount()を使ってはいけない。これはループの外で変数に入れておくのだ。
・ .me ドメインの部分も変数にしたほうが良い
・$numberが確保されているのに使われていないwwwwww($numberが使われていない理由は、アルファベットと数字を混合したドメインを取得するときだけ使うから)
今後このクソコードを修正していくという連載を書くかもしれないと思わせるほどのクソコードである。
追記:やってみた https://qiita.com/ryuuga_h/items/b929f8e15ccea6225a2dしかしだ。このコードは夢をワンチャン叶える可能性がある素晴らしいコードだった。
結局そのときは、5文字の.comドメインを取ることになりました
.comは最初から全滅。.netもない。ないないな〜い
新しくできたドメインなら取れるかもしれないまとめ
あの頃が一番たのしかった。
- 投稿日:2019-06-22T00:19:16+09:00
PHP/Laravel5で本番環境リリース後にすること
自分が、Laravelでローカル環境から本番環境にコピーした後、特に忘れがちなことをメモ。
各々の環境や開発ポリシーで、大きく違うところもあるかと思うので、あくまで参考程度にして下さい。パーミッション設定
chown -R apache:apache /var/www/html/example chmod 777 -R /var/www/html/example/storage chmod 777 -R /var/www/html/example/bootstrap/cache
Apache設定
/etc/httpd/conf.d/example.confAlias /example /var/www/html/example/public/ <Directory "/var/www/html/example/public"> AllowOverride All Require all granted </Directory>.env の修正 もしくは .env.production への差し替え
.envAPP_ENV=production APP_DEBUG=false.env のAPP_KEY更新
php artisan key:generateオートローダー最適化
composer install --optimize-autoloader --no-devキャッシュ最適化
php artisan config:cache php artisan route:cache