>백엔드 개발 >PHP 튜토리얼 >laravel-php putenv 함수는 중국어에서는 사용할 수 없습니다

laravel-php putenv 함수는 중국어에서는 사용할 수 없습니다

WBOY
WBOY원래의
2016-10-11 14:23:251354검색

라라벨을 아시는 분은 위 부분을 참고하시고, 모르신다면 구분선 바로 아래로 가세요.

.env의 모든 항목에 대한 예는 다음과 같습니다.
이 "my"로 변경되면
이 "I"로 변경되면 env 함수를 사용하여 정상적으로 값을 얻을 수 있습니다. env 함수를 사용하면 정상적으로 값을 얻을 수 없습니다.

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


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

이것은 "good"과 같은 다른 중국어 단어에서도 발생합니다.
저는 env 함수 소스 코드를 연구했습니다.
제가 발견한 문제는 다음과 같습니다. ;
- --------------이해하고 하지 마세요. Laravel 프레임워크의 구분선 이해-------------------------------------------- --- -----

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

phpinfo의 환경에서 PROJECT_NAME

을 검색할 수 있습니다.
<code>putenv("PROJECT_NAME=我");
phpinfo();</code>

PROJECT_NAME을 phpinfo의 환경에서 찾을 수 없습니다

친애하는 친구 여러분, 왜 그런지 말해주세요. 문제없이 중국어 값을 설정하는 방법은 무엇입니까?

답글 내용:

라라벨을 아시는 분은 위 부분을 참고하시고, 모르신다면 구분선 바로 아래로 가세요.

.env의 모든 항목에 대한 예는 다음과 같습니다.
이 "my"로 변경되면
이 "I"로 변경되면 env 함수를 사용하여 정상적으로 값을 얻을 수 있습니다. env 함수를 사용하면 정상적으로 값을 얻을 수 없습니다.

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


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

이것은 "good"과 같은 다른 중국어 단어에서도 발생합니다.
저는 env 함수 소스 코드를 연구했습니다.
제가 발견한 문제는 다음과 같습니다. ;
- --------------이해하고 하지 마세요. Laravel 프레임워크의 구분선 이해-------------------------------------------- --- -----

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

phpinfo의 환경에서 PROJECT_NAME

을 검색할 수 있습니다.
<code>putenv("PROJECT_NAME=我");
phpinfo();</code>

PROJECT_NAME을 phpinfo의 환경에서 찾을 수 없습니다

친애하는 친구 여러분, 왜 그런지 말해주세요. 문제없이 중국어 값을 설정하는 방법은 무엇입니까?

저도 시도해 본 결과 CGI 환경(4바이트, 일본어 가나의 경우에도 마찬가지)에서 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/ 디렉터리의 모든 envmenv으로 바꿉니다. ($_ENV을 시도했지만 $_SERVER 쓰기에는 영향을 미치지 않습니다. Impact)

참고하시면 됩니다. 일부 사용자가 사용하지 못하도록 방지하기 위해 이렇게 한 것입니다putenv

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.