Heim >Backend-Entwicklung >PHP-Tutorial >Die Putenv-Funktion von laravel-php kann nicht auf Chinesisch verwendet werden

Die Putenv-Funktion von laravel-php kann nicht auf Chinesisch verwendet werden

WBOY
WBOYOriginal
2016-10-11 14:23:251354Durchsuche

Wenn Sie Laravel kennen, können Sie einen Blick auf den obigen Abschnitt werfen. Wenn Sie dies nicht tun, gehen Sie einfach direkt unter die Trennlinie Für jedes Element in

.env, hier ist MAIL_DRIVER als Beispiel. Wenn

in „my“ geändert wird, kann der Wert normal mit der env-Funktion abgerufen werden, wenn
in „I“ geändert wird. Der Wert kann nicht normal mit der env-Funktion ermittelt werden

Dies wird auch bei einigen anderen chinesischen Wörtern passieren;
<code>MAIL_DRIVER=我
var_dump(env(MAIL_DRIVER''));  // NULL


MAIL_DRIVER=我的
var_dump(env(MAIL_DRIVER''));  // 我的</code>
Ich muss sagen, dass Laravel den Quellcode der Env-Funktion studiert hat ;

- ---------------------------------------Verstehen und nicht Verstehe die Trennlinie des Laravel-Frameworks ------------------------------------------ --- -----


PROJECT_NAME kann in phpinfo nach Umgebung gesucht werden

<code>putenv("PROJECT_NAME=我的");
phpinfo();</code>

PROJECT_NAME kann in der Umgebung in phpinfo nicht gefunden werden

<code>putenv("PROJECT_NAME=我");
phpinfo();</code>
Bitte sagen Sie mir, liebe Freunde, warum ist das so? Wie kann man den chinesischen Wert problemlos festlegen?

Antwortinhalt:

Wenn Sie Laravel kennen, können Sie einen Blick auf den obigen Abschnitt werfen. Wenn Sie ihn nicht kennen, gehen Sie einfach direkt unter die Trennlinie Für jedes Element in

.env ist hier MAIL_DRIVER als Beispiel aufgeführt. Wenn

in „my“ geändert wird, kann der Wert normal mit der env-Funktion abgerufen werden. Der Wert kann nicht normal mit der env-Funktion ermittelt werden

Dies wird auch bei einigen anderen chinesischen Wörtern passieren;

Ich muss sagen, dass Laravel den Quellcode der Env-Funktion studiert hat ;
- ---------------------------------------Verstehen und nicht Verstehe die Trennlinie des Laravel-Frameworks ------------------------------------------ --- -----

<code>MAIL_DRIVER=我
var_dump(env(MAIL_DRIVER''));  // NULL


MAIL_DRIVER=我的
var_dump(env(MAIL_DRIVER''));  // 我的</code>
PROJECT_NAME kann in phpinfo nach Umgebung gesucht werden



PROJECT_NAME kann in der Umgebung in phpinfo nicht gefunden werden

Bitte sagen Sie mir, liebe Freunde, warum ist das so? Wie kann man den chinesischen Wert problemlos festlegen?
<code>putenv("PROJECT_NAME=我的");
phpinfo();</code>

Ich habe es auch ausprobiert und festgestellt, dass es fehlschlägt und
<code>putenv("PROJECT_NAME=我");
phpinfo();</code>
zurückgibt, solange ich

oder ähnliches in der CGI-Umgebung aufrufe (vier Bytes, das Gleiche gilt für japanisches Kana), aber das gibt es Kein Problem in der CLI-Umgebung:

Ich finde es auch ziemlich verwirrend, nachdem ich bei Google gesucht habe. Ich hoffe, dass andere Leute gute Antworten haben können.

putenv('PROJECT_NAME=掉')Aber da der Fragesteller Laravel verwendet und sich nicht besonders mit false beschäftigt, sondern nur den Wert in

reibungslos erhalten möchte, können Sie einige Tipps verwenden:
<code>➜  ~ $ php -r "var_dump(putenv('PROJECT_NAME=我')); echo getenv('PROJECT_NAME');"
bool(true)
我 </code>

Fügen Sie diese Funktion in

Ihres eigenen Projekts hinzu (oder an anderen Orten, an denen benutzerdefinierte Hilfsfunktionen platziert werden. Wenn nicht, erstellen Sie eine neue):

putenvPassen Sie eine neue Funktion an, um Umgebungsvariablen abzurufen, und ersetzen Sie alle .env im Verzeichnis

durch

(ich habe helpers.php ausprobiert, und das Schreiben von

wird dadurch nicht beeinträchtigt)
<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>

Sie können sich darauf beziehen. Das habe ich getan, um zu verhindern, dass einige Benutzer config/env verwenden können

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn