Maison >développement back-end >tutoriel php >Explication détaillée des exemples de fichiers statiques de fusion PHP

Explication détaillée des exemples de fichiers statiques de fusion PHP

怪我咯
怪我咯original
2017-07-10 11:32:361396parcourir

L'article présente en détail la configuration pertinente et le code complet requis pour la fusion de fichiers statiques en PHP, ainsi que les instructions d'utilisation. Il est très détaillé. Il est recommandé ici aux amis dans le besoin

Configurer PHP. ini

Modifier les éléments de configuration (obligatoire) auto_prepend_file = "C:xampphtdocsauto_prepend_file.php"

Modifier les éléments de configuration (facultatif) allow_url_include = On

contenu du fichier auto_prepend_file.php

Le code est le suivant :

<?php
/**
 * 引入static文件
 * @param {array|string} 相对路径
 * @param {string} 当前执行脚本所在的路径FILE
 *
 */
function import_static($files, $path=NULL){
    // 更改当前脚本的执行路径
    $old_dir = getcwd();
    $tmp_dir = (isset($path)) ? dirname($path): dirname(FILE);
    chdir($tmp_dir);
    // 整理包含文件
    if (!is_array($files)) {
        $tmp = array();
        $tmp[] = $files;
        $files = $tmp;
    }
    // 发送头信息
    if (isset($files[0])) {
        if (stripos($files[0], &#39;.js&#39;) !== false) {
            $header_str = &#39;Content-Type:   text/javascript&#39;;
        } elseif (stripos($files[0], &#39;.css&#39;) !== false) {
            $header_str = &#39;Content-Type:   text/css&#39;;
        }
        if (!ob_get_contents()) {
            header($header_str);
        }
    }
    // 引入包含文件
    foreach($files as $key=>$value) {
        require_once($value);
    }
    // 改回当前脚本的执行路径
    chdir($old_dir);
}
?>

Comment utiliser

Le code est le suivant :

"a.js"、"b.js"和"../c.js"是待合并的JS文件,将其合并为base.js.php,则base.js.php中的代码如下:
<?php
    import_static(array(
        &#39;a.js&#39;,
        &#39;b.js&#39;,
        &#39;../c.js&#39;,
        &#39;../moduleB/all.js.php&#39;    // 也可引用.php文件
    ), FILE);
?>

Utiliser 8a48ee7b05a2c50727306b3a1a3296a32cacc6d41bbb37262a98f745aa00fbf0

Avant que le produit ne soit mis en ligne, utilisez le fichier de traitement par lots pour le traitement, en effectuant principalement deux aspects du travail
1 Sortie "*.js.php" vers le "*. js" et supprimez "*.js.php". Ligne de commande : php *.js.php > *.js
2. Remplacez la référence à "*.js.php" dans la page HTML par "*.js". preg_replace()

PS : La fonction import_static résout le problème du traitement include() des chemins relatifs en PHP.

L'exemple de code PHP suivant fonctionne pour aider les utilisateurs à réinitialiser leur mot de passe. requestResetPassword reçoit la demande de l'utilisateur pour réinitialiser son mot de passe et effectue les vérifications correspondantes. Pour une meilleure réutilisation, j'ai attribué séparément l'opération de réinitialisation du mot de passe à une nouvelle fonction resetPassword. Après avoir modifié le mot de passe, j'ai appelé sendEmail pour envoyer un e-mail de notification à l'utilisateur.

/**
 * 用户请求重置密码的接收器
 */
function requestResetPassword() {
    //检查用户是否存在
    if( !checkUserExists( $_GET[&#39;userid&#39;] ) ) {
        exit(&#39;抱歉,用户不存在,请确认用户帐号。&#39;);
    }
    resetPassword( $_GET[&#39;userid&#39;] );
    //最后向用户发送一封邮件
    sendEmail( $_GET[&#39;userid&#39;], &#39;重置密码成功&#39;, &#39;新的密码是xxxx&#39; );
    exit(&#39;新密码已经发送到你的邮箱。&#39;);
}

/**
 * 帮助用户重置密码
 */
function resetPassword( $userid ) {
    //检查用户是否存在
    if( !checkUserExists( $userid ) ) {
        return false;
    }

    //进行重置用户密码的操作
    //略...
    return true;
}

/**
 * 向用户发送一封邮件
 */
function sendEmail( $userid, $title, $content ) {
    //检查用户是否存在
    if( !checkUserExists( $userid ) ) {
        return false;
    }

    //发送邮件操作
    //略...
    return true;
}

/**
 * 检查某个用户是否存在
 */
function checkUserExists( $userid ) {
    $user = getUserInfo( $userid );
    return !empty( $user );
}

/**
 * 获取某个用户的数据
 */
function getUserInfo( $userid ) {
    //假设我有一个query的函数,它用来查询数据库并返回数据
    $user = query( "SELECT * FROM `user` WHERE `uid`=" . intval( $userid ) );
    return is_array( $user ) ? $user : array() ;
}

Le problème maintenant est que ces trois fonctions utilisent toutes la fonction checkUserExists en même temps pour vérifier que l'utilisateur n'existe pas. La base de données est interrogée trois fois, ce qui entraîne une surcharge supplémentaire.
Si vous souhaitez supprimer un checkUserExists parmi les trois, cela semble possible. Cependant, si certaines fonctions appellent ultérieurement resetPassword ou sendEmail et que l'utilisateur n'existe pas, une erreur peut se produire dans le système.
Une autre solution consiste à écrire la logique de resetPassword dans requestResetPassword, et un peu plus tard, à écrire également la logique de sendEmail. De cette façon, les appels de fonction sont réduits, les requêtes de base de données deviennent uniques et les performances sont améliorées. Cependant, les fonctions de réinitialisation des mots de passe et d'envoi d'e-mails ne seront pas réutilisables et violeront le principe de responsabilité unique, et la complexité du code augmentera également.
Cependant, comme la séparation et la réutilisabilité des fonctions sont très bonnes, si les performances réelles sont affectées, vous pouvez envisager d'utiliser la mise en cache pour réduire les requêtes de base de données. J'ai modifié la fonction checkUserExists qu'ils partagent :

/**
 * 检查某个用户是否存在
 */
function checkUserExists( $userid ) {
    //增加一个缓存,用以记录检查用户的结果
    static $cache = array();

    //检查当前用户是否已经检查过一次
    if( isset( $cache[ $userid ] ) ) {
        return $cache[ $userid ];
    }

    $user = getUserInfo( $userid );
    //把结果记录到缓存中
    $cache[ $userid ] = !empty( $user );

    return $cache[ $userid ];
}

Vous pouvez. modifiez également la fonction getUserInfo de la même manière.
Vous pouvez voir ici que lorsque la réutilisabilité du code est améliorée, il est très simple d'améliorer les performances, et les goulots d'étranglement des performances sont également faciles à découvrir et à modifier.
Bien que cet exemple n'ait pas un impact suffisamment important sur les performances, certains ont un impact plus important, comme le parcours, je peux encapsuler le parcours dans une fonction pour le réutiliser et l'utiliser plusieurs fois. Ces dépenses n’ont pas eu un impact aussi important que prévu sur mon projet, ou alors elles ont été minimes. Je préfère donc consacrer mon temps à améliorer la réutilisabilité et la maintenabilité du code, plutôt que de me soucier de gaspiller davantage de performances. Si les performances réelles ne répondent vraiment pas aux exigences, vous pouvez également envisager d'augmenter la configuration matérielle.

Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!

Déclaration:
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