>  기사  >  PHP 프레임워크  >  thinkphp5.1은 추가 기능을 지원하나요?

thinkphp5.1은 추가 기능을 지원하나요?

藏色散人
藏色散人원래의
2022-12-12 09:38:301877검색

thinkphp5.1은 extra를 지원하지 않습니다. thinkphp5.1의 config 기능은 extra에 대한 지원을 취소했습니다. "function editConfig($arr = [], $user='admin'){...}을 붙여넣을 수 있습니다. " code into 이 함수는 앱 또는 애플리케이션 폴더의 common.php에서 전역적으로 사용할 수 있습니다.

thinkphp5.1은 추가 기능을 지원하나요?

이 튜토리얼의 운영 환경: Windows 7 시스템, ThinkPHP 버전 5, Dell G3 컴퓨터.

thinkphp5.1은 추가 기능을 지원하나요?

지원되지 않습니다.

ThinkPHP5.1은 파일을 구성 파일로 사용합니다

ThinkPHP5.1은 파일을 구성 파일로 사용합니다. 함정 기록

Tp5.1(제한된 버전)을 앱 배경으로 사용하면 사용자가 작업의 모든 단계에서 자주 요청합니다. 데이터베이스에 액세스하려면 작업의 모든 단계에서 구성 구성 테이블에 액세스해야 합니다. 자주 읽으면 데이터베이스에 많은 부담이 가해지며 백그라운드에서 트래픽을 모니터링한 결과 거의 30%의 요청이 액세스하고 있는 것으로 나타났습니다. config 테이블을 로컬에서 수정하기로 했습니다.

하지만 다양한 정보를 검색한 결과 Tp5에서 제공하는 Config::set() 함수를 찾을 수 없었습니다. .1은 구성 파일을 동적으로 수정할 수만 있으며 이 컨트롤러로 제한됩니다. 실제 구성은 변경되지 않았으며 이는 분명히 우리의 요구 사항을 충족하지 않습니다.

여러 소스를 참조한 결과 이 ​​기사가 가장 적합하다는 것을 알았습니다.

config 함수에 들어가보니 Tp5.1에서 추가 지원이 취소된 걸 발견해서 직접 다시 작성했습니다

더 이상 말이 필요 없이 그냥 과격하게 코딩하면 됩니다. .

/**
 * 修改扩展配置文件
 * @param array  $arr  需要更新或添加的配置
 * @param string $user 修改人
 * @return bool
 */
function editConfig($arr = [] ,$user='admin')
{
    if (is_array($arr)) {
        //获取文件名
        $filename = 'business.php';
        //获取配置文件环境变量位置(请确保开启权限,如若报错,请改为绝对路径)
        $filepath = Env::get('CONFIG_PATH'). $filename;
        //判定配置文件是否存在
        if (!file_exists($filepath)  ) {
            if(!fopen($filepath, "w")){
                return 'PermissionError1';
            }
        }
        //判定权限是否足够
        if (!is_writable($filepath)) {
            return 'PermissionError2';
        }
        //遍历整个配置文件
        $conf = include $filepath;
        foreach ($arr as $key => $value) {
            $conf[$key] = $value;
        }
        //记录修改者
        $time = date('Y/m/d H:i:s');
        $str = "<?php\r\n/**\r\n * 由".$user."修改.\r\n * $time\r\n */\r\nreturn [\r\n";
        //写入配置文件
        foreach ($conf as $key => $value) {
            if(is_array($value)){
                $str.="\t&#39;$key&#39;=>[\r\n";
                foreach ($value as $ikey=>$r) {
                    if(is_numeric($ikey)){
                        $str .= "\t\t&#39;$r&#39;,";
                        $str .= "\r\n";
                    }else{
                        $str .= "\t\t&#39;$ikey&#39; => &#39;$r&#39;,";
                        $str .= "\r\n";
                    }
                }
                $str = rtrim($str,&#39;,&#39;);
                $str .= "\t],"."\r\n";
            } else{
                $str .= "\t&#39;$key&#39; => &#39;$value&#39;,";
                $str .= "\r\n";
            }
        }
        $str .= &#39;];&#39;;
        //关闭文件
        $result = file_put_contents($filepath, $str);
        if($result){
            return &#39;success&#39;;
        } else {
            return $result;
        }
    } else {
        return &#39;error&#39;;
    }
}

이 코드를 앱(또는 애플리케이션) 폴더의 common.php에 붙여넣으면 전역 기능을 사용하여 구성 파일을 수정할 수 있습니다.

예:

다음의 config 폴더에 business.php 파일을 만듭니다. 웹 사이트의 루트 디렉터리(읽기 및 쓰기 권한에 주의),

config 폴더 아래 컨트롤러

  public function setBusiness(){
        $arr = array(
            "WEB" => [
                "web_status"=>&#39;1&#39;,
                1,3,4
            ],
        );
        $result=editConfig($arr,&#39;admin123&#39;);
        if($result==&#39;success&#39;){
            echo (&#39;修改成功&#39;);
        }elseif($result==&#39;error&#39;){
            echo (&#39;修改失败&#39;);
        }
        elseif($result==&#39;PermissionError&#39;){
            echo (&#39;文件无权限,请联系管理员&#39;);
        }
    }

에서 수정된 기능을 호출합니다. 구성 파일은

<?php
/**
 * 由admin123修改.
 * 2019/11/22 13:00:27
 */
return [
&#39;WEB&#39;=>[
&#39;web_status&#39; => &#39;1&#39;,
&#39;1&#39;,
&#39;3&#39;,
&#39;4&#39;,
],
];

로 수정됩니다. 다음으로 다른 컨트롤러에서 다음을 수행할 수 있습니다. 구성 규칙을 직접 사용하여 다양한 구성 파일을 얻을 수 있습니다. 특정 규칙에 대해서는 TP5.1 수동 구성 획득 장으로 이동하세요.

논리 프로그램이 파일에서 직접 구성을 읽고 사용자가 구성을 설정할 수 있습니다. 캐시를 저장하거나 redis에서 직접 읽으세요.

추천 학습: "thinkPHP 비디오 튜토리얼"

위 내용은 thinkphp5.1은 추가 기능을 지원하나요?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

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