laravel - php的putenv函数中文不能使用的问题
如果了解laravel可以顺便看下上面这块;如果不了解;直奔分割线以下即可;
.env中的任何一项这里以MAIL_DRIVER为例
改为“我的” 用env函数 可以正常获取到值;
改为“我”用env函数 就无法正常获取了;
<code>MAIL_DRIVER=我 var_dump(env(MAIL_DRIVER'')); // NULL MAIL_DRIVER=我的 var_dump(env(MAIL_DRIVER'')); // 我的</code>
其他的一些中文比如说“好” 也会出现这种情况;
不得不说;laravel博大精深;研究了会env函数源码;
最后定位到的问题是;
-------------------------------------------------了解和不了解laravel框架的分割线------------------------------------------------
<code>putenv("PROJECT_NAME=我的"); phpinfo();</code>
在phpinfo中的Environment 是可以搜索到 PROJECT_NAME
<code>putenv("PROJECT_NAME=我"); phpinfo();</code>
在phpinfo中的Environment 是可以搜索不到 PROJECT_NAME
请教亲们;这是为什么呢?如何无障碍的设置中文值?
回复内容:
如果了解laravel可以顺便看下上面这块;如果不了解;直奔分割线以下即可;
.env中的任何一项这里以MAIL_DRIVER为例
改为“我的” 用env函数 可以正常获取到值;
改为“我”用env函数 就无法正常获取了;
<code>MAIL_DRIVER=我 var_dump(env(MAIL_DRIVER'')); // NULL MAIL_DRIVER=我的 var_dump(env(MAIL_DRIVER'')); // 我的</code>
其他的一些中文比如说“好” 也会出现这种情况;
不得不说;laravel博大精深;研究了会env函数源码;
最后定位到的问题是;
-------------------------------------------------了解和不了解laravel框架的分割线------------------------------------------------
<code>putenv("PROJECT_NAME=我的"); phpinfo();</code>
在phpinfo中的Environment 是可以搜索到 PROJECT_NAME
<code>putenv("PROJECT_NAME=我"); phpinfo();</code>
在phpinfo中的Environment 是可以搜索不到 PROJECT_NAME
请教亲们;这是为什么呢?如何无障碍的设置中文值?
我也试了一下,发现只要在 cgi 环境下调用 putenv('PROJECT_NAME=掉')
之类的(四个字节,日文假名也一样)都会失败返回 false
,而在 cli 环境下没问题:
<code>➜ ~ $ php -r "var_dump(putenv('PROJECT_NAME=我')); echo getenv('PROJECT_NAME');" bool(true) 我 </code>
我也觉得挺迷的,Google 了一下也找不着类似情况,期待其他人有好的答案。
不过既然题主用的是 Laravel,并且不是特别拘泥于 putenv
,只是想顺利拿到 .env
中的值的话,可以用一些小技巧:
在你自己项目的 helpers.php
中(或者其他放自定义帮助函数的地方,没有就新建)添加一个这个函数:
<code>if (! function_exists('menv')) { /** * Gets the value of an environment variable by getenv() or $_ENV. * * @param string $key * @param mixed $default * @return mixed */ function menv($key, $default = null) { if (function_exists('putenv') && function_exists('getenv')) { // try to read by getenv() $value = getenv($key); if ($value === false) { return value($default); } } else { // try to read from $_ENV or $_SERVER if (isset($_ENV[$key])) { $value = $_ENV[$key]; } elseif (isset($_SERVER[$key])) { $value = $_SERVER[$key]; } else { return value($default); } } switch (strtolower($value)) { case 'true': case '(true)': return true; case 'false': case '(false)': return false; case 'empty': case '(empty)': return ''; case 'null': case '(null)': return; } if (strlen($value) > 1 && Str::startsWith($value, '"') && Str::endsWith($value, '"')) { return substr($value, 1, -1); } return $value; } }</code>
自定义一个新的获取环境变量的函数,并且把 config/
目录下的所有 env
替换成 menv
即可(我试过 $_ENV
,$_SERVER
的写入不会受到影响)
可以参考这里,本来是我为了有些用户无法使用 putenv
所做的处理就是了

Alat AI Hot

Undresser.AI Undress
Apl berkuasa AI untuk mencipta foto bogel yang realistik

AI Clothes Remover
Alat AI dalam talian untuk mengeluarkan pakaian daripada foto.

Undress AI Tool
Gambar buka pakaian secara percuma

Clothoff.io
Penyingkiran pakaian AI

AI Hentai Generator
Menjana ai hentai secara percuma.

Artikel Panas

Alat panas

Notepad++7.3.1
Editor kod yang mudah digunakan dan percuma

SublimeText3 versi Cina
Versi Cina, sangat mudah digunakan

Hantar Studio 13.0.1
Persekitaran pembangunan bersepadu PHP yang berkuasa

Dreamweaver CS6
Alat pembangunan web visual

SublimeText3 versi Mac
Perisian penyuntingan kod peringkat Tuhan (SublimeText3)

Topik panas

PHP 8.4 membawa beberapa ciri baharu, peningkatan keselamatan dan peningkatan prestasi dengan jumlah penamatan dan penyingkiran ciri yang sihat. Panduan ini menerangkan cara memasang PHP 8.4 atau naik taraf kepada PHP 8.4 pada Ubuntu, Debian, atau terbitan mereka

Untuk bekerja dengan tarikh dan masa dalam cakephp4, kami akan menggunakan kelas FrozenTime yang tersedia.

Untuk mengusahakan muat naik fail, kami akan menggunakan pembantu borang. Di sini, adalah contoh untuk muat naik fail.

CakePHP ialah rangka kerja sumber terbuka untuk PHP. Ia bertujuan untuk menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP adalah berdasarkan seni bina seperti MVC yang berkuasa dan mudah difahami. Model, Pandangan dan Pengawal gu

Kod Visual Studio, juga dikenali sebagai Kod VS, ialah editor kod sumber percuma — atau persekitaran pembangunan bersepadu (IDE) — tersedia untuk semua sistem pengendalian utama. Dengan koleksi sambungan yang besar untuk banyak bahasa pengaturcaraan, Kod VS boleh menjadi c

Pengesah boleh dibuat dengan menambah dua baris berikut dalam pengawal.

CakePHP ialah rangka kerja MVC sumber terbuka. Ia menjadikan pembangunan, penggunaan dan penyelenggaraan aplikasi lebih mudah. CakePHP mempunyai beberapa perpustakaan untuk mengurangkan beban tugas yang paling biasa.

Log masuk CakePHP adalah tugas yang sangat mudah. Anda hanya perlu menggunakan satu fungsi. Anda boleh log ralat, pengecualian, aktiviti pengguna, tindakan yang diambil oleh pengguna, untuk sebarang proses latar belakang seperti cronjob. Mengelog data dalam CakePHP adalah mudah. Fungsi log() disediakan
