suchen
HeimBackend-EntwicklungPHP-TutorialEinige hervorragende Praktiken des PHP-Frameworks Codeigniter

Vor Kurzem plane ich, ein von anderen mit Codeigniter geschriebenes Projekt zu übernehmen und zu verbessern. Obwohl ich CI schon früher verwendet habe, habe ich es ganz nach meinen eigenen Wünschen geschrieben und einige der CI-Routinen nicht befolgt. Bei Projekten, die von der Öffentlichkeit genutzt werden, ist es am besten, die Rahmenspezifikationen zu befolgen. Daher ist es besser, sie zusammenzufassen, um andere nicht zum Lachen zu bringen, wenn sie sie in Zukunft übernehmen.

1. Das erste ist MVC

Wenn Sie MVC noch nicht kennen, sollten Sie es so schnell wie möglich lernen. Sie werden schnell den Datenzugriff im Modell und die Geschäftslogik erfahren Controller und der Wert des Schreibens von HTML-Code in Ansichten. Sie runzeln vielleicht die Stirn, wenn Sie noch nie mit diesem Modell programmiert haben, aber Sie sollten sich die Chance geben, es auszuprobieren.

Als Faustregel gilt, weniger Dinge in den Controller zu stecken und sich an das DRY-Prinzip zu erinnern: Erfinden Sie das Rad nicht neu. Wenn Sie denselben Code an mehr als einer Stelle schreiben, sollten Sie versuchen, je nach Typ eine Bibliothek, einen Helfer oder ein Modell zu schreiben. Beispielsweise wird die Datenbankverbindungsklasse häufig verwendet und daher in ein Modell umgewandelt (vom System bereitgestellt).

Sobald Sie die Essenz von MVC verstanden haben, wird dies zur Gewohnheit und Sie werden vom prägnanten Code von MVC stark profitieren.

Ein Prinzip ist: Komplexe Operationen dem Modell überlassen. Controller ist eher wie ein Architekt. Model ist harte Arbeit. Der Blick ist der Maler. Der Controller muss nur Dinge in das Modell werfen und muss sich nicht darum kümmern, ob die Daten abnormal sind, und gibt dann ein Flag und entsprechende Daten zurück. Auf diese Weise wird die MVC-Architektur widergespiegelt.

Das Modell ist eigentlich wie ein Elektrogerät, z. B. ein Mikrowellenherd. Je einfacher es zu bedienen ist, desto mehr Leute mögen es. (Legen Sie das Essen hinein – drücken Sie Start – ok, der Reis ist gekocht.) Der Vorteil weniger Schnittstellen besteht darin, dass das Modell aktualisiert werden kann. Bei der Optimierung des Codes ist die Kopplung zur Außenwelt nicht hoch. Selbst wenn Sie intern schlecht schreiben, ist die Benutzeroberfläche sauber und einfach zu bedienen.

2. Anwendungs- und Systempfade

Es ist am besten, die System- und Anwendungsordner außerhalb des Webroots zu platzieren Versuchen Sie, System im Stammverzeichnis /system abzulegen. In diesem Fall kann auf Ihre PHP-Datei nur über index.php zugegriffen werden.

Vergessen Sie nicht, die Werte von $system_folder und $application_folder in der Datei index.php zu ändern. Der Wert von $system_folder sollte relativ zur Datei index.php sein, während der Wert von $application_folder sollte relativ zum Systemverzeichnis sein.

3. Fehlerberichterstattung und Debugging

Ein häufiger Fehler besteht darin, zu vergessen, die PHP-Fehler- und Datenbankfehlerberichterstattung zu deaktivieren. In jeder öffentlichen Site sollte error_reporting auf 0 gesetzt werden und kann höchstens auf E_ERROR gesetzt werden. Die Datenbankeinstellung db_debug sollte aus anderen Sicherheitsgründen auf die Anzeige von Fehlerinformationen ini_set('display_errors') gesetzt werden. , 'Aus');

Während Sie programmieren und debuggen, sollten Sie error_reporting auf E_ALL setzen und alle Hinweise und Warnungen berücksichtigen, bevor Sie Ihre Anwendung veröffentlichen.

Eine einfache Methode besteht darin, den Wert von db_debug auf eine Konstante MP_DB_DEBUG in der Datei application/config/database.php zu setzen. Wenn die Website ausgeführt wird, legen Sie ihn wie folgt fest:

ini_set('display_errors', 'Off');
error_reporting(0);
define('MP_DB_DEBUG', false);

Bei der Codierung Und eingestellt auf:

ini_set('display_errors', 'On');
error_reporting(E_ALL);
define('MP_DB_DEBUG', true);

4. Sicherheitsprobleme sind sehr wichtig

Bevor Sie Daten an Ihr Programm senden, seien es POST-Daten, COOKIE-Daten oder übermittelte URI-Daten B. im Formular, XML-RPC-Daten oder Daten im SERVER-Array, empfehlen wir Ihnen, die folgenden drei Schritte zu üben:

Filtern Sie fehlerhafte Daten.

Validieren Sie die Daten, um sicherzustellen, dass sie mit den richtigen übereinstimmen Typ, Länge, Größe usw. (Manchmal kann dieser Schritt auch den ersten Schritt ersetzen)

Konvertieren Sie die Daten, bevor Sie sie an Ihre Datenbank senden

In Bezug auf SQL-Injection, XSS und CSRF: Sie sollten sie verstehen, bevor Sie entscheiden, ob Sie Maßnahmen ergreifen, um sie zu verhindern. Sie können sich auf die Sicherheitsrichtlinien im CI-Handbuch und die Eingabe- und Sicherheitskategorien beziehen. Der vielleicht wichtigste Grundsatz besteht darin, alle Benutzereingaben zu überprüfen, bevor Daten an die Datenbank oder das Dateisystem übermittelt werden.

SQL-Injection. Die Verwendung von Active Record, das mit CI geliefert wird, kann dieses Problem lösen.

XSS (Cross-Site-Scripting). Durch das Setzen von $config['global_xss_filtering'] = TRUE; zur Aktivierung der automatischen Filterung von Cross-Site-Scripting-Angriffen in POST und COOKIE werden einige Ressourcen verbraucht. Es kann auch jedes Mal separat verwendet werden, wenn POST und COOKIE verarbeitet werden, und der zweite Parameter wird auf TRUE gesetzt, z. B. $this->input->post('some_data', TRUE); Die Formularvalidierungsklasse stellt auch XSS bereit Filteroptionen wie $this->form_validation->set_rules('username', 'Username', 'trim|required|xss_clean');

CSRF (跨站请求伪造)。CI 2.0 将内置 CSRF 检查,在 Google 上搜索 "CSRF tokens" 学习更多关于在保护表单提交和 URL 链接的知识,在 Ajax 应用方面可以搜索 "double cookie submission" 或 "双提交 cookie"。

SPAM (垃圾留言和恶意注册)。通过保护你的邮件表单,评论表单,以及其他各种免费用户提交的数据来防止垃圾信息,一个简单的方法是只允许一个IP/User客户端在一分钟之内只能提交一次,一个比较好的方式是使用 Captcha ,CI2中内置了一个CAPTCHA的辅助函数。

5. 数据库 和 ORM

CodeIgniter 有一个自带的库 Active Record 能够帮助你在不使用 SQL 语句的情况下写查询语句。这在你不太精通 SQL 语句或不知道怎样防止SQL注入的情况下是一个很好的方法。

当你需要更强大的工具时,你可以考虑使用 Object Relational Mapper ,就是鼎鼎大名的 ORM 了,遗憾的是,CodeIgniter 没有自带 ORM 库,不过也有一些其他很好的选择。

6. 代码实践

编写简洁的代码,并且理解你的代码,不要只是复制粘贴别人的代码,并且不断提高编码能力。手册上的开发规范是一个能学习怎样更好编写代码的地方。

1. DRY。不要总是重复造轮子,把能重用的代码放在它应该在的地方,比如libraries, helpers 或者是 models,而不是controllers,一个经验准则:当你复制代码的时候,也许你已经第二次把它放在了错误的地方。

2. Caching (缓存)。缓存是一个提高性能的很好的方式,尤其是减少数据库的访问。可以参考网页缓存和数据库缓存,或者在论坛上搜索其他的可选方案,比如 MP_Cache 是作者自己的作品。

3. HTTP headers (HTTP头部)。在客户端你能够通过单独发送HTTP头部使浏览器缓存页面来提高性能,当你使用 AJAX 的时候你也需要了解它来禁止浏览器缓存。

一个禁止缓存的例子:

$this->output->set_header("Last-Modified: " . gmdate("D, d M Y H:i:s") . " GMT");
$this->output->set_header("Cache-Control: no-store, no-cache, must-revalidate");
$this->output->set_header("Cache-Control: post-check=0, pre-check=0", false);
$this->output->set_header("Pragma: no-cache");

一个长时间保持缓存的例子(比如 css, javascript):

$this->output->set_header('Cache-Control: private, pre-check=0, post-check=0, max-age=2592000');
$this->output->set_header('Expires: ' . gmstrftime("%a, %d %b %Y %H:%M:%S GMT", time() + 2592000));
$this->output->set_header('Last-Modified: ' . gmstrftime("%a, %d %b %Y %H:%M:%S GMT", time() - 20));

7. 模板渲染不必每次都调用 header 与 footer

在 MY_Controller 头部和 __construct 函数中添加以下内容,用于设定默认的模版信息,其中 SITE_NAME 需要自己在 application/config/constants.php 里面自己定义:

class MY_Cont roller extends CI_Controller {
    protected $_data;    // 模版传值数组
    protected $_tplext;  // 默认模版后缀
    protected $_header;  // 默认头部模版
    protected $_footer;  // 默认底部模版
    public function __construct () {
        parent::__construct();
        $this->_data['title'] = SITE_NAME;
        $this->_tplext = '.php';
        $this->_header = 'templates/header';
        $this->_footer = 'templates/footer';
        // 开发模式下开启性能分析
        if (ENVIRONMENT === 'development') {
            $this->output->enable_profiler(TRUE);
        }
    }
}

8. 不必所有的类都继承 CI_Controller

新增的控制器不再继承 CI_Controller,而改继承 MY_Controller:

class Index extends MY_Controller {
    public function __construct () {
        parent::__construct();
    }
    /**
     * 前台首页
     */
    public function index () {
        $this->_data['title'] = '首页';  // 不指定则使用默认标题 SITE_NAME
        $this->_view('index/index');
    }
}

末了,再补充两个:

9. CodeIgniter的文件结构

cache用以存储缓存文件,codeigniter文件夹包含了CI的基类CI_Base,为了兼容php4和php5,CI_Base有两个版本,其中php4版本的CI_Base继承于CI_Loader。libraries里存放了大部分常用的类库,最主要的三个类:Model,View和Cotronller,自己写的任何mvc都要继承于已有的mvc类;helpers里是一些函数(方法)集合,用以辅助其他模块的方便工作。language是一个语言包,用以支持多语言。

application文件夹用以存储您的应用程序,CI已经在内部为您增加了一些子文件,包括models、views、controllers、config、errors、hooks和libraries。其中前三个文件夹是用以创建模型、视图和控制器的。您的大部分工作都应该是创建属于自己的MVC,并可在config里加入配置文件,libraries里加入一些对象和方法,用来辅助您的模型和控制器工作。而hooks也是对CI_Hooks的扩展,具体内容见下面的章节。

10. CodeIgniter的工作过程

当有一个http请求时,如http://www.google.com/blog/,首先进入CI的引导文件index.php。接下来我们看看index.php里做了哪些事情。

