20190816のPHPに関する記事は11件です。

laravelのcookieで一日血迷ったこと#解決したので備忘録(*_*;

laravel Cookieの落とし穴?

  • laravelで今話題のLeague Of Legendsのtftのビルドサイトを作ろうとしていて

    Cookieで閲覧回数を記録したいなーと思って
    色々やってみたけど、なかなかCookieが保存されず...

    ※home_cookieが今回保存したいcookie名です

chromeのデベロップツールのApplicationタグには保存されていないが
2019081601.png

chromeのデベロップツールのNetworkタグには保存されている!?!?!?!??!?!?:cold_sweat:
2019081602.png

  

  • 原因はphp artisan serveだった! xammpで起動してみると 2019081603.png

保存されている!!!

無事解決!!

勉強になりました...:sob:

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

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.yml
version: '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 Windows

docker-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にあまり触れる機会がない方でもパッと使える素晴らしいツールです。

起動したらこんな感じの画面になります。
スクリーンショット 2019-08-16 20.23.19.png

さて、この状態で例の

$ docker-compose up

を実行してみましょう。
実行!

こうなります。
スクリーンショット 2019-08-16 20.32.04.png

なんか2つrunningの状態になっていますね。
これが先程docker-compose.ymlファイルで確認した2つのコンテナです。
もうこの状態で2つのサーバがローカルで動いているような状態になっています。

このサーバを停止、再起動したりするのもlazydocker上から簡単にできるので、先の記事を参考にしながらぜひやってみてください。

また、「本当にサーバとして起動している」のを実際に中に入って確認してみたい場合、

$ docker exec -it myapp_myapp_1 /bin/bash

で入ってみることができます。
この操作もlazydocker上からできるのですが、macで利用する場合上下ボタンが効かなくなるんですよね……

閑話休題。

さて、いよいよ http://localhost:3000/ にアクセスしてみましょう。
スクリーンショット 2019-08-16 20.36.21.png

Hello, Laravel!
簡単ですね。

実際のソースコードは先程作った"myapp"ディレクトリに展開されています。
ローカルのコードを仮想環境が共有して使っているイメージですね。なので、ローカルのコードをちゃちゃっといじればブラウザ側のLaravelの動作に即座に反映されます。

この方法で構築すれば、デバッグも可能です。
こちらの記事で完璧にまとめてくださっているので、ぜひお読みください!
Dockerで構築したPHP環境をxdebugでデバッグ(vscode)

今回はこのあたりで。

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

php-master-changes 2019-08-15

この日は 循環参照 GC の実装修正、typo の修正、ArrayObject::__unserialize() で SEGV が起きる問題の修正、SimpleXML::asXML() の引数処理の修正、arginfo の PHP スタブへの移行、sqlite3 のリファクタリング、ドキュメントの更新があった!

2019-08-15

nikic: Fixed bug #78412

nikic: Fix reference printing in GC tracing

cmb69: Update credits_ext.h

zhdaniel: Fix typo

nikic: Fixed bug #78409

nikic: Normalize SimpleXML::asXML() argument handling

duncan3dc: Convert sqlite3 functions arginfo to php stubs

cmb69: Don't repeat yourself

cmb69: Unify ZPP handling in ext/sqlite3

Victor Gazotti: creating stubs for echant ext

cmb69: Update NEWS

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

LaravelでログインしてそのままそのURLに進む方法

Laravelでログイン後に元の画面に戻る方法は探せばそれなりに出てくるけど、
ログイン後に行こうとしてたURLにそのまま行く方法がなかなか見つからなかったので、自己解決した結果を書いておきます。

考え方としてはログイン画面を開く直前に、行こうとしてるURLを残しておいて、ログイン後そこに戻る、という手法を取ります。

さて、未ログインのままログインが必要な画面に行こうとするときにはAuthenticateミドルウェアを通るため、ここでログイン画面へ行こうとするときにURLを保存します。
このとき、URLはセッションに保存しておきます。

app/Http/Middleware/Authenticate.php
    protected function redirectTo($request)
    {
        if (! $request->expectsJson()) {
            session(['url.intended' => url()->current()]);
            return route('login');
        }
    }

そしてLoginControllerのredirectPath()でセッションを見て、
保存されていたURLにリダイレクトすることで、もともと行こうとしてたURLに行けます。

app/Http/Controllers/Auth/LoginController.php
    public 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()で、セッションが空の場合にリファラーを指定してます。

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

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;
}

終わりに

基本的には厳密な比較演算子===を使えば自動キャストは行われないので、前情報通りこちらを使用した方が無難そうです。

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

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

【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ではメール送信結果を受け取ることができます。
しかし受け取り可能なのは送信失敗(バウンス処理、迷惑メール)となった場合のみで成功通知は受け取ることができません。

種別 結果判別可否
送信成功
バウンス処理
迷惑メール

そのため送信後はしばらく待って失敗通知が来ていなければ、おそらく送信成功したのだと判断する必要があり注意が必要となります。

参考

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

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継承先クラスのみアクセス可能
  • このエントリーをはてなブックマークに追加
  • Qiitaで続きを読む

名前をつけるときは予約語に注意

今回出てた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/98165df7bee980ae6a18

MySqlの予約語に注意

MySqlで予約語を使うと、syntax errorが出る
https://qiita.com/ma_me/items/a98842d1cb65bfcd20cf

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

php-master-changes 2019-08-14

この日は ReflectionClass::newInstanceWithoutConstructor() が内部クラスを継承した final クラスに使えない問題の修正、7.2 系と 7.3 系の開発バージョンの引き上げ、arginfo を PHP スタブへ移行する修正があった!

2019-08-14

nikic: Fixed bug #78410

cmb69: Bump version numbers

cmb69: Next will be 7.3.10

sgolemon: Bump for 7.2.23

stephenreay: Added arginfo stub for posix extension

jason-liew: add some stubs for array func in basic_functions

Arkanius: Add some stubs at ctype ext

theodorejb: Add hrtime arginfo stubs

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

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

cmb69: Fix WS

duncan3dc: Add a prefix to differeniate between class methods and functions

duncan3dc: Update the date class arginfo the new format

nikic: Don't destroy properties array with unset GC type

iNem0o: add syslog arginfo stubs

nikic: Fixed bug #78406

nikic: Fixed bug #77191

iNem0o: Add crypt() function's stub

nikic: Generalize delref assertion

nikic: Don't include non-refcounted structures in GC count

nikic: Remove removed nested data from GC count

nikic: Adjust GC count in SPL test

stephenreay: Added zip arginfo stubs

cmb69: Remove dead code

nikic: Mark PCRE locale key as local persistent

nikic: Don't return persistent string from get_cfg_var()

Islam Israfilov: Add inet_ntop and inet_pton stubs

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

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