Heim php教程 php手册 从零开始之ecshop基础篇(19)

从零开始之ecshop基础篇(19)

Jun 13, 2016 am 10:17 AM
ecshop Eingang Belastung reduzieren 功能 existieren 基础 实现 Wille Start 文件 框架 von 目录 null

(为入口文件减负,将入口文件实现的功能,挪到框架的基础类中)

在框架目录增加Framework.class.php

计划:将需要初始化的公共功能,分模块,形成框架基础类的各个方法,分别调用执行,则可以完成项目的初始化功能。

使用静态的方法类完成:(看成功能的集合,而不是图纸设计对象;练习静态使用)

注意,对魔术常量的处理

dirname()函数可以取得一个地址中的路径部分

2
3
'

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
/**
 * 初始化路径常量
 */      }

 

注意:将保存请求参数的变量,让在所有地方都可以被访问到。

2
3
4
5
6
7
8
9
10
11
12
13
14
            }

注意:需要将保存配置信息的数组,全局化。

2
3
4
5
6
7
8
9
/**
 * 初始化配置文件
 */      }

因此,使用时,应该找到全局的config变量:

在初始化默认平台时:

2
define(

 

2
3
4
5
6
7
8
9
10
11
12
13
14
        $action_name();

 

此时自动加载功能:

有函数的实现专程了 类静态方法的实现

但是,PHP只认识一个叫__autoload()的函数,也就是php不能找到这个函数了。

处理方法:

告知php,在你需要找自动加载函数时,找我们定义的自动加载方法即可。

将一个普通函数(或者方法),注册成自动加载功能函数

利用一个php函数:spl_autoload_register();将普通函数(方法)注册成自动加载

参数,需要注册的函数或者方法

参数函数:函数名即可,使用一个字符串即可

参数方法:类(对象)和方法名。使用一个数组,第一个元素类名,第二个元素方法名

spl_autoload_register(array('Framework','userAutoload));

2
3
4
5
6
7
 * 注册自动加载方法
 */     spl_autoload_register( }

注意:自动加载的方法应该是公共的。

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
 * 注册自动加载方法
 */     spl_autoload_register( }
 
   * 自动加载方法
  */               FRAME_PATH .          FRAME_PATH .          FRAME_PATH .     );            } 
                }   
                }
  }

在入口文件,加载Framework.class.php框架基础类,运行run()程序运转

index.php

2
3
4
5
6

判断管理员登陆状态

是否登陆标识(状态)

 

应该如何保存登陆标识?

保存登陆标识的数据特征:

总结:需要一个在同一个浏览器的多次请求间可以将数据传递(共享)处理方案。

难点就在于,php程序(凡事b/s,基于http协议),所有资源的最大生命周期就是脚本周期。

在浏览器上记录数据,最核心的解决方案。

cookie,session,会话技术。

 

 

setcookie()即可完成

setcookie('名字','值')

application/controller/back/AdminController.class.php

indexAction();

 

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
    session_start();
                    $result = $model_admin->checkByCookie();
                            }             jump(        }
    }
    }

 

setcookie(名,值,有效期,有效目录,有效域名)

setcookie第二个,只能字符串

setcookie('name',array('itcast','php'))

