Heim  >  Artikel  >  Backend-Entwicklung  >  Detaillierte Erläuterung der Beispiele für das Zusammenführen statischer PHP-Dateien

Detaillierte Erläuterung der Beispiele für das Zusammenführen statischer PHP-Dateien

怪我咯
怪我咯Original
2017-07-10 11:32:361361Durchsuche

Der Artikel stellt detailliert die relevante Konfiguration und den vollständigen Code vor, der zum Zusammenführen statischer Dateien in PHP erforderlich ist, sowie Anweisungen zur Verwendung. Er wird hier Freunden in Not empfohlen.

PHP konfigurieren. ini

Konfigurationselemente ändern (erforderlich) auto_prepend_file = "C:xampphtdocsauto_prepend_file.php"

Konfigurationselemente ändern (optional)allow_url_include = Ein

Auto_prepend_file.php-Dateiinhalt

Der Code lautet wie folgt:

<?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);
}
?>

Verwendung

Der Code lautet wie folgt:

"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);
?>

Verwendung 828a513bd4bb7eca01338a12f2f88bb42cacc6d41bbb37262a98f745aa00fbf0

Bevor das Produkt online geht, verwenden Sie die Batch--Verarbeitungsdatei für die Verarbeitung und erledigen dabei hauptsächlich zwei Arbeitsaspekte
1. Geben Sie „*.js.php“ in die Datei „*.js.php“ aus. js“-Datei und löschen Sie „*.js.php“. Befehlszeile: php *.js.php > *.js
2. Ersetzen Sie den Verweis auf „*.js.php“ in der HTML-Seite durch „*.js“. preg_replace()

PS: Die Funktion import_static löst das Problem der include()-Verarbeitung relativer Pfade in PHP.

Die folgenden PHP-Codebeispiele helfen Benutzern beim Zurücksetzen ihrer Passwörter. requestResetPassword empfängt die Anfrage des Benutzers, sein Passwort zurückzusetzen, und führt entsprechende Prüfungen durch. Zur besseren Wiederverwendbarkeit habe ich den Vorgang zum Zurücksetzen des Passworts separat einer neuen Funktion „resetPassword“ zugewiesen. Nach dem Ändern des Passworts habe ich sendEmail aufgerufen, um eine Benachrichtigungs-E-Mail an den Benutzer zu senden.

/**
 * 用户请求重置密码的接收器
 */
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() ;
}

Das Problem besteht nun darin, dass diese drei Funktionen alle die Funktion checkUserExists verwenden, um zu überprüfen, ob der Benutzer nicht existiert. Die Datenbank wird dreimal abgefragt, was zusätzlichen Aufwand mit sich bringt.
Wenn Sie alle checkUserExists unter den drei entfernen möchten, scheint dies möglich. Wenn jedoch einige Funktionen später „resetPassword“ oder „sendEmail“ aufrufen und der Benutzer nicht existiert, kann es zu einem Fehler im System kommen.
Eine andere Lösung besteht darin, die Logik von resetPassword in requestResetPassword zu schreiben und etwas später auch die Logik von sendEmail. Auf diese Weise werden Funktionsaufrufe reduziert, Datenbankabfragen werden einmalig und die Leistung wird verbessert. Die Funktionen zum Zurücksetzen von Passwörtern und zum Versenden von E-Mails sind jedoch nicht wiederverwendbar und verstoßen gegen das Prinzip der Einzelverantwortung, und auch die Komplexität des Codes wird zunehmen.
Da die Funktionstrennung und die Wiederverwendbarkeit jedoch sehr gut sind, können Sie die Verwendung von Caching zur Reduzierung von Datenbankabfragen in Betracht ziehen Ändern Sie auch die Funktion getUserInfo auf die gleiche Weise.

Hier können Sie sehen, dass es sehr einfach ist, die Leistung zu verbessern, wenn die Wiederverwendbarkeit von Code verbessert wird, und dass auch Leistungsengpässe leicht entdeckt und geändert werden können.
/**
 * 检查某个用户是否存在
 */
function checkUserExists( $userid ) {
    //增加一个缓存,用以记录检查用户的结果
    static $cache = array();

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

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

    return $cache[ $userid ];
}
Obwohl dieses Beispiel keinen großen Einfluss auf die Leistung hat, gibt es andere, die einen größeren Einfluss haben, wie z. B. Traversal. Ich kann den Traversal zur Wiederverwendung in eine Funktion kapseln und mehrmals verwenden. Diese Ausgaben hatten keinen so großen Einfluss auf mein Projekt wie erwartet oder waren minimal. Deshalb verbringe ich meine Zeit lieber damit, die Wiederverwendbarkeit und Wartbarkeit des Codes zu verbessern, anstatt mir Gedanken darüber zu machen, dass noch mehr Leistung verschwendet wird. Sollte die tatsächliche Leistung wirklich nicht den Anforderungen genügen, kann auch über eine Erhöhung der Hardware-Ausstattung nachgedacht werden.

Das obige ist der detaillierte Inhalt vonDetaillierte Erläuterung der Beispiele für das Zusammenführen statischer PHP-Dateien. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

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