LoginSignup
2
1

More than 3 years have passed since last update.

Laravelの環境変数で改行する

Last updated at Posted at 2019-07-05

環境変数に公開鍵を登録しようとした際に、改行ができないものか調べたのでそのまとめです。

先に結論から

Laravel5.8以上の場合

念の為プロジェクトを作成して確認

$ composer create-project "laravel/laravel=5.8.*" laravel5.8

このように.envの中で改行をして記載することが可能です。

PUBLIC_KEY="-----BEGIN PUBLIC KEY-----
hogehoghoge
-----END PUBLIC KEY-----"

tinkerで確認をしてみても、下記のように取得ができています。

$ php artisan tinker
Psy Shell v0.9.9 (PHP 7.2.14  cli) by Justin Hileman
>>> env('PUBLIC_KEY');
=> """
   -----BEGIN PUBLIC KEY-----\n
   hogehoghoge\n
   -----END PUBLIC KEY-----
   """

Laravel5.7以下の場合

同じく

$ composer create-project "laravel/laravel=5.7.*" laravel5.7

改行をしてみても取得ができていないです。

PUBLIC_KEY="-----BEGIN PUBLIC KEY-----
hogehoghoge
-----END PUBLIC KEY-----"
>>> env('PUBLIC_KEY');
=> "-----BEGIN PUBLIC KEY-----"

\n をenvのkeyに含めている記事もありましたが、そのままですね。
\n が通常の文字列の\nとして扱われているため、envからkeyを取得した上で改行を含めるようにする必要がありそうです。

>>> env('PUBLIC_KEY2');
=> "-----BEGIN PUBLIC KEY-----\nhogehoghoge\n-----END PUBLIC KEY-----"
>>> env('PUBLIC_KEY3');
=> "-----BEGIN PUBLIC KEY-----\nhogehoghoge\n-----END PUBLIC KEY-----"
PUBLIC_KEY2="-----BEGIN PUBLIC KEY-----\nhogehoghoge\n-----END PUBLIC KEY-----"
PUBLIC_KEY3="-----BEGIN PUBLIC KEY-----\\nhogehoghoge\\n-----END PUBLIC KEY-----"

改行前後に含まれる文字がわかっているので、envには改行文字を含めず、phpの正規表現を使って改行文字を含めるようにすれば良さそうです。

PUBLIC_KEY="-----BEGIN PUBLIC KEY-----hogehoghoge-----END PUBLIC KEY-----"
>>> $begin = '-----BEGIN PUBLIC KEY-----';
=> "-----BEGIN PUBLIC KEY-----"
>>> $end = '-----END PUBLIC KEY-----';
=> "-----END PUBLIC KEY-----"
>>>
>>> preg_match("/^$begin(.+)$end$/", env('PUBLIC_KEY'), $match);
=> 1
>>> $publicKey = implode(PHP_EOL, [$begin, $match[1], $end]);
=> """
   -----BEGIN PUBLIC KEY-----\n
   hogehoghoge\n
   -----END PUBLIC KEY-----
   """

phpdotenvを使用している

laravelではphpdotenvというライブラリを使用しています。
こちらのライブラリで、環境変数の改行がサポートされたので、v3からのようです。
[3.0] First-class multiline string support

laravel5.8のプロジェクト作成時にインストールされるphpdotenvのバージョンがv3.4.0

- Installing vlucas/phpdotenv (v3.4.0): Downloading (100%)

laravel5.7のプロジェクト作成時にインストールphpdotenvのバージョンがv2.6.1

- Installing vlucas/phpdotenv (v2.6.1): Loading from cache

そのためlaravel5.8ではenv内で改行ができて、5.7ではできなかったようです。

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1