四虎精品视频-四虎精品成人免费网站-四虎黄色网-四虎国产视频-国产免费91-国产蜜臀97一区二区三区

強烈聲明: 不要使用(include/require)_once

關(guān)于使用include還是include_once(以下,都包含require_once), 這個討論很長了, 結(jié)論也一直有, 就是盡量使用include, 而不是include_once, 以前最多的理由的是, include_once需要查詢一遍已加載的文件列表, 確認(rèn)是否存在, 然后再加載.

誠然, 這個理由是對的, 不過, 我今天要說的, 是另外一個的原因.

我們知道, php去判斷一個文件是否被加載, 是需要得到這個文件的opened_path的, 意思是說, 比如:
復(fù)制代碼 代碼如下:
<?php
set_include_path("/tmp/:/tmp2/");
include_once("2.php");
?>

當(dāng)php看到include_once “2.php”的時候, 他并不知道這個文件的實際路徑是什么, 也就無法從已加載的文件列表去判斷是否已經(jīng)加載, 所以在include_once的實現(xiàn)中, 會首先嘗試解析這個文件的真實路徑(對于普通文件這個解析僅僅類似是檢查getcwd和文件路徑, 所以如果是相對路徑, 一般是不會成功), 如果解析成功, 則查找EG(include_files), 如果存在則說明包含過了, 返回, 否則open這個文件, 從而得到這個文件的opened_path. 比如上面的例子, 這個文件存在于 “/tmp2/2.php”.

然后, 得到了這個opened_path以后, php去已加載的文件列表去查找, 是否已經(jīng)包含, 如果沒有包含, 那么就直接compile, 不再需要open file了.

1. 嘗試解析文件的絕對路徑, 如果能解析成功, 則檢查EG(included_files), 存在則返回, 不存在繼續(xù)
2. 打開文件, 得到文件的打開路徑(opened path)
3. 拿opened path去EG(included_files)查找, 是否存在, 如果存在則返回, 不存在繼續(xù)
4. 編譯文件(compile_file)

這個在大多數(shù)情況下, 不是問題, 然而問題出在當(dāng)你使用APC的時候…

在使用APC的時候, APC劫持了compile_file這個編譯文件的指針, 從而直接從cache中得到編譯結(jié)果, 避免了對實際文件的open, 避免了對open的system call.

然而, 當(dāng)你在代碼中使用include_once的時候, 在compile_file之前, php已經(jīng)嘗試去open file了, 然后才進(jìn)入被APC劫持的compile file中, 這樣一來, 就會產(chǎn)生一次額外的open操作. 而APC正是為了解決這個問題, 引入了include_once_override, 在include_once_override開啟的情況下, APC會劫持php的ZEND_INCLUDE_OR_EVAL opcode handler, 通過stat來確定文件的絕對路徑, 然后如果發(fā)現(xiàn)沒有被加載, 就改寫opcode為include, 做一個tricky解決方案.

但是, 很可惜, 如我所說, APC的include_once_override實現(xiàn)的一直不好, 會有一些未定義的問題, 比如:
復(fù)制代碼 代碼如下:
<?php
set_include_path("/tmp");
function a($arg = array()) {
    include_once("b.php");
}
a();
a();
?>

然后, 我們的b.php放置在”/tmp/b.php”, 內(nèi)容如下:
復(fù)制代碼 代碼如下:
<?php
  class B {}
?>

那么在打開apc.include_once_override的情況下, 連續(xù)訪問就會得到如下錯誤:

Fatal error - include() : Cannot redeclare class b

排除這些技術(shù)因素, 我也一直認(rèn)為, 我們應(yīng)該使用include, 而不是include_once, 因為我們完全能做到自己規(guī)劃, 一個文件只被加載一次. 還可以借助自動加載, 來做到這一點.

你使用include_once, 只能證明, 你對自己的代碼沒信心.

所以, 建議大家, 不要再使用include_once

php技術(shù)強烈聲明: 不要使用(include/require)_once,轉(zhuǎn)載需保留來源!

鄭重聲明:本文版權(quán)歸原作者所有,轉(zhuǎn)載文章僅為傳播更多信息之目的,如作者信息標(biāo)記有誤,請第一時間聯(lián)系我們修改或刪除,多謝。

主站蜘蛛池模板: 张晓海个人资料| 丰满少妇a级片| 李天方| 青娱乐视视频| 七下语文第一单元作文| 妈妈你真棒韩国电影免费观看完整版| 三浦亚沙妃| 男女小视频| 尹馨演过的三部电影| 胚胎移植几天就知道成功了| 电影《男宠》在线观看| 潜行吧!奈亚子| 吃屎视频搞笑视频| 帕瓦德奥特曼| 验光单子的数据怎么看| 柳堡的故事演员表| 出轨的女人电影| 李妍杜| 今年过年时间| 小曼哈顿| 海洋天堂电影免费观看高清| 我们的祖国是花园简谱| 新妈妈2| 欧美黑人巨大精品videos| 电视剧《河山》在线观看| 电影《塔蒂亚娜1》演员表| 水管十大品牌排行榜前十名| 范冰冰性感| 墨雨云间电视剧免费播放| 误杀2演员名单| 13名妓| 电视剧《流金岁月》演员表| 眼光娘娘治眼病口诀| 香港毛片免费看| 电视剧玫瑰的故事主演演员表| 黄河颂思维导图| 王若涵| 2 broke girls| 前线任务| 井冈山必去的三个景点| 董明珠:简历 个人资料|