2
3
4
$arr = setcookie(setcookie(

此时,在获取该变量时:

$_COOKIE['info']就变成一个有2个元素的数组

$_POST['info'] = array()

默认,浏览器关闭,也称临时cookie

利用setcookie的第三个参数,则可以被配置:使用一个时间戳,来表示有效期

time()获得当前的时间戳。做加减,得到其他时间的时间戳。

典型的设置方法

2
3
4
5
6

 

 

2
3
4
5
'//但是,浏览器端的还是itcast

cookie是保存浏览器端,php通过发出命令,才能在浏览器上保存数据。

浏览器上的cookie

利用firebug上网络面板,监控浏览器发出的请求与接到的响应:

在响应数据内,应该将数据发送的浏览器端,告知浏览器保存该cookie变量:

服务器,利用响应数据的一部分(响应头),将设置的cookie的信息,发送到浏览器:

在浏览器发送的请求数据中将浏览器认为有效的cookie携带到服务器端。

此时,服务器接收的该请求,发现存在cookie数据,利用这个数据,形成$_COOKIE数组,供用户脚本使用

 

 

session与cookie,所解决的问题是相同的。

得到可以在同一个浏览器的多次请求,将数据传递一个方法。

cookie劣势:

数据直接存储在浏览器端,两个显著的问题:

方案:

在服务器上,保存数据。

如何保证数据可以在浏览器的多次请求间传递,并且区分浏览器。

在服务器端,为每个来访的浏览器端,都建一个独立的数据空间。为每个数据空间分配一个唯一的标识,让浏览器保存这个唯一的标识。浏览器每次请求时,携带标识过来,利用标识确定唯一的数据空间

总结:

session技术:将会话数据保存在服务器端,是浏览器端保存存储数据空间标识,浏览器请求时携带标识,服务器负责利用标识,在相应的存储空间内做数据处理。

 

session_start()可以开启

利用预定义变量$_SESSION变量进行操作。增,删,改,查都在$_SESSION上完成。

2
3
4
5
6
7
8

Tips;session技术时基于cookie技术,需要在cookie保存标识

在开启session时,服务器会为浏览器分配一个保存sessionID(session的标识)的cookie变量,保存到浏览器端。

Tips:是一个整站有效的cookie变量

在浏览器的接下来的请求中,都是携带该cookie变量,sessionID到服务器端:

 

默认的:php以文件的形式,保存每个独立的数据空间的。被保存在,服务器端系统的临时目录内。

文件名,以当前的sessionID命名,保证空间唯一性。

可见,保存的时候是学历恶化的结果。

两个基本步骤:

 

 

只有$_SESSION的元素下表才能是数值型的。

2

 

unset($_SESSION['key']);删除$_SESSION内的一个元素

如果删除所有的session数据呢?

$_SESSION = array();

不对的:unset($_SESSION);,不会导致session数据丢失,php内部的session机制,还可以找到已经存在的处理好的session数据,将其写到session数据空间内。

删除session相关的存储文件

session_destroy()函数可以完成

2

但是,删除文件,$_SESSION数组内的数据还在:

但是,在执行session_destroy()后,脚本周期后的写操作,则不执行。

 

如何完全删除一个session的全部数据?

文件,$_SESSION,cookie内的sessionID变量

session_destory();

$_SESSION = array();

setcookie('PHPSESSID','',time() - 1);

 

典型的通过执行session_start()完成

支持,在配置文件中,自动开启

但是,session如果重复开启,则会报告一个错误:

典型的将错误屏蔽了即可

 

 

可以被配置:

session.save_handler php使用的session数据的处理的方式

可以改成user,表示用户自定义

session.save_path

 

 

存储位置不同

敏感度低,需要永久保存的数据,存到cookie内(用户体验)

安全性高,会话周期内存在的数据,保存到session内(数据合法性,合理性,完整性)

session可以保存各种数据类型

 

典型的将登陆验证标识,保存到session中:

application/controller/back/AdminController.class.php

2
3
4
5
6
7
8
9
10
11
12
            jump(    jump(}

 

application/controller/back/IndexController.class.php

2
3
4
5
6
7
8
            jump(        
    }   
}

 

 

记录登陆状态

在登陆成功后,判断是否选择了保存登陆信息:

application/controller/back/AdminController.class.php

signinAction()

2
3
4
    

记录什么格式:

保密,可以被验证

不能保存,后台登陆的信息

至少要成对,可以被验证

设计成:

admin_id

处理过的密码(在md5的基础上,再加密处理)

2
3
4
5
        setcookie(}

application/controller/back/IndexController.class.php

indexAction()

2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
        $result = $model_admin->checkByCookie();
                    $session_start();
            }         jump(    }
}

模型

在AdminModel内增加一个checkByCookie()方法:

application/model/AdminModel.class.php

