请离开include_once和require_once_PHP教程
诚然, 这个理由是对的, 不过, 我今天要说的, 是另外一个的原因.
我们知道, PHP去判断一个文件是否被加载, 是需要得到这个文件的opened_path的, 意思是说, 比如:
set_include_path("/tmp/:/tmp2/");
include_once("2.php");
?>
当PHP看到include_once “2.php”的时候, 他并不知道这个文件的实际路径是什么, 也就无法从已加载的文件列表去判断是否已经加载, 所以在include_once的实现中, 会首先尝试解析这个文件的真实路径(对于普通文件这个解析仅仅类似是检查getcwd和文件路径, 所以如果是相对路径, 一般是不会成功), 如果解析成功, 则查找EG(include_files), 如果存在则说明包含过了, 返回, 否则open这个文件, 从而得到这个文件的opened_path. 比如上面的例子, 这个文件存在于 “/tmp2/2.php”.
然后, 得到了这个opened_path以后, PHP去已加载的文件列表去查找, 是否已经包含, 如果没有包含, 那么就直接compile, 不再需要open file了.
1. 尝试解析文件的绝对路径, 如果能解析成功, 则检查EG(included_files), 存在则返回, 不存在继续
2. 打开文件, 得到文件的打开路径(opened path)
3. 拿opened path去EG(included_files)查找, 是否存在, 如果存在则返回, 不存在继续
4. 编译文件(compile_file)
这个在大多数情况下, 不是问题, 然而问题出在当你使用APC的时候…
在使用APC的时候, APC劫持了compile_file这个编译文件的指针, 从而直接从cache中得到编译结果, 避免了对实际文件的open, 避免了对open的system call.
然而, 当你在代码中使用include_once的时候, 在compile_file之前, PHP已经尝试去open file了, 然后才进入被APC劫持的compile file中, 这样一来, 就会产生一次额外的open操作. 而APC正是为了解决这个问题, 引入了include_once_override, 在include_once_override开启的情况下, APC会劫持PHP的ZEND_INCLUDE_OR_EVAL opcode handler, 通过stat来确定文件的绝对路径, 然后如果发现没有被加载, 就改写opcode为include, 做一个tricky解决方案.
但是, 很可惜, 如我所说, APC的include_once_override实现的一直不好, 会有一些未定义的问题, 比如:
set_include_path("/tmp");
function a($arg = array()) {
include_once("b.php");
}
a();
a();
?>
然后, 我们的b.php放置在”/tmp/b.php”, 内容如下:
class B {}
?>
那么在打开apc.include_once_override的情况下, 连续访问就会得到如下错误:
Fatal error - include() : Cannot redeclare class
排除这些技术因素, 我也一直认为, 我们应该使用include, 而不是include_once, 因为我们完全能做到自己规划, 一个文件只被加载一次. 还可以借助自动加载, 来做到这一点.
你使用include_once,只能证明, 你对自己的代码没信心.
所以, 建议大家, 不要再使用include_once

Heiße KI -Werkzeuge

Undresser.AI Undress
KI-gestützte App zum Erstellen realistischer Aktfotos

AI Clothes Remover
Online-KI-Tool zum Entfernen von Kleidung aus Fotos.

Undress AI Tool
Ausziehbilder kostenlos

Clothoff.io
KI-Kleiderentferner

AI Hentai Generator
Erstellen Sie kostenlos Ai Hentai.

Heißer Artikel

Heiße Werkzeuge

Notepad++7.3.1
Einfach zu bedienender und kostenloser Code-Editor

SublimeText3 chinesische Version
Chinesische Version, sehr einfach zu bedienen

Senden Sie Studio 13.0.1
Leistungsstarke integrierte PHP-Entwicklungsumgebung

Dreamweaver CS6
Visuelle Webentwicklungstools

SublimeText3 Mac-Version
Codebearbeitungssoftware auf Gottesniveau (SublimeText3)

Heiße Themen

vue3+vite:src verwendet „require“, um Bilder dynamisch zu importieren, und vue3+vite importiert dynamisch mehrere Bilder. Wenn Sie „requireisnotdefined“ verwenden, wird eine Fehlermeldung angezeigt like vue2 like imgUrl:require(' .../assets/test.png') wird importiert, da Typescript Require nicht unterstützt, daher wird Import verwendet. So lösen Sie das Problem: Verwenden Sieawaitimport

Welches ASUS-Motherboard sollte mit dem R55600 gekoppelt werden? Das ASUS ROGStrixB550-FGaming-Motherboard ist eine ausgezeichnete Wahl. Es ist perfekt mit dem Ryzen55600X-Prozessor kompatibel und bietet hervorragende Leistung und Funktionen. Dieses Motherboard verfügt über ein zuverlässiges Stromversorgungssystem, unterstützt Übertaktung und bietet eine Fülle von Erweiterungssteckplätzen und Anschlüssen für den täglichen Gebrauch und Gaming-Anforderungen. ROGStrixB550-FGaming ist außerdem mit hochwertigen Audiolösungen, schnellen Netzwerkverbindungen und einem zuverlässigen Wärmeableitungsdesign ausgestattet, um sicherzustellen, dass das System effizient und stabil bleibt. Darüber hinaus übernimmt dieses Motherboard auch den wunderschönen ROG-Stil und ist mit wunderschönen RGB-Lichteffekten ausgestattet, die Ihrem Computer ein visuelles Vergnügen verleihen. Alles in allem ASUS ROGStri

