天天躁日日躁狠狠躁AV麻豆-天天躁人人躁人人躁狂躁-天天澡夜夜澡人人澡-天天影视香色欲综合网-国产成人女人在线视频观看-国产成人女人视频在线观看

請離開include_once和require_once

誠然, 這個理由是對的, 不過, 我今天要說的, 是另外一個的原因.
我們知道, php去判斷一個文件是否被加載, 是需要得到這個文件的opened_path的, 意思是說, 比如:
復制代碼 代碼如下:
    <?php
    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實現的一直不好, 會有一些未定義的問題, 比如:
復制代碼 代碼如下:
    <?php
    set_include_path("/tmp");
    function a($arg = array()) {
        include_once("b.php");
    }

    a();
    a();
    ?>

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

那么在打開apc.include_once_override的情況下, 連續訪問就會得到如下錯誤:
Fatal error - include() : Cannot redeclare class

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

你使用include_once,只能證明, 你對自己的代碼沒信心.
所以, 建議大家, 不要再使用include_once

php技術請離開include_once和require_once,轉載需保留來源!

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

主站蜘蛛池模板: 久久精品国产免费中文 | 亚色九九九全国免费视频 | 24小时日本高清免费看 | 国产69精品久久久久人妻刘玥 | 亚欧乱亚欧乱色视频 | 2019香蕉在线观看直播视频 | 国产女人与黑人在线播放 | 黄色a一级视频 | 亚洲精品久久久久AV无码 | 97亚洲狠狠色综合久久久久 | 性欧美FREE少妇XXX | 十次啦中文网 | yellow在线观看免费直播 | 最新在线黄色网址 | 我们中文在线观看免费完整版 | 九九久久国产精品免费热6 九九久久国产精品大片 | 麻美ゆま夫の目の前で犯 | 男女啪啪抽搐呻吟高潮动态图 | 高清不卡伦理电影在线观看 | 亚洲AV午夜福利精品香蕉麻豆 | 日本无修肉动漫在线观看 | 中文字幕 亚洲 有码 在线 | 2021久久99国产熟女人妻 | 在线视频网站www色 在线视频免费国产成人 | 很黄很色60分钟在线观看 | 国产精品久久久久久久久无码 | YELLOW视频在线观看最新 | 男女肉大捧进出全过程免费 | 久久精品国产福利电影网 | 看美女大腿中间的部分 | 我半夜摸妺妺的奶C了她 | 一二三区乱码不卡手机版 | 素人约啪第五季 | 一本到道免费线观看 | 性与肉体电影免费观看 | 97久久精品人人槡人妻人 | 久久香蕉国产线看观看首页 | 被黑人群jian又粗又大H | 国产精品人妻系列21P | 棉签和冰块怎么弄出牛奶视频 | CHINSEFUCKGAY无套 chinese野外男女free |