2
3
4
5
6
7
8
9
10
                }
        db->fetchRow($sql);
}
Erklärung dieser Website
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

Heiße KI -Werkzeuge

Undresser.AI Undress

Undresser.AI Undress

KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover

AI Clothes Remover

Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool

Undress AI Tool

Ausziehbilder kostenlos

Clothoff.io

Clothoff.io

KI-Kleiderentferner

AI Hentai Generator

AI Hentai Generator

Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

R.E.P.O. Energiekristalle erklärten und was sie tun (gelber Kristall)
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
3 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌
WWE 2K25: Wie man alles in Myrise freischaltet
4 Wochen vor By 尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

Notepad++7.3.1

Notepad++7.3.1

Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version

SublimeText3 chinesische Version

Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1

Senden Sie Studio 13.0.1

Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6

Dreamweaver CS6

Visuelle Webentwicklungstools

SublimeText3 Mac-Version

SublimeText3 Mac-Version

Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

So bewerten Sie die Kosteneffizienz der kommerziellen Unterstützung für Java-Frameworks So bewerten Sie die Kosteneffizienz der kommerziellen Unterstützung für Java-Frameworks Jun 05, 2024 pm 05:25 PM

Die Bewertung des Kosten-/Leistungsverhältnisses des kommerziellen Supports für ein Java-Framework umfasst die folgenden Schritte: Bestimmen Sie das erforderliche Maß an Sicherheit und Service-Level-Agreement-Garantien (SLA). Die Erfahrung und das Fachwissen des Forschungsunterstützungsteams. Erwägen Sie zusätzliche Services wie Upgrades, Fehlerbehebung und Leistungsoptimierung. Wägen Sie die Kosten für die Geschäftsunterstützung gegen Risikominderung und Effizienzsteigerung ab.

Was ist die GateToken(GT)-Währung? Einführung in die GT-Münzfunktionen und die Token-Ökonomie Was ist die GateToken(GT)-Währung? Einführung in die GT-Münzfunktionen und die Token-Ökonomie Jul 15, 2024 pm 04:36 PM

Was ist die GateToken(GT)-Währung? GT (GateToken) ist der native Vermögenswert in der GateChain-Kette und die offizielle Plattformwährung von Gate.io. Der Wert von GT-Münzen hängt eng mit der Entwicklung der Ökologie von Gate.io und GateChain zusammen. Was ist GateChain? GateChain wurde 2018 geboren und ist eine neue Generation leistungsstarker öffentlicher Ketten, die von Gate.io eingeführt wurde. GateChain konzentriert sich auf den Schutz der Sicherheit der On-Chain-Assets der Benutzer und die Bereitstellung bequemer dezentraler Transaktionsdienste. Das Ziel von GateChain besteht darin, ein sicheres und effizientes dezentrales Ökosystem für die Speicherung, Verteilung und Transaktion digitaler Assets auf Unternehmensebene aufzubauen. Gatechain hat Original

Wie ist die Lernkurve von PHP-Frameworks im Vergleich zu anderen Sprach-Frameworks? Wie ist die Lernkurve von PHP-Frameworks im Vergleich zu anderen Sprach-Frameworks? Jun 06, 2024 pm 12:41 PM

Die Lernkurve eines PHP-Frameworks hängt von Sprachkenntnissen, Framework-Komplexität, Dokumentationsqualität und Community-Unterstützung ab. Die Lernkurve von PHP-Frameworks ist im Vergleich zu Python-Frameworks höher und im Vergleich zu Ruby-Frameworks niedriger. Im Vergleich zu Java-Frameworks haben PHP-Frameworks eine moderate Lernkurve, aber eine kürzere Einstiegszeit.

Wie wirken sich die Lightweight-Optionen von PHP-Frameworks auf die Anwendungsleistung aus? Wie wirken sich die Lightweight-Optionen von PHP-Frameworks auf die Anwendungsleistung aus? Jun 06, 2024 am 10:53 AM

