TP在APP_DEBUG=false的情況下,CLI和WEBSITE會共用同一個~runtimephp導致出錯的問題解決辦法

WBOY
Libérer: 2016-07-29 09:10:26
original
1321 Les gens l'ont consulté

TP若使用了

define('APP_DEBUG',false);
Copier après la connexion

會生成./Runtime/~runtime.php 緩存文件,以後每次調用都會用這個文件來處理
但是若一個項目又使用了CLI,CLI生成的./Runtime/~runtime.php 文件跟website是同一個文件,而且cli生成的./Runtime/~runtime.php文件少了一些定義,例如__ROOT__
if(!IS_CLI) {
    // 当前文件名
    if(!defined('_PHP_FILE_')) {
        if(IS_CGI) {
            //CGI/FASTCGI模式下
            $_temp  = explode('.php',$_SERVER['PHP_SELF']);
            define('_PHP_FILE_',    rtrim(str_replace($_SERVER['HTTP_HOST'],'',$_temp[0].'.php'),'/'));
        }else {
            define('_PHP_FILE_',    rtrim($_SERVER['SCRIPT_NAME'],'/'));
        }
    }
    if(!defined('__ROOT__')) {
        // 网站URL根目录
        if( strtoupper(APP_NAME) == strtoupper(basename(dirname(_PHP_FILE_))) ) {
            $_root = dirname(dirname(_PHP_FILE_));
        }else {
            $_root = dirname(_PHP_FILE_);
        }
        define('__ROOT__',   (($_root=='/' || $_root=='\\')?'':$_root));
    }

    //支持的URL模式
    define('URL_COMMON',      0);   //普通模式
    define('URL_PATHINFO',    1);   //PATHINFO模式
    define('URL_REWRITE',     2);   //REWRITE模式
    define('URL_COMPAT',      3);   // 兼容模式
}
Copier après la connexion

第一個解決辦法,將IS_CLI改成0
define('IS_CLI',PHP_SAPI=='cli'? 1   :   0);
Copier après la connexion

改成
define('IS_CLI',0);
Copier après la connexion

但是問題並沒有解決,雖然生成了defined('__ROOT__'),但是在CLI下生成的
__ROOT__ = .;
而website模式下生成的__ROOT__ = "";
兩者的_PHP_FILE_也不同。雖然code相同。
因此這個方案是不行的。
第二個解決辦法,cli和website使用2個不同的runtime cache文件
在入口文件index.php 添加判斷
$is_cli = PHP_SAPI=='cli' ? 1 : 0;
if (!APP_DEBUG && $is_cli) {
	define('RUNTIME_FILE','./Runtime/~runtime_cli.php');
}
Copier après la connexion

這樣在不同模式下使用各自的runtime文件,不會導致衝突。完美解決!

以上就介绍了TP在APP_DEBUG=false的情況下,CLI和WEBSITE會共用同一個~runtimephp導致出錯的問題解決辦法,包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

Étiquettes associées:
source:php.cn
Déclaration de ce site Web
Le contenu de cet article est volontairement contribué par les internautes et les droits d'auteur appartiennent à l'auteur original. Ce site n'assume aucune responsabilité légale correspondante. Si vous trouvez un contenu suspecté de plagiat ou de contrefaçon, veuillez contacter admin@php.cn
Tutoriels populaires
Plus>
Derniers téléchargements
Plus>
effets Web
Code source du site Web
Matériel du site Web
Modèle frontal
À propos de nous Clause de non-responsabilité Sitemap
Site Web PHP chinois:Formation PHP en ligne sur le bien-être public,Aidez les apprenants PHP à grandir rapidement!