Heim  >  Artikel  >  php教程  >  Detaillierte Erläuterung der Überlegungen im Zusammenhang mit der SAE-Entwicklung von ThinkPHP

Detaillierte Erläuterung der Überlegungen im Zusammenhang mit der SAE-Entwicklung von ThinkPHP

高洛峰
高洛峰Original
2016-12-28 15:54:001174Durchsuche

In diesem Artikel werden die Überlegungen im Zusammenhang mit der SAE-Entwicklung von ThinkPHP detailliert beschrieben. Teilen Sie es als Referenz mit allen:

Die SAE-Entwicklung von ThinkPHP ist im Grunde die gleiche wie die Standardversion von ThinkPHP. Sie müssen nicht wissen, wie man die SAE-Schnittstelle von ThinkPHP verwendet Engine hat die SAE-Schnittstelle automatisch für Sie integriert. Solange Sie die ThinkPHP-Entwicklung beherrschen, können Sie die SAE-Entwicklung auf Basis von ThinkPHP problemlos beherrschen.

Im Folgenden finden Sie einige Vorsichtsmaßnahmen, die wir bei der Verwendung des SAE-Engine-Entwicklungsprozesses treffen, damit Sie die Entwicklung und Bereitstellung von SAE besser abschließen können.

Konfiguration

Die SAE-Engine verfügt bei der Ausführung über die eigene konventionelle Konfiguration und die proprietäre Konfiguration von SAE. Die Ladereihenfolge der Konfigurationsdateien lautet daher:

Konventionelle Konfiguration->Projektkonfiguration-> ; Konventionelle SAE-Konfiguration –>proprietäre SAE-Konfiguration

Konfigurationselemente in der konventionellen SAE-Konfiguration und der proprietären SAE-Konfiguration überschreiben die Projektkonfiguration.
SAE-Konventionskonfiguration: befindet sich im Engine-Verzeichnis/Sae/Conf/convention_sae.php, das feste Konfigurationselemente für die Datenbankverbindung definiert, wenn das Programm auf SAE ausgeführt wird.
SAE-proprietäre Konfiguration: Sie befindet sich im Conf-Verzeichnis des Projekts. Der Dateiname lautet config_sae.php. Sie können die SAE-Konfiguration hineinschreiben.

Hinweis: Die konventionelle SAE-Konfiguration und die proprietäre SAE-Konfiguration sind einzigartige Konfigurationen für die SAE-Umgebung und werden bei lokaler Ausführung nicht geladen.

Datenbank

Entwickler müssen keine SAE-bezogenen Datenbankkonfigurationselemente in der Projektkonfigurationsdatei (config.php) definieren. Sie müssen nur die Datenbank definieren, zu der während des lokalen Debuggens eine Verbindung hergestellt werden soll. Wenn der Code an SAE übermittelt wird, kann er ausgeführt werden, ohne dass Konfigurationselemente geändert werden müssen, da die SAE-Konventionskonfiguration automatisch die Datenbankkonfiguration in Ihrer Projektkonfigurationsdatei überschreibt.

Wenn der Code auf SAE ausgeführt wird, stellt er eine verteilte Datenbankverbindung her und trennt Lese- und Schreibvorgänge.

Caching

Während des SAE-Entwicklungsprozesses können Sie weiterhin die integrierte Caching-Methode von ThinkPHP für die Verarbeitung verwenden. Das Folgende ist der Unterschied zwischen der SAE-Engine, die unterschiedliche Caching-Methoden auf der lokalen Plattform und der SAE-Plattform verwendet (beachten Sie, dass die SAE-Engine diesen Unterschied automatisch erkennt und verarbeitet):

Detaillierte Erläuterung der Überlegungen im Zusammenhang mit der SAE-Entwicklung von ThinkPHP