index首先设置了应用程序的文件夹名称为application,系统的文件夹名称为system,然后做了一系列严格的判断并转换为unix风格的服务器绝对文件路径,具体说来定义了两个比较重要的常量,APPPATH,应用程序的文件夹路径,根据分析可知,该路径可以和system同级:htdocs/application/,也可以放到system文件夹里面,作为其子文件夹:htdocs/system/application/,但推荐采用第二种方式,这样显得比较整齐;BASEPATH,网站文档的基本文件路径,写出来大概是htdoc/system/;到最后,index引导文件引入了codeigniter/codeigniter.php里。接下来我们看看codeigniter里做了什么事情。

codeigniter.php一上来就引入了三个文件:Common.php,Compat.php和config/constants.php,其中Common里包含了一些函数,用于载入类库的load_class,记录日志的log_message,和引入错误页面的show_404是几个重要的函数;Compat主要解决了php4和php5中的函数不兼容问题,而constants则定义了一些读写文件权限的常量。

Dann lädt Codeigniter die erste Klassenbibliothek, Benchmark. Eine der einfachsten Anwendungen dieser Klassenbibliothek besteht darin, die Zeit zu berechnen, die vom Anfang bis zum Ende der Kompilierung einer Webseite benötigt wird, sodass Sie am Anfang eine Markierung setzen Nachdem das Rendering abgeschlossen und eine Markierung hinzugefügt wurde, kann die aufgewendete Zeit berechnet werden.

Dann wird die zweite Klassenbibliothek, Hooks, geladen. Diese Klassenbibliothek befindet sich unter „Systembibliotheken“. Der Zweck dieser Klassenbibliothek besteht darin, Ihnen die Möglichkeit zu geben, andere Dinge auszuführen, bevor das Programm mit der Kompilierung beginnt. , Hooks bietet Ihnen etwa 8 Möglichkeiten, andere Aufgaben auszuführen. Weitere Informationen finden Sie im Benutzerhandbuch. Hier wird der erste Hook importiert.

Laden Sie dann die Config-, URI-, Router-, Output- und andere Klassenbibliotheken. Überprüfen Sie dann, ob ein Cache_override-Hook vorhanden ist. Mit diesem Hook können Sie Ihre eigene Funktion planen, um die _display_cache-Methode der Output-Klasse zu ersetzen . Wenn Nein, rufen Sie direkt den _display_cache auf, um zu überprüfen, ob Cache-Inhalt vorhanden ist. Wenn nicht, wird die Ausführung fortgesetzt.

Danach laden Sie weiterhin Eingabe und Sprache. Beachten Sie, dass es sich bei den zuvor geladenen Klassenbibliotheken um weitere Referenzen handelt, nämlich um das Laden des CI_Base-Objekts Wenn es sich um die PHP4-Version handelt, wird zuerst Loader und dann Base4 geladen, da CI_Base in Base4 von CI_Loader erbt, in Base5 jedoch keine Vererbungsbeziehung besteht.

Der nächste Schritt ist auch der wirklich kritische Schritt. Dieser Schritt beginnt mit dem Laden einer Controller-Klasse. Dabei handelt es sich um eine Instanz, keine Referenz. Anschließend wird die http-Adresse über den Router analysiert Überprüfen Sie dann, ob ein solcher Controller und eine solche Methode in den Anwendungscontrollern vorhanden sind. Wenn nicht, wird ein Fehler gemeldet.


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
PHP: Eine Einführung in die serverseitige SkriptsprachePHP: Eine Einführung in die serverseitige SkriptspracheApr 16, 2025 am 12:18 AM

PHP ist eine serverseitige Skriptsprache, die für dynamische Webentwicklung und serverseitige Anwendungen verwendet wird. 1.PHP ist eine interpretierte Sprache, die keine Zusammenstellung erfordert und für die schnelle Entwicklung geeignet ist. 2. PHP -Code ist in HTML eingebettet, wodurch es einfach ist, Webseiten zu entwickeln. 3. PHP verarbeitet die serverseitige Logik, generiert die HTML-Ausgabe und unterstützt Benutzerinteraktion und Datenverarbeitung. 4. PHP kann mit der Datenbank interagieren, die Einreichung von Prozessformularen und serverseitige Aufgaben ausführen.

PHP und das Web: Erforschen der langfristigen AuswirkungenPHP und das Web: Erforschen der langfristigen AuswirkungenApr 16, 2025 am 12:17 AM

PHP hat das Netzwerk in den letzten Jahrzehnten geprägt und wird weiterhin eine wichtige Rolle bei der Webentwicklung spielen. 1) PHP stammt aus dem Jahr 1994 und ist aufgrund seiner Benutzerfreundlichkeit und der nahtlosen Integration in MySQL die erste Wahl für Entwickler. 2) Zu den Kernfunktionen gehört das Generieren dynamischer Inhalte und die Integration in die Datenbank, sodass die Website in Echtzeit aktualisiert und auf personalisierte Weise angezeigt wird. 3) Die breite Anwendung und das Ökosystem von PHP hat seine langfristigen Auswirkungen angetrieben, steht jedoch auch mit Versionsaktualisierungen und Sicherheitsherausforderungen gegenüber. 4) Leistungsverbesserungen in den letzten Jahren, wie die Veröffentlichung von PHP7, ermöglichen es ihm, mit modernen Sprachen zu konkurrieren. 5) In Zukunft muss PHP sich mit neuen Herausforderungen wie Containerisierung und Microservices befassen, aber seine Flexibilität und die aktive Community machen es anpassungsfähig.

Warum PHP verwenden? Vorteile und Vorteile erläutertWarum PHP verwenden? Vorteile und Vorteile erläutertApr 16, 2025 am 12:16 AM

Zu den Kernvorteilen von PHP gehören einfacher Lernen, starke Unterstützung für Webentwicklung, reiche Bibliotheken und Rahmenbedingungen, hohe Leistung und Skalierbarkeit, plattformübergreifende Kompatibilität und Kosteneffizienz. 1) leicht zu erlernen und zu bedienen, geeignet für Anfänger; 2) gute Integration in Webserver und unterstützt mehrere Datenbanken. 3) leistungsstarke Frameworks wie Laravel; 4) hohe Leistung kann durch Optimierung erzielt werden; 5) mehrere Betriebssysteme unterstützen; 6) Open Source, um die Entwicklungskosten zu senken.

Debunking der Mythen: Ist PHP wirklich eine tote Sprache?Debunking der Mythen: Ist PHP wirklich eine tote Sprache?Apr 16, 2025 am 12:15 AM

PHP ist nicht tot. 1) Die PHP -Community löst aktiv Leistungs- und Sicherheitsprobleme, und Php7.x verbessert die Leistung. 2) PHP ist für die moderne Webentwicklung geeignet und wird in großen Websites häufig verwendet. 3) PHP ist leicht zu erlernen und der Server funktioniert gut, aber das Typsystem ist nicht so streng wie statische Sprachen. 4) PHP ist in den Bereichen Content-Management und E-Commerce immer noch wichtig, und das Ökosystem entwickelt sich weiter. 5) Optimieren Sie die Leistung über Opcache und APC und verwenden Sie OOP- und Designmuster, um die Codequalität zu verbessern.

Die PHP vs. Python -Debatte: Was ist besser?Die PHP vs. Python -Debatte: Was ist besser?Apr 16, 2025 am 12:03 AM

PHP und Python haben ihre eigenen Vor- und Nachteile, und die Wahl hängt von den Projektanforderungen ab. 1) PHP eignet sich für Webentwicklung, leicht zu lernen, reichhaltige Community -Ressourcen, aber die Syntax ist nicht modern genug, und Leistung und Sicherheit müssen beachtet werden. 2) Python eignet sich für Datenwissenschaft und maschinelles Lernen mit prägnanter Syntax und leicht zu erlernen. Es gibt jedoch Engpässe bei der Ausführungsgeschwindigkeit und des Speichermanagements.

Zweck von PHP: Erstellen dynamischer WebsitesZweck von PHP: Erstellen dynamischer WebsitesApr 15, 2025 am 12:18 AM

PHP wird verwendet, um dynamische Websites zu erstellen. Zu den Kernfunktionen gehören: 1. Dynamische Inhalte generieren und Webseiten in Echtzeit generieren, indem Sie eine Verbindung mit der Datenbank herstellen; 2. Verarbeiten Sie Benutzerinteraktions- und Formulareinreichungen, überprüfen Sie Eingaben und reagieren Sie auf Operationen. 3. Verwalten Sie Sitzungen und Benutzerauthentifizierung, um eine personalisierte Erfahrung zu bieten. 4. Optimieren Sie die Leistung und befolgen Sie die Best Practices, um die Effizienz und Sicherheit der Website zu verbessern.

PHP: Datenbanken und serverseitige Logik bearbeitenPHP: Datenbanken und serverseitige Logik bearbeitenApr 15, 2025 am 12:15 AM

PHP verwendet MySQLI- und PDO-Erweiterungen, um in Datenbankvorgängen und serverseitiger Logikverarbeitung zu interagieren und die serverseitige Logik durch Funktionen wie Sitzungsverwaltung zu verarbeiten. 1) Verwenden Sie MySQLI oder PDO, um eine Verbindung zur Datenbank herzustellen und SQL -Abfragen auszuführen. 2) Behandeln Sie HTTP -Anforderungen und Benutzerstatus über Sitzungsverwaltung und andere Funktionen. 3) Verwenden Sie Transaktionen, um die Atomizität von Datenbankvorgängen sicherzustellen. 4) Verhindern Sie die SQL -Injektion, verwenden Sie Ausnahmebehandlung und Schließen von Verbindungen zum Debuggen. 5) Optimieren Sie die Leistung durch Indexierung und Cache, schreiben Sie hochlesbarer Code und führen Sie die Fehlerbehandlung durch.

Wie verhindern Sie die SQL -Injektion in PHP? (Vorbereitete Aussagen, PDO)Wie verhindern Sie die SQL -Injektion in PHP? (Vorbereitete Aussagen, PDO)Apr 15, 2025 am 12:15 AM

Die Verwendung von Vorverarbeitungsanweisungen und PDO in PHP kann SQL -Injektionsangriffe effektiv verhindern. 1) Verwenden Sie PDO, um eine Verbindung zur Datenbank herzustellen und den Fehlermodus festzulegen. 2) Erstellen Sie Vorverarbeitungsanweisungen über die Vorbereitungsmethode und übergeben Sie Daten mit Platzhaltern und führen Sie Methoden aus. 3) Abfrageergebnisse verarbeiten und die Sicherheit und Leistung des Codes sicherstellen.

See all articles

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)
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Beste grafische Einstellungen
4 Wochen vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. So reparieren Sie Audio, wenn Sie niemanden hören können
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. Chat -Befehle und wie man sie benutzt
1 Monate vorBy尊渡假赌尊渡假赌尊渡假赌

Heiße Werkzeuge

MantisBT

MantisBT

Mantis ist ein einfach zu implementierendes webbasiertes Tool zur Fehlerverfolgung, das die Fehlerverfolgung von Produkten unterstützen soll. Es erfordert PHP, MySQL und einen Webserver. Schauen Sie sich unsere Demo- und Hosting-Services an.

SAP NetWeaver Server-Adapter für Eclipse

SAP NetWeaver Server-Adapter für Eclipse

Integrieren Sie Eclipse mit dem SAP NetWeaver-Anwendungsserver.

VSCode Windows 64-Bit-Download

VSCode Windows 64-Bit-Download

Ein kostenloser und leistungsstarker IDE-Editor von Microsoft

SublimeText3 Englische Version

SublimeText3 Englische Version

Empfohlen: Win-Version, unterstützt Code-Eingabeaufforderungen!

ZendStudio 13.5.1 Mac

ZendStudio 13.5.1 Mac

Leistungsstarke integrierte PHP-Entwicklungsumgebung