- 投稿日:2019-08-16T23:08:11+09:00
laravelのcookieで一日血迷ったこと#解決したので備忘録(*_*;
- 投稿日:2019-08-16T20:49:06+09:00
Laravel環境を3分で構築する【ついでにDocker入門】
うわあああああ!Laravelが使いたいよおおおお!
だけどサーバー構築面倒くさいよおおおお!!!!生きてるとそんなときもありますよね。
大丈夫、3分あればできます。実はもう別の方がQiitaに投稿されているのですが、Docker入門にもちょうどいいので少しだけ多めに解説した記事になります。
Docker で Laravel 環境 を 3分くらいで作る対象読者
- Dockerなんて(ほとんど)わかんない人
- でもとにかく一刻も早くLaravelを使いたい人
上記記事より
これだけです。
DBMSは MariaDB となっているようです。
https://github.com/bitnami/bitnami-docker-laravel
$ mkdir ~/myapp && cd ~/myapp $ curl -LO https://raw.githubusercontent.com/bitnami/bitnami-docker-laravel/master/docker-compose.yml $ docker-compose up解説するよ
何をしているのかを堅苦しくいうと、
「WordPressのローカル構築用ソフトを開発しているBitnamiが公式に提供しているDockerイメージをdocker-composeで一気に準備して起動している」
といったところでしょうか。素晴らしいことに、この3行だけで本当に仮想Docker環境を手元に用意することができてしまいます。
こちらを少しだけ詳細に解説してみましょう。
※Dockerのインストールだけは先に済ませておいてください1行目はいいですよね。
適当なフォルダを作って移動するだけです。
次にcurlコマンドでdocker-compose.ymlファイルを入手します。なんだそれは、と思われた方もいるかもしれません。
中身を見てみましょう。docker-compose.ymlversion: '2' services: mariadb: image: 'bitnami/mariadb:10.1' environment: - ALLOW_EMPTY_PASSWORD=yes - MARIADB_USER=my_user - MARIADB_DATABASE=my_database - MARIADB_PASSWORD=my_password myapp: tty: true image: bitnami/laravel:5-debian-9 environment: - DB_HOST=mariadb - DB_USERNAME=my_user - DB_DATABASE=my_database - DB_PASSWORD=my_password depends_on: - mariadb ports: - 3000:3000 volumes: - ./:/app # privileged: true # Privileged mode could be required to run this container under Windowsdocker-composeは複数のコンテナを一元管理するためのツールです。
詳しくはこちら。
DockerComposeの基本簡単に言うと、こちらのymlファイルでは"mariadb" と "myapp" 、それぞれの仮想環境(=Dockerコンテナ)を2つ手元に起動しますよ! という起点が定義されています。
"mariadb" がDBサーバ、"myapp" がwebサーバ兼APサーバですね。Laravelに触れてるとこの言葉自体もなかなか聞かなくなりますが……さて、3行目の
$ docker-compose upを入力するとお察しの通り念願のDockerコンテナが起動するわけですが、少しお待ちを。
先にこの超便利ツールをインストールしちゃいましょう。
(すでに3分超えてると思いますが、そこは触れないでください)DockerとDocker ComposeのTerminal UI「lazydocker」のご紹介
これはDockerにあまり触れる機会がない方でもパッと使える素晴らしいツールです。
さて、この状態で例の
$ docker-compose upを実行してみましょう。
実行!なんか2つrunningの状態になっていますね。
これが先程docker-compose.ymlファイルで確認した2つのコンテナです。
もうこの状態で2つのサーバがローカルで動いているような状態になっています。このサーバを停止、再起動したりするのもlazydocker上から簡単にできるので、先の記事を参考にしながらぜひやってみてください。
また、「本当にサーバとして起動している」のを実際に中に入って確認してみたい場合、
$ docker exec -it myapp_myapp_1 /bin/bash
で入ってみることができます。
この操作もlazydocker上からできるのですが、macで利用する場合上下ボタンが効かなくなるんですよね……閑話休題。
さて、いよいよ http://localhost:3000/ にアクセスしてみましょう。
Hello, Laravel!
簡単ですね。実際のソースコードは先程作った"myapp"ディレクトリに展開されています。
ローカルのコードを仮想環境が共有して使っているイメージですね。なので、ローカルのコードをちゃちゃっといじればブラウザ側のLaravelの動作に即座に反映されます。この方法で構築すれば、デバッグも可能です。
こちらの記事で完璧にまとめてくださっているので、ぜひお読みください!
Dockerで構築したPHP環境をxdebugでデバッグ(vscode)今回はこのあたりで。
- 投稿日:2019-08-16T20:21:52+09:00
php-master-changes 2019-08-15
この日は 循環参照 GC の実装修正、typo の修正、ArrayObject::__unserialize() で SEGV が起きる問題の修正、SimpleXML::asXML() の引数処理の修正、arginfo の PHP スタブへの移行、sqlite3 のリファクタリング、ドキュメントの更新があった!
2019-08-15
nikic: Fixed bug #78412
- https://github.com/php/php-src/commit/fcabe7e5e44067319f9c4123d71a7cea6a823af4
- [7.2~]
- 循環参照 GC の実装で、Generator の $this の参照カウントのアサーションでこける問題の修正
nikic: Fix reference printing in GC tracing
- https://github.com/php/php-src/commit/c238b5bbefd9d3c012c587fc6e9fd8ce98546261
- [7.3~]
- 循環参照 GC の実装で、デバッグ用の GC トレース出力での参照の出力を修正
cmb69: Update credits_ext.h
- https://github.com/php/php-src/commit/8fb297cd82328c765ab9a2fe12fb8770352b38d9
- credits_ext.h の不要なスペースの削除
zhdaniel: Fix typo
- https://github.com/php/php-src/commit/844b261e3a19200e9deaa6368efa74d94db6434e
- sapi/fpm で、コメントの typo を修正
nikic: Fixed bug #78409
- https://github.com/php/php-src/commit/34885408db9e16c48e8c25195c39e0ef758faaaa
- [7.4~]
- ext/spl で、ArrayObject::__unserialize() で SEGV が起きる問題の修正
nikic: Normalize SimpleXML::asXML() argument handling
- https://github.com/php/php-src/commit/743d27631fa600f071d4b3b1cf061708a9866f5b
- ext/simplexml で、SimpleXML::asXML() の引数処理を通常の ZPP で行うよう修正
duncan3dc: Convert sqlite3 functions arginfo to php stubs
- https://github.com/php/php-src/commit/107c1e0c1bc1cc2acdd904ffaff563ae4d021ef7
- ext/sqlite3 で、arginfo の PHP スタブへの移行
cmb69: Don't repeat yourself
- https://github.com/php/php-src/commit/e3ebdb6be2adac499e5d801bda10294710f46d3d
- ext/sqlite3 で、SQLite3Stmt::bindParam() と SQLite3Stmt::bindValue() の実装を共通化
cmb69: Unify ZPP handling in ext/sqlite3
- https://github.com/php/php-src/commit/a3abbc092009fbc399c118a36d53549d18a6c08c
- ext/sqlite3 で、zend_parse_parameters_throw() をやめて zend_parse_parameters() に統一し、不要な引数エラー通知の RETURN_FALSE を削除
Victor Gazotti: creating stubs for echant ext
- https://github.com/php/php-src/commit/75a3213d19c98039ffe9ef433e57ed84f419519b
- ext/enchant で、arginfo の PHP スタブへの移行
cmb69: Update NEWS
- 投稿日:2019-08-16T19:04:50+09:00
LaravelでログインしてそのままそのURLに進む方法
Laravelでログイン後に元の画面に戻る方法は探せばそれなりに出てくるけど、
ログイン後に行こうとしてたURLにそのまま行く方法がなかなか見つからなかったので、自己解決した結果を書いておきます。考え方としてはログイン画面を開く直前に、行こうとしてるURLを残しておいて、ログイン後そこに戻る、という手法を取ります。
さて、未ログインのままログインが必要な画面に行こうとするときにはAuthenticateミドルウェアを通るため、ここでログイン画面へ行こうとするときにURLを保存します。
このとき、URLはセッションに保存しておきます。app/Http/Middleware/Authenticate.phpprotected function redirectTo($request) { if (! $request->expectsJson()) { session(['url.intended' => url()->current()]); return route('login'); } }そしてLoginControllerのredirectPath()でセッションを見て、
保存されていたURLにリダイレクトすることで、もともと行こうとしてたURLに行けます。app/Http/Controllers/Auth/LoginController.phppublic function redirectPath() { return session('url.intended') ?: $this->redirectTo; } public function showLoginForm() { if (empty(session('url.intended'))) { session(['url.intended' => url()->previous()]); } return view('auth.login'); }ちなみにこのLoginControllerでは、「ログイン後に元の画面に戻る」もやりたいので、
showLoginForm()で、セッションが空の場合にリファラーを指定してます。
- 投稿日:2019-08-16T18:18:19+09:00
PHP比較演算子「==」と「===」の違いについて
比較演算子について
比較演算子を使用する際は
==ではなく厳密な比較演算子である===の方が良いと聞来ますが、どう違うのか気になって調べたのでそのことを書いていこうと思います。比較演算子
==についてPHPマニュアル(https://www.php.net/manual/ja/language.operators.comparison.php
)を見ると、こんな定義でした。
演算子 内容 \$a == $b 型の相互変換をした後で \$a が $b に等しい時に TRUE \$a === $b \$a が $b に等しく、および同じ型である場合に TRUE イマイチピンと来ないのでこんなコードを用意しました。
<?php $a = 120; $b = "120abcer1ere"; if($a == $b) { echo "true",PHP_EOL; } else { echo "false",PHP_EOL; }変数aと変数bが等しければtrue、そうでなければfalseを出力するように記載しています。格納されてる値が違いますが、比較演算子
==を使用したこのコードを実行するとtrueが出力されます。これにはキャストが関係しています。
キャストについて
キャストとは、変数などのデータ型を変換することを意味します。
PHPでは型の指定をしなくても実行に問題がありませんが、型は存在します。PHP側で自動的に型を設定してくれているので普段意識することはありませんが、今回のような比較演算子==を使う際に関係してきます。また、PHPには自動キャストという機能があり、異なる型同士で演算を行うと型を変換します。
今回のコードで言うと、比較する際に変数bの型を自動的にint型に変換している為「120」が変数bの値となり、trueが出力されます。
詳しく見ていきます。
型による値の変化を見る為に下記コードを作成しました。<?php $b = "120abcer1ere"; var_dump($b); var_dump((int)$b);
var_dumpは変数の型や格納されている値を表示してくれます。
var_dump((int)$b)で格納されている値をint型で表示するように指示しています。実行結果は下記です。
string(12) "120abcer1ere" int(120)そのまま出力すればstring型で格納した値全てが表示されますが、int型を指定するとアルファベット以降に記載した値は出力されません。
今回変数aと変数bが
==で比較された際にtrue判定になったのは、変数bの型が自動キャストによりint型に変換された為です。
==は型の相互変換を行うのでint型に合わせる為trueが、===は型の変換を行わないのでfalseが出力されます。最後に各比較演算子を使用した場合の値を記載します。
<比較演算子`==`を使用した場合> <?php $a = 120; $b = "120abcer1ere"; if($a == $b) { //自動キャストされるので、「120 = 120」の比較になりtrueが出力される。 echo "true",PHP_EOL; } else { echo "false",PHP_EOL; }<比較演算子`===`を使用した場合> <?php $a = 120; $b = "120abcer1ere"; if($a === $b) { //自動キャストされないので、「120 = 120abcer1ere」の比較になりfalseが出力される。 echo "true",PHP_EOL; } else { echo "false",PHP_EOL; }終わりに
基本的には厳密な比較演算子
===を使えば自動キャストは行われないので、前情報通りこちらを使用した方が無難そうです。
- 投稿日:2019-08-16T18:15:36+09:00
【PHP】Google Sheet APIで、対象のスプレッドシートの特定範囲の最終行を取得する
GASだと簡単にできるけども、SheetAPIだとすんなり取れなかったのでメモ
spreadsheetTest.php// $this->spreadsheetIdにて特定したスプレッドシートのシート1のA3からI列までの範囲で、入力のある部分を情報として取得 $rowsInfo = $this->service->spreadsheets_values->get($this->spreadsheetId, 'シート1!A3:I'); // 上記のカウントが最終行になるが、項目などを指定している場合は以下の$lastRowに項目分の行をプラスする必要がある $lastRow = count($row) + 2;
- 投稿日:2019-08-16T13:25:26+09:00
【PHP】Amazon SESを使った添付ファイル付きメールを送信する
はじめに
この記事ではAmazon SESを利用してPHPでメール送信する方法について説明します。
またAWSやSESについての説明や導入方法については様々な記事がありますので、本記事では省きます。簡易メールの送信(SendEmail)
最も簡単なメール送信で、送信元アドレス・送信先アドレス(複数可)・件名・本文を設定することでメール送信できます。
Request Parameters
Destination
・ 送信先のメールアドレス(配列)
Message
・ メール本文
・ メール件名
Source
・ 送信元のメールアドレスその他にもBCC送信などもあるようなので必要な方は公式サイトの確認をお願いします。
実装:テキストメールの場合
Textメールuse Aws\Ses\SesClient; class MailUtil { public static function sendMail() { // Amazon SES クライアントのインスタンス生成 $client = new SesClient([ 'region' => env("AWS_SES_REGION"), // SESのリージョン 'version' => 'latest', 'credentials' => [ 'key' => env("AWS_KEY"), 'secret'=> env("AWS_SECRET")] ]); $fromAddress = "testFrom@test.com"; $toAddressList[] = "testTo@test.com"; $subject = "SESメールの送信"; $text = "SESメールの実装方法について"; // 送信元アドレス・送信先アドレス(Array)、件名、本文をリクエストパラメータに代入 $request = []; $request['Source'] = $fromAddress; $request['Destination']['ToAddresses'] = $toAddressList; $request['Message']['Subject']['Data'] = $subject; $request['Message']['Body']['Text']['Data'] = $text; // 送信する $client->sendEmail($request); } }実装:HTMLメールの場合
リクエストパラメータを下記のように設定するだけで可能となります。
HTMLメール$request = []; $request['Source'] = $fromAddress; $request['Destination']['ToAddresses'] = $toAddressList; $request['Message']['Subject']['Data'] = $subject; $request['Message']['Body']['Html']['Data'] = $text; $request['Message']['Body']['Html']['Charset'] = 'iso-2022-jp';AWS SDK for PHP を使用して E メールを送信する
添付ファイル付きメールの送信(SendRawEmail)
SendEmailに対してSendRawEmailは高度なメールカスタマイズをすることができます。
最終的なソースコード
use Aws\Ses\SesClient; use Carbon; class MailUtil { public static function sendAttachedMail($toAddrList, $fromAddr, $subject, $body, $data) { // sendEmailと同様 $client = new SesClient([ 'region' => env("AWS_SES_REGION"), 'version' => 'latest', 'credentials' => [ 'key' => env("AWS_KEY"), 'secret' => env("AWS_SECRET") ] ]); # 添付ファイル(今回はwindowsをメインで想定していたのでSJIS-winにエンコードしてます) $attachFileData['data'] = mb_convert_encoding($data, 'SJIS-win', 'UTF-8'); $attachFileData['filename'] = Carbon::now()->format('Ymd') . '.csv'; $attachFileData['mimetype'] = 'text/csv'; // RawMessageの作成 $msg = self::createRawMessage($toAddrList, $fromAddr, $subject, $body, $attachFileData); $client->sendRawEmail([ 'Source' => $fromAddress, 'Destinations' => [$toAddressList], 'RawMessage' => [ 'Data' => $msg, ], ]); } /** * 添付ファイル付きメール用のRawMessageを作成する */ private static function createRawMessage($to, $from, $subject, $body, $filedata) { if (isset($filedata['filename']) && isset($filedata['data']) && isset($filedata['mimetype'])) { $boundaryStr = uniqid(rand()); $message = "To: " . $to . "\n"; $message .= "From: " . $from . "\n"; $message .= "Subject: " . $subject = str_replace("\r", "", $subject) . "\n"; $message .= "MIME-Version: 1.0\n"; $message .= 'Content-Type: multipart/mixed; boundary="' . $boundaryStr . '"'; $message .= "\n\n"; $message .= "--" . $boundaryStr . "\n"; $message .= "Content-Type: text/html; charset=iso-2022-jp"; $message .= "\n"; $message .= "Content-Transfer-Encoding: 7bit\n"; $message .= "Content-Disposition: inline\n"; $message .= "\n"; $message .= $body; $message .= "\n"; $message .= "\n"; $message .= "--" . $boundaryStr . "\n"; $message .= 'Content-Type: ' . $filedata['mimetype'] . '; name="' . $filedata['filename'] . '"'; $message .= "\n"; $message .= "Content-Transfer-Encoding: base64\n"; $message .= 'Content-Disposition: attachment; filename="' . $filedata['filename'] . '"'; $message .= "\n\n"; $message .= base64_encode($filedata['data']); $message .= "\n"; } else { Log::warning('添付ファイルデータが設定されていません'); } } }https://github.com/aws/aws-sdk-php/issues/1295#issuecomment-307517135
解説
boundary
メッセージヘッダやコンテンツといったメールの各パートは、boundary で分離されます。
boundary は、各パートの開始と終了を示す文字列で、これらを使ってメッセージ本文、または今回のような添付ファイルを分けて、設定を行なっていきます。ヘッダー
ヘッダーには送信先、送信元、件名、MIME-Ver、コンテンツタイプを設定します。
今回はヘッダー・本文・添付ファイルを設定するため、メッセージのコンテンツタイプにmultipart/mixedを設定します。これを設定することで各パートを別々に扱う必要があることがわかります。$message = "To: " . $to . "\n"; $message .= "From: " . $from . "\n"; $message .= "Subject: " . $subject = str_replace("\r", "", $subject) . "\n"; $message .= "MIME-Version: 1.0\n"; $message .= 'Content-Type: multipart/mixed; boundary="' . $boundaryStr . '"'; $message .= "\n\n";メッセージ本文
文字コードに関しては、古いメーラーを使用したユーザーが想定されるためUTF-8ではなく
iso-2022-jpを選択しましたが、最近はUTF-8でも問題ないかと思います。$message .= "Content-Type: text/html; charset=iso-2022-jp"; $message .= "\n"; $message .= "Content-Transfer-Encoding: 7bit\n"; $message .= "Content-Disposition: inline\n"; $message .= "\n"; $message .= $body;Content-Disposition
・ inline
メール本文のようなWebページの一部またはWebページとして表示可能である場合はinlineを設定します。・ attachment
ダウンロード可能な添付ファイルの場合に、Content-Disposition: attachment; filename="hoge.xxx"といった形式で記述します。添付ファイル
// mimetype:'text/csv' $message .= "--" . $boundaryStr . "\n"; $message .= 'Content-Type: ' . $filedata['mimetype'] . '; name="' . $filedata['filename'] . '"'; $message .= "\n"; $message .= "Content-Transfer-Encoding: base64\n"; $message .= 'Content-Disposition: attachment; filename="' . $filedata['filename'] . '"'; $message .= "\n\n"; $message .= base64_encode($filedata['data']);
- Content-Type
添付ファイルの種類で今回はCSVファイルを指定- Content-Disposition
添付ファイルのためattachmentをセットし、添付ファイル名を指定- Content-Transfer-Encoding
添付ファイルのエンコードに使用されるスキーム。添付ファイルでは、ほとんどの場合この値は base64指定補足説明
送信結果の判別
AWS SESではメール送信結果を受け取ることができます。
しかし受け取り可能なのは送信失敗(バウンス処理、迷惑メール)となった場合のみで成功通知は受け取ることができません。
種別 結果判別可否 送信成功 △ バウンス処理 ◯ 迷惑メール ◯ そのため送信後はしばらく待って失敗通知が来ていなければ、おそらく送信成功したのだと判断する必要があり注意が必要となります。
参考
- 投稿日:2019-08-16T10:38:03+09:00
PHP、これまで勉強したオブジェクト指向関連用語まとめ①
①オブジェクト指向...オブジェクト(モノ)を中心(指向)にした考え方
②クラス...オブジェクトに於ける設計図。それを基にインスタンスを設計する。
clsss クラス名 { //クラス名は大文字 クラスの内容 }③インスタンス...クラスを基に生成された実体。オブジェクトと同じ意味で使われる。インスタンスの生成はクラスの外で記述する
new クラス名(); //クラス名は大文字 $変数名 = new クラス名() //この記述によって$変数名に生成されたインスタンスを代入する。④プロパディ...インスタンスが持つ情報
public $プロパディ名;⑤メソッド...インスタンスが行う処理、関数に似てる
public function メソッド名(){ メソッドの処理; }⑥$this...メソッド内でインスタンスのプロパディやメソッドにアクセスしたい時に使う特殊な変数。thisはメソッドを呼び出した時に呼び出し元のインスタンスに置き換えられる
$this->プロパディ名orメソッド名 //"->"の呼び方はアロー演算子、アクセスする時に使う。プロパディ名やメソッド名にアクセスする際は"$"は使わないこと。⑦コンストラクタ...インスタンスが生成された瞬間に自動的に呼び出される特殊なメソッド
例) public function __construct(引数){ 処理内容; } new クラス名() //インスタンスの生成。この瞬間コンストラクタが呼び出される $インスタンス名->⑧継承...既存のクラスに新しいクラスを作ること。作ったクラスを"小クラス" 、予め定義していたクラスを"親クラスと呼ぶ。
例 class MainUser extends User{ //メソッド定義orプロパディ定義 }⑨オーバーライト...小クラスの方で親クラスで定義したメソッド名、プロパディ名を上書きする
⑩カプセル化...外部からのアクセスを制限する方法、他の人にメソッド等を修正をさせたくない時に使う。アクセス修飾子"private"を使う。
class クラス名{ public name; //外部からアクセス可能 private age; //外部からのアクセス不可能 protected...クラス内or継承先クラスのみアクセス可能
- 投稿日:2019-08-16T09:08:51+09:00
名前をつけるときは予約語に注意
今回出てたLaravelの開発で出たエラー。結構ハマったのでメモ。
結論:フォルダ名も予約語使わないこと。
PHP Parse error: Syntax error, unexpected T_INTERFACE, expecting T_STRING or '{' on line 1初めは全体通して動かしてたけど問題の切り分けのために、tinkerで直指定してファイル呼び出し。
php artisan tinker >>> use App\Infrastructure\Repositories\Interface\IGreetdictionarysRepository; PHP Parse error: Syntax error, unexpected T_INTERFACE, expecting T_STRING or '{' on line 1ファイルの中身を全部消してもエラー出るので、フォルダ名を変えた。
Interfaceって名前が予約語なのでIRepositoriesに変えた。use App\Infrastructure\Repositories\IRepositories; use App\Infrastructure\Repositories\IRepositories\IGreetdictionarysRepository;これで通った。
他の言語でも同じように注意
Pythonの予約語に注意
Pythonの変数名で避けた方がいい名前は?
https://qiita.com/matsui2019/items/98165df7bee980ae6a18MySqlの予約語に注意
MySqlで予約語を使うと、syntax errorが出る
https://qiita.com/ma_me/items/a98842d1cb65bfcd20cf
- 投稿日:2019-08-16T03:38:07+09:00
php-master-changes 2019-08-14
この日は ReflectionClass::newInstanceWithoutConstructor() が内部クラスを継承した final クラスに使えない問題の修正、7.2 系と 7.3 系の開発バージョンの引き上げ、arginfo を PHP スタブへ移行する修正があった!
2019-08-14
nikic: Fixed bug #78410
- https://github.com/php/php-src/commit/d891b5f458a253befaa56d325ae90518536fc2f0
- [7.4~]
- ext/reflection で、ReflectionClass::newInstanceWithoutConstructor() が内部クラスを継承した final クラスに使えない問題の修正
cmb69: Bump version numbers
- https://github.com/php/php-src/commit/fe7997912d2aec3a3836a426034521b083434fdb
- [7.3~]
- 7.3 系の開発バージョンの引き上げ(の忘れてた奴)対応
cmb69: Next will be 7.3.10
- https://github.com/php/php-src/commit/5536105b67465151a7a9d94e80d91871ef3aff22
- [7.3~]
- 7.3 系の開発バージョンの引き上げ
sgolemon: Bump for 7.2.23
- https://github.com/php/php-src/commit/4b64d47c99c8f7e874b441bcaafadd7b6279eb0e
- [7.2~]
- 7.2 系の開発バージョンの引き上げ
stephenreay: Added arginfo stub for posix extension
- https://github.com/php/php-src/commit/f40cc41465c3a7bd4afb2b4ecbe55171fabbd048
- ext/posix で、arginfo の PHP スタブへの移行
jason-liew: add some stubs for array func in basic_functions
- https://github.com/php/php-src/commit/ffffaf12cf3b6f3ca6cdd7350eb4e20cf8e2f748
- 配列操作関数幾つかの arginfo の PHP スタブへの移行
Arkanius: Add some stubs at ctype ext
- https://github.com/php/php-src/commit/262227fc9e6829ab9651a0b547e038b3a9a1e967
- ext/ctype で、arginfo の PHP スタブへの移行
theodorejb: Add hrtime arginfo stubs
- https://github.com/php/php-src/commit/e2b0fb946baf065cb9d920ce49996890b05b5b5f
- hrtime() の arginfo の PHP スタブへの移行
- 投稿日:2019-08-16T03:19:50+09:00
php-master-changes 2019-08-13
この日はコンパイラの実装修正、インデントの修正、gen_stub.php の修正、arginfo の PHP スタブへの移行、循環参照 GC のバグ修正、ユーザ定義のストリームフィルタを通る include が動作しなくなっていた問題の修正、opcache での @ 利用による Assertion Failure の修正、不要コードの削除、ロケールキーを GC_MAKE_PERSISTENT_LOCAL でマークする修正、get_cfg_var() の実装修正、ドキュメントの修正があった!
2019-08-13
nikic: Intern alias old_name early
- https://github.com/php/php-src/commit/f3fdf570b3cd3df14af3d698950d341623a97088
- [7.2~]
- コンパイラの実装で、use A as B の A の intern 化を早期に行うよう修正
- なんか問題あったから直してるんだろうくらいでよくわかってない
cmb69: Fix WS
- https://github.com/php/php-src/commit/ce646357bf8f58f7fc52c5ce77c5b9a4e5c207fb
- [7.4~]
- win32/win32util.c で、インデントのホワイトスペースをタブへ置き換え
duncan3dc: Add a prefix to differeniate between class methods and functions
- https://github.com/php/php-src/commit/288442716e9dd0b71fc888582cc512cb28eaf212
- gen_stub.php で、クラスメソッドと関数を区別するためのプレフィクスの追加
duncan3dc: Update the date class arginfo the new format
- https://github.com/php/php-src/commit/06aa2ae993df2b6e086c04fbc4f1ab2784350105
- ext/date で、arginfo にクラス用 prefix の追加
nikic: Don't destroy properties array with unset GC type
- https://github.com/php/php-src/commit/18f2918a0fcf66562a5e7d964188c188660e9728
- [7.2~]
- オブジェクトのデストラクタで、プロパティ配列について GC type が IS_NULL でなければ破棄しないよう修正
- よく分かってない!
iNem0o: add syslog arginfo stubs
- https://github.com/php/php-src/commit/fb363f7f00dd3a9277d588f1fa71f972122682cd
- syslog 用関数の arginfo を PHP スタブへ移行
nikic: Fixed bug #78406
- https://github.com/php/php-src/commit/b01824e596dd11d075d1f2c9af364d2fdabc4d17
- [7.4~]
- ユーザ定義のストリームフィルタを通る include が動作しなくなっていた問題の修正
nikic: Fixed bug #77191
- https://github.com/php/php-src/commit/4eeb41d1ea91fe7a44759f788ad5920eac8df0ef
- [7.2~]
- ext/opcache で、@ 利用により Assertion failure でクラッシュする問題の修正
iNem0o: Add crypt() function's stub
- https://github.com/php/php-src/commit/ccf79547af849d6e32e1186693d474091239696a
- crypt() の arginfo を PHP スタブへ移行
nikic: Generalize delref assertion
- https://github.com/php/php-src/commit/7bd2b9d2e6ae5ab85f01311fab585b0e4e56acd4
- [7.4~]
- 循環参照 GC の実装で、参照カウントのアサーションをまとめた
nikic: Don't include non-refcounted structures in GC count
- https://github.com/php/php-src/commit/f0f3fe0b6c2eb93ff01058f389e6ae2a93ea20d4
- 循環参照 GC の実装で、 non-refcounted なデータを GC しましたカウンタへ含めないよう修正
- PHP7 で参照カウントしない値が増えた
- が、循環参照 GC の実装は 5.3 から入っていた
- 互換性のため?に参照カウントしなくなってからも循環参照 GC でのカウントでは謎に含めていたのを、もういいだろ、で含めなくした感じかな
nikic: Remove removed nested data from GC count
- https://github.com/php/php-src/commit/72b7d99d0db162a7118a36431f99a60a4fb39ef8
- [7.4~]
- 循環参照 GC の実装で、removed nested data を GC しましたカウンタへ含めないよう修正
- そんなによく分かってない!けどたぶん gc_collect_cycles() の返り値が誤っていたみたいな話と思う!
- gc_remove_nested_data_from_buffer() の追加時期までは追った
nikic: Adjust GC count in SPL test
- https://github.com/php/php-src/commit/bc690d63f6d2f10bc1cff89cb4dfd7589c3b012c
- [7.4~]
- ext/spl で、テストの期待出力の GC しましたカウンタの値を修正にあわせて調整、かな
stephenreay: Added zip arginfo stubs
- https://github.com/php/php-src/commit/d4e5e63b6c525fb91af1d88aeeeab7298d08c620
- ext/zip で、arginfo を PHP スタブへ移行
cmb69: Remove dead code
- https://github.com/php/php-src/commit/eb25176ab3130a2f158de284d8e316a9e1f9c840
- [7.4~]
- ext/zip で、不要コードの削除
nikic: Mark PCRE locale key as local persistent
- https://github.com/php/php-src/commit/201729840cc57c622c0a88823ced8ed73054eb27
- ext/pcre で、ロケールキーを GC_MAKE_PERSISTENT_LOCAL でマーク
nikic: Don't return persistent string from get_cfg_var()
- https://github.com/php/php-src/commit/fdfc7ea9320c25ccca519095642bade6784caf48
- get_cfg_var() の実装で、persistent string を返さないよう修正
- スレッドセーフでなくなるから、らしい
Islam Israfilov: Add inet_ntop and inet_pton stubs
- https://github.com/php/php-src/commit/1dc88ff67e64a2fdd6ec7807758d7b88d577b4f9
- inet_ntop() と inet_pton() の arginfo を PHP スタブへ移行
nikic: Fixed bug #72530
- https://github.com/php/php-src/commit/60a7e60b61b8e4a3d455974c83f76a26546ce117
- [7.4~]
- 循環参照 GC の実装で、一部のデストラクタを持つオブジェクトについて use after free が起きる問題の修正
- GC で起動したデストラクタの処理内で更に GC 対象が増えるみたいなケースへのワークアラウンドを入れてる感じかな
- とりあずデストラクタの処理は呼ぶが回収は後回し、みたいな
nikic: Add myself to extension maintainer list
- https://github.com/php/php-src/commit/b0394ba0e54a2c2565fe80cc1f949b1a761c15d4
- 幾つかの拡張のメンテナに自分の名前を追加、今まで載せてなかったんかーい