The Neue Version von ThinkPHP unterstützt SQL-Caching. Für die Warteschlangenfunktion können wir DB_SQL_BUILD_CACHE konfigurieren, um den SQL-Anweisungs-Parsing-Cache zu aktivieren. Unter der SAE-Plattform wird KVDB zum Speichern des SQL-Cache verwendet, sodass das Konfigurationselement DB_SQL_BUILD_QUEUE nicht funktioniert. Und wenn er unter SAE ausgeführt wird, wird der Counter-Dienst verwendet, um die Anzahl der SQL-Cache-Warteschlangen im Hintergrund der Counter-Verwaltung aufzuzeichnen

http://sae.sina.com.cn/?m=counter

Wenn Sie im Rechner einen großen Wert namens think_queue_out_times sehen, bedeutet das, dass die Anzahl der von Ihnen festgelegten Warteschlangen zu klein ist und Sie das Konfigurationselement DB_SQL_BUILD_LENGTH anpassen müssen.

Datei-Upload

Beim Datei-Upload wird weiterhin die Erweiterungsklassenbibliothek „UploadFile“ zum Hochladen von Dateien verwendet, und die Verwendungsmethode bleibt unverändert. Bei lokaler Ausführung wird derselbe Code in das angegebene Verzeichnis hochgeladen. Bei der Ausführung unter SAE wird der Speicherdienst automatisch zum Hochladen von Dateien in den angegebenen Speicher verwendet. Zuerst müssen Sie auf der SAE-Plattform eine Speicherdomäne erstellen, um hochgeladene Dateien zu speichern:

http://sae.sina.com.cn/?m=storage

Sie können sie erstellen hier Mehrere Domains. Die Domäne, auf die unsere Dateien hochgeladen werden, wird durch den ersten Verzeichnisnamen des Upload-Pfads bestimmt. Beispiel:

$upload->savePath = './Public/Uploads/';

wird in die Domäne mit dem Namen „Öffentlich“ hochgeladen. Sie müssen den Ordner „Uploads“ in dieser Domäne nicht erstellen, der Speicherdienst von SAE erstellt ihn automatisch für Sie.

Problem mit der Bildadresse:

Wir verwenden die UploadFile-Klasse, um Bilder hochzuladen, und die Browseradressen von Bildern lokal und unter SAE sind unterschiedlich. Beispielsweise gibt es ein Bild mit der Adresse „/Public/upload/1.jpg“. /Public ist eine Vorlagenersatzvariable und wird durch die Adresse des Verzeichnisses ersetzt, in dem sich der öffentliche Ordner befindet es durch die Quellcodefunktion des Browsers Was ist der Effekt nach dem Ersetzen? Wie Sie sehen, wird es durch „/Public/upload/1.jpg“ ersetzt. Aber bei SAE liegen die Bilder nicht im Public/Upload-Verzeichnis, sondern im Speicher. Wir müssen /Public/ durch den Domänennamen des Speichers ersetzen, damit er auf SAE normal angezeigt werden kann.

Wir definieren den folgenden Code in der SAE-proprietären Konfigurationsdatei Conf/config_sae.php:

<?php
return array(
 &#39;TMPL_PARSE_STRING&#39;=>array(
   &#39;/Public/upload&#39;=>sae_storage_root(&#39;Public&#39;).&#39;/upload&#39;
 )
);

Auf diese Weise wird es so sein Ersetzen Sie /Public/upload durch die Speicheradresse, und das Bild kann normal auf SAE angezeigt werden.

Problem beim Löschen von Dateien:

Da die hochgeladenen Dateien lokal und in SAE gespeichert sind, können wir die Dateien nicht direkt mit Unlink löschen. Die SAE-Version von ThinkPHP hat die Funktion sae_unlink hinzugefügt, um Kompatibilität zu erreichen. Beispiel:

sae_unlink(&#39;./Public/Uploads/xxx.jpg&#39;);

Bei lokaler Ausführung werden die Bilder im Ordner „Öffentlich/Uploads“ gelöscht. Bei der Ausführung unter SAE werden die Bilder im Speicher gelöscht, dessen Domäne „Öffentlich“ ist. Welche Domian-Datei diese Funktion löscht, wird auch durch den ersten Verzeichnisnamen des Pfads bestimmt.

Bildverarbeitung

Die SAE-Engine führt auch eine automatische Bildverarbeitung durch. Die Unterschiede zwischen der lokalen und der SAE-Plattform sind wie folgt:

Detaillierte Erläuterung der Überlegungen im Zusammenhang mit der SAE-Entwicklung von ThinkPHP

你完全不用去学习怎么用SaeImage生成缩略图,也不用学习SaeVcode服务怎么用,你还是按照以前的方式使用ThinkPHP进行验证码和缩略图功能就可以了。

使用验证码的时候需要注意,在本地运行时验证码默认为数字形式,而在SAE上运行时验证码为数字+字母形式,而且存在字母大小写问题。如果你希望验证码区分大小写的话,需要将验证码统一转化为大写后进行匹配。

如:

if(md5(strtoupper($_POST[&#39;verify&#39;]))!=$_SESSION[&#39;verify&#39;]){
 //验证错误处理代码
}

日志记录

SAE版ThinkPHP同样实现了生成系统日志功能,在本地运行会将日志记录到项目的项目的Runtime/Logs文件夹下,而在SAE上运行会将日志记录到SAE平台的日志中心:

http://sae.sina.com.cn/?m=applog

请在搜索框选择中的下拉菜单处选择“debug”进行查看。

Trace信息

建议在开发程序时配置SHOW_PAGE_TRACE=>true 开启页面Trace信息。开启后,代码在SAE环境下运行时会显示一些SAE独有的Trace信息,有助于我们开发。你可能会到以下trace信息。

模板缓存:Trace信息名称为“[SAE]模板缓存”

在SAE下不会将模板编译缓存生成在Runtime目录下,而是存放在Memcache中。如果你想查看模板编译后的缓存,这里显示的就是模板缓存在Memcache中的缓存名称。你可以在SAE的memcache服务管理平台输入缓存名称得到缓存内容:

http://sae.sina.com.cn/?m=mcmng

注:你看得的缓存内容,都是以一串数字开始,这数字和缓存内容无关,是记录的缓存生成时间。

核心缓存:Trace信息名称为“[SAE]核心缓存”

它记录的是核心编译缓存在Memcache中的缓存名称。如果你要获得核心编译缓存,比如我们要用核心编译缓存代替入口文件的时候。你可以在SAE的Memcache服务管理平台 输入这里记录的缓存名称获得。

注:

在开启调试时不会生成核心编译缓存,如果你获得核心编译缓存,请先关闭调试。

缓存内容开头的数字是记录的缓存生成时间,请将数字去掉后再作为入口文件。

静态缓存:Trace信息名称为“[SAE]静态缓存”

它记录了生成的静态缓存在KVDB中的名称。 目前SAE管理平台没有能直接输入KVDB名称获得内容的地方,大家需要自己写程序获取内容。

注:此Trace信息是在生成静态缓存的时候才会出现。如果你访问到的页面没有执行生成静态缓存的操作时,将不会有此条Trace信息。

隐藏index.php

SAE不支持.htaccess文件,但我们可以使用SAE提供的AppConfig服务实现伪静态。

在你项目的根目录建立config.yaml文件,代码为:

handle:
- rewrite: if(!is_dir() && !is_file() && path~"^(.*)$") goto "index.php/$1"

这样就可以隐藏入口了。

比如这样的地址 http://serverName/index.php/Blog/read/id/1也能通过

http://serverName/Blog/read/id/1访问。

代码横跨性建议

SAE版ThinkPHP,是具有横跨性的,请不要破坏它的横跨性。比如,不要在项目配置文件中写和SAE数据库相关配置项。 自己写代码时,也要尽量做到横跨性,这样就可以让同样的代码既能在SAE下运行,也能在普通环境下运行, 使你在本地调试完后上传到SAE也不用修改任何代码就能运行。

下面是一些保持代码横跨性的建议:

(1)尽量少使用原生的SAE服务

能使用ThinkPHP自带函数替代的,尽量使用ThinkPHP自带函数。比如要使用SAE的KVDB服务,在ThinkPHP中完全可以用F函数代替。如果要使用SAE的Memcache服务,都使用S函数实现。 这样就不会导致你的代码从SAE转移到普通环境后性能很低。

个别SAE服务无法使用ThinkPHP自带函数代替的,才考虑使用原生的SAE服务。

(2)利用IS_SAE常量

ThinkPHP的SAE引擎增加了IS_SAE常量,能判断代码运行环境是普通环境还是SAE环境。如果你有段代码在普通环境和在SAE环境下实现方式不同,你可以使用IS_SAE进行判断后做不同处理或者加载不同的文件。

(3)利用SAE专有文件

在SAE惯例配置中,我们可以看见除了配置了固定的数据库配置项,还有一个SAE_SPECIALIZED_FILES配置项,它定义了系统专有文件。目前已经定义了UploadFile类和Image类的SAE专有文件,所以当我们的代码 import(“@.ORG.UploadFile”) 在本地运行时会按普通方式导入项目下Lib/ORG/UploadFile.class.php文件, 而在SAE上运行是系统检查到UploadFile.class.php有SAE专有文件,它导入的是SAE_SPECIALIZED_FILES配置项中定义的文件地址。这样实现了普通环境和SAE环境下同样的代码导入了不同类库,而类的调用方法都是一样的,只是现实方法不同,这样就能保证了代码的横跨性。

Sie können proprietäre SAE-Dateien auch selbst erstellen. Sie können die proprietären Dateien im selben Verzeichnis wie die normalen Dateien ablegen, sodass das System die proprietären Dateien erkennen kann, ohne das Konfigurationselement SAE_SPECIALIZED_FILE zu definieren. Wenn wir beispielsweise eine Datei mit dem Namen Image_sae.class.php im selben Verzeichnis wie die Datei Image.class.php definieren, wird beim Ausführen auf der System-SAE beim Importieren der Datei Image.class.php Image_sae.class importiert stattdessen .php-Dateien.

Wenn eine Klassenbibliothek beide proprietären Dateien im selben Verzeichnis definiert und auch im Konfigurationselement SAE_SPECIALIZED_FILE definiert ist, werden die proprietären Dateien im selben Verzeichnis zuerst importiert. Wenn Sie eine proprietäre Datei erstellen müssen, wird empfohlen, diese im selben Verzeichnis wie die normale Datei zu erstellen.

Wenn die importierte Klassenbibliothek keine proprietären SAE-Dateien enthält, werden auch normale Dateien importiert, wenn sie unter SAE ausgeführt werden.

Wir können proprietäre SAE-Dateien verwenden, um verschiedene Klassenbibliotheken für die normale Umgebung und die SAE-Umgebung zu kapseln. Die Verwendungsmethoden der Klassenbibliotheken sind jedoch dieselben, sodass der Clientcode der Klassenbibliothek funktionsübergreifend ist .

(4) Verwenden Sie die proprietäre SAE-Konfiguration

Wenn Sie auf unterschiedliche SAE- und normale Umgebungskonfigurationsanforderungen stoßen, können Sie die normale Umgebungskonfiguration in die Projektkonfigurationsdatei Conf/config.php schreiben. und schreiben Sie die von SAE benötigte Konfiguration in die SAE-eigene Konfiguration Conf/config_sae.php.

Ich hoffe, dieser Artikel hilft Ihnen beim Entwerfen von PHP-Programmen basierend auf dem ThinkPHP-Framework.

Ausführlichere Erläuterungen zu den Dingen, die bei der SAE-Entwicklung von ThinkPHP Aufmerksamkeit erfordern, finden Sie auf der chinesischen PHP-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