Das leichte PHP-Framework verbessert die Anwendungsleistung durch geringe Größe und geringen Ressourcenverbrauch. Zu seinen Merkmalen gehören: geringe Größe, schneller Start, geringer Speicherverbrauch, verbesserte Reaktionsgeschwindigkeit und Durchsatz sowie reduzierter Ressourcenverbrauch. Praktischer Fall: SlimFramework erstellt eine REST-API, nur 500 KB, hohe Reaktionsfähigkeit und hoher Durchsatz

So wählen Sie das beste Golang-Framework für verschiedene Anwendungsszenarien aus So wählen Sie das beste Golang-Framework für verschiedene Anwendungsszenarien aus Jun 05, 2024 pm 04:05 PM

Wählen Sie das beste Go-Framework basierend auf Anwendungsszenarien aus: Berücksichtigen Sie Anwendungstyp, Sprachfunktionen, Leistungsanforderungen und Ökosystem. Gängige Go-Frameworks: Gin (Webanwendung), Echo (Webdienst), Fiber (hoher Durchsatz), gorm (ORM), fasthttp (Geschwindigkeit). Praktischer Fall: Erstellen einer REST-API (Fiber) und Interaktion mit der Datenbank (gorm). Wählen Sie ein Framework: Wählen Sie fasthttp für die Schlüsselleistung, Gin/Echo für flexible Webanwendungen und gorm für die Datenbankinteraktion.

Detaillierte praktische Erklärung der Golang-Framework-Entwicklung: Fragen und Antworten Detaillierte praktische Erklärung der Golang-Framework-Entwicklung: Fragen und Antworten Jun 06, 2024 am 10:57 AM

Bei der Go-Framework-Entwicklung treten häufige Herausforderungen und deren Lösungen auf: Fehlerbehandlung: Verwenden Sie das Fehlerpaket für die Verwaltung und Middleware zur zentralen Fehlerbehandlung. Authentifizierung und Autorisierung: Integrieren Sie Bibliotheken von Drittanbietern und erstellen Sie benutzerdefinierte Middleware zur Überprüfung von Anmeldeinformationen. Parallelitätsverarbeitung: Verwenden Sie Goroutinen, Mutexe und Kanäle, um den Ressourcenzugriff zu steuern. Unit-Tests: Verwenden Sie Gotest-Pakete, Mocks und Stubs zur Isolierung sowie Code-Coverage-Tools, um die Angemessenheit sicherzustellen. Bereitstellung und Überwachung: Verwenden Sie Docker-Container, um Bereitstellungen zu verpacken, Datensicherungen einzurichten und Leistung und Fehler mit Protokollierungs- und Überwachungstools zu verfolgen.

Was sind die häufigsten Missverständnisse im Lernprozess des Golang-Frameworks? Was sind die häufigsten Missverständnisse im Lernprozess des Golang-Frameworks? Jun 05, 2024 pm 09:59 PM

Beim Go-Framework-Lernen gibt es fünf Missverständnisse: übermäßiges Vertrauen in das Framework und eingeschränkte Flexibilität. Wenn Sie die Framework-Konventionen nicht befolgen, wird es schwierig, den Code zu warten. Die Verwendung veralteter Bibliotheken kann zu Sicherheits- und Kompatibilitätsproblemen führen. Die übermäßige Verwendung von Paketen verschleiert die Codestruktur. Das Ignorieren der Fehlerbehandlung führt zu unerwartetem Verhalten und Abstürzen.

Wie lese und schreibe ich Dateien gleichzeitig in Golang? Wie lese und schreibe ich Dateien gleichzeitig in Golang? Jun 05, 2024 pm 06:12 PM

Gleichzeitiges Lesen von Dateien: Erstellen Sie eine Goroutine, um Datenblöcke gleichzeitig zu lesen, und verwenden Sie die Pipeline-Kommunikationskoordination. Gleichzeitiges Schreiben von Dateien: Verwenden Sie Goroutine, um Daten zu schreiben, und verwenden Sie einen Mutex, um den Schreibvorgang zu schützen.

See all articles