Welcher ist besser, Celeron g4900 oder i36100? Wenn es um die beiden Prozessoren Celeron G4900 und I36100 geht, besteht kein Zweifel daran, dass die Leistung des I36100 überlegen ist. Celeron-Prozessoren gelten im Allgemeinen als Low-End-Prozessoren und werden hauptsächlich in preisgünstigen Laptops verwendet. Der I3-Prozessor wird hauptsächlich für High-End-Prozessoren verwendet und weist eine sehr gute Leistung auf. Unabhängig davon, ob Sie Spiele spielen oder Videos ansehen, treten bei Verwendung des I3-Prozessors keine Verzögerungen auf. Versuchen Sie daher nach Möglichkeit, insbesondere für Desktop-Computer, Prozessoren der Intel I-Serie zu kaufen, damit Sie den Spaß an der Online-Welt genießen können. Wie ist die Leistung des Celeron G4900T? Aus Leistungssicht schneidet der Pentium G4900T im Vergleich zur Vorgängerversion gut ab

Wenn wir Webseiten mit PHP schreiben, müssen wir manchmal Code aus anderen PHP-Dateien in die aktuelle PHP-Datei einfügen. Zu diesem Zeitpunkt können Sie die Funktion include oder include_once verwenden, um die Dateieinbindung zu implementieren. Was ist also der Unterschied zwischen include und include_once?

Verwendung von require: 1. Module einführen: In vielen Programmiersprachen wird require verwendet, um externe Module oder Bibliotheken einzuführen, damit die von ihnen bereitgestellten Funktionen im Programm verwendet werden können. In Ruby können Sie beispielsweise „require“ verwenden, um Bibliotheken oder Module von Drittanbietern zu laden. 2. Klassen oder Methoden importieren: In einigen Programmiersprachen wird „require“ verwendet, um bestimmte Klassen oder Methoden zu importieren, damit sie in der aktuellen Datei verwendet werden können 3. Führen Sie bestimmte Aufgaben aus: In einigen Programmiersprachen oder Frameworks wird require zum Ausführen bestimmter Aufgaben oder Funktionen verwendet.

Ich plane eine Rucksacktour in Tibet. ① Sagen Sie mir bitte, was die beste Konfiguration ist. Ich bin 170 und habe eine gute körperliche Stärke Liter oder mehr. Die gesamte Reise dauerte nicht mit dem Auto, ein Koffer ist praktischer, wenn man etwas mitnehmen muss Tasche ist mehr als genug. Notwendige Utensilien für Reisen nach Tibet: Sonnenbrille, Sonnenhut, Sonnencreme, Hautcreme, langärmelige Oberteile, Pullover für besondere Reisen oder Reisen nach Ali, Nordtibet und zur Sichuan-Tibet-Linie Es wird empfohlen, Folgendes mitzubringen: Schlafsack (Kälteschutz), Laken (Schmutzschutz), Daunenjacke, Reise- oder Wanderschuhe, Hausschuhe, Zahnbürste, Zahnpasta, Handtuch, Zigarettenpapier, Papierunterwäsche, Desinfektionstücher, Taschenlampe, wasserfeste Streichhölzer, Messer , Seil. Kann ein Computer in der Vordertasche transportiert werden? Kann ein Computer in der Vordertasche transportiert werden?

Wenn KI-Ideogramme um Realismus und künstlerischen Sinn konkurrieren, hat Ideogram einen kniffligen Weg eingeschlagen: Es kann Text auf Bildern präzise generieren und die Schriftarten und Layouts sind wunderschön. Diese Anforderung ist keine Nische. Poster und Illustrationen mit einem Klick zu erstellen, ohne P-Bilder zu verwenden. Dies kann eine Menge Ärger ersparen und ist sehr gut für normale Leute geeignet, die keine Ahnung von Design haben. Wir haben bereits über Version 1.0 von Ideogram geschrieben. Am 21. August kam Version 2.0. Der Realismus ist besser, die Poster sind besser gestaltet und auch die besondere Textkompetenz ist stärker. Sie haben vielleicht noch nie davon gehört. Dies ist ein KI-Produkt, das von ehemaligen Google-Mitarbeitern entwickelt wurde. Es weist viele Mängel auf, aber das Longboard kann Midjourney in Kurven „überholen“. Wegbeschreibung https://ideogram.ai/A

Welches ist besser, Huntkey s980 oder Bauhaus? Huntkey S980 und Bauhaus (BeQuiet) sind zwei verschiedene Marken von Computer-Netzteilherstellern. Welches die bessere Wahl ist, hängt von Ihren Bedürfnissen und persönlichen Vorlieben ab. Es wurde von den Verbrauchern anerkannt und gelobt. Ihre Produkte werden häufig in Personalcomputern, Servern, Industrieanlagen und anderen Bereichen eingesetzt. Huntkey ist bestrebt, qualitativ hochwertige Energieprodukte anzubieten und ständig neue Technologien und innovative Designs einzuführen. Ihre Produkte werden strengen Qualitätskontrollen und Tests unterzogen, um sicherzustellen, dass sie Geräte stabil und effizient mit Strom versorgen können. Huntkey achtet auch auf Umweltschutz und Energieeinsparung und ist bestrebt, die Auswirkungen auf die Umwelt zu reduzieren. Ihre Netzteile entsprechen internationalen Standards und wurden mehrfach zertifiziert und ausgezeichnet. Als seriöse Marke
