20190622のPHPに関する記事は4件です。

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

nikic: Handle misaligned ifreq on macos

nikic: Remove leftover check

nikic: Avoid shift ub for regsets

cmb69: Fix #78189: file cache strips last character of uname hash

cmb69: Support TGA reading

dstogov: Additional fix for bug #78185 (File cache no longer works)

nikic: Dasm: Perform unaligned stores through unaligned pointers

nikic: Avoid ub in shift overflow check

nikic: Make ZEND_SEND_* flags unsigned

nikic: Don't try to exclude zreg_none

dstogov: Cleanup

kelunik: Fix memory leak in TLS matches_san_list

nikic: Fix leak in bcpowmod

nikic: Fix memory leaks in browscap parsing

nikic: Free cert in php_openssl_load_stream_cafile()

nikic: Fix CSR leaks in openssl

nikic: Fix X509 leak in openssl_pkcs7_verify()

nikic: Fix netscape spki leak in openssl

nikic: Fix d leak in ecc openssl_pkey_new

nikic: Fix PKCS12 leak in openssl

Andrey Hristov: Add explicit cast to uint32_t.

cmb69: Properly shut down font cache mutex

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

自分が書いた汚いコードを綺麗にしようの巻!

はじめに

前回の記事はこちら。続編です。
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=stock

ThoughtWorksアンソロジー はオワコンと言われていたりするが、一応知っておいたほうがいいだろう。
ちょっとしたエクササイズでした。
おっつ!

しかし、全体的にこの記事全体的に滑ってるよなあ

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

ワイ「せや!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もない。ないないな〜い
新しくできたドメインなら取れるかもしれない

まとめ

 あの頃が一番たのしかった。

  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

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.conf
Alias /example /var/www/html/example/public/

<Directory "/var/www/html/example/public">
    AllowOverride All
    Require all granted
</Directory>

.env の修正 もしくは .env.production への差し替え

.env
APP_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
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む