<span><span><span class="hljs-meta"><?php</span></span><span>
</span><span><span class="hljs-comment">// ဤစာရွက်စာတမ်းကိုအသုံးပြုသည် PHP code snippet ထုပ်,သာသရုပ်ပြ formating သည်</span></span><span>
</span><span><span class="hljs-comment">// အမှန်တကယ်အကြောင်းအရာသည်ဆောင်းပါး၏အဓိကစာသားဖြစ်သည်,Non-run ကုဒ်。</span></span><span>
</span><span><span class="hljs-meta">?></span></span><span>
---
</span><span><span class="hljs-comment"># ဘာကေြာင့် opcache_compile_file functions များသည် cache ကိုချက်ချင်းမွမ်းမံပါ?ဘုံအကြောင်းတရားများနှင့်ဖြေရှင်းနည်းများ</span></span><span>
အသုံးပြုမှုအတွက် PHP ၏ **Opcache** ချဲ့ထွင်တဲ့အခါ,developer များမကြာခဏပြ a နာတစ်ခုကြုံတွေ့ရ:တယ်လီဖုန်းဆက်ခြင်း `</span><span><span class="hljs-title function_ invoke__">opcache_compile_file</span></span><span>()` function ကိုပြီးနောက်,预期၏脚本更新并没有立即生效。တစ်နည်းပြောရရင်တော့,အဆိုပါ cache ကိုပုံရသည်“ခေါင်းမာသော”ဗားရှင်းအဟောင်းကိုထိန်းသိမ်းထားသည်。ဤသည် debugging အတွေ့အကြုံကိုသက်ရောက်စေလိမ့်မည်မဟုတ်ပေ,၎င်းသည်အွန်လိုင်းပူပြင်းသည့်မွမ်းမံမှုများအားကျရှုံးစေနိုင်သည်。အောက်,我们来分析其中၏常见原因,并提供相应၏解决方案。
</span><span><span class="hljs-comment">## တစ်、opcache_compile_file ၏作用机制</span></span><span>
`</span><span><span class="hljs-title function_ invoke__">opcache_compile_file</span></span><span>(</span><span><span class="hljs-variable">$file</span></span><span>)` ၏主要功能是将指定၏ PHP ဖိုင်ကို bytecode သို့စုစည်းထားပါသည်,နှစ်ချုပ်ကြီး Opcache cache ထဲမှာ。၎င်းသည်ရှိပြီးသား cache ကိုဖျက်ရန်အတင်းအကျပ်မပြုပါ,ယင်းအစား၎င်းသည် cache မတည်ရှိမှသာလျှင်၎င်းကို compile လေ့ရှိသည်။。ဒါပြောဖို့ပါ,လှျင်该文件၏သိုကာတာ已存在,တယ်လီဖုန်းဆက်ခြင်း该函数可能不会触发更新。
</span><span><span class="hljs-comment">## နှစ်、不会立即更新သိုကာတာ၏常见原因</span></span><span>
</span><span><span class="hljs-number">1</span></span><span>. **သက်တမ်းကုန်ဆုံးသော cache တစ်ခုရှိပါသည်**
- Opcache ဖိုင်များကိုပုံမှန်အားဖြင့်သိမ်းဆည်းထားလိမ့်မည်,သက်တမ်းကုန်ဆုံးချိန်အထိသို့မဟုတ်ဖိုင်ကိုပြုပြင်မွမ်းမံရန်ရှာဖွေတွေ့ရှိသည်အထိ。
- လှျင် `validate_timestamps=</span><span><span class="hljs-number">0</span></span><span>`,ထို့နောက်ဖိုင်အကြောင်းအရာကို update လုပ်ထားရင်တောင်,Opcache တက်ကြွစွာ detect လိမ့်မည်မဟုတ်ပါ,导致သိုကာတာတစ်直使用旧版本。
</span><span><span class="hljs-number">2</span></span><span>. **opcache_compile_file ရှိပြီးသား cache ကို overwrite မထားပါနဲ့**
- 此函数၏设计初衷是“နေှ့က”သိုကာတာ,အဲဒီအစားရှိပြီးသားအကြောင်းအရာအစားထိုး၏。
- တစ်旦文件已သိုကာတာ,后续တယ်လီဖုန်းဆက်ခြင်း `</span><span><span class="hljs-title function_ invoke__">opcache_compile_file</span></span><span>()` ဒါဟာအတင်းအဓမ္မငွေချေးလိမ့်မည်မဟုတ်ပေ。
</span><span><span class="hljs-number">3</span></span><span>. **ဖိုင်ပြုပြင်မွမ်းမံချိန်မပြောင်းလဲပါ**
- ဘယ်တော့လဲ `validate_timestamps=</span><span><span class="hljs-number">1</span></span><span>` နှင့် `revalidate_freq > </span><span><span class="hljs-number">0</span></span><span>` နာရီ,Opcache 会根据文件၏修改နာရီ间 (mtime) ပြန်လည်အသိပေးချက်လိုအပ် / ရှိမရှိဆုံးဖြတ်ရန်。
- လှျင်文件၏ mtime အသစ်ပြောင်းခြင်းမရှိပါ(例如直接覆盖文件内容但未改变နာရီ间戳),则不会触发သိုကာတာ刷新。
</span><span><span class="hljs-number">4</span></span><span>. **opcache.restrict_api ကန့်သတ်**
- အချို့သောဆာဗာပတ်ဝန်းကျင်တွင်,`</span><span><span class="hljs-title function_ invoke__">opcache_compile_file</span></span><span>()` ၏တယ်လီဖုန်းဆက်ခြင်း可能被ကန့်သတ်,导致函数တယ်လီဖုန်းဆက်ခြင်း并没有生效。
</span><span><span class="hljs-number">5</span></span><span>. **多进程环境၏延迟**
- PHP-FPM သို့မဟုတ် Apache Multi-process mode မှာ,不同进程间၏ Opcache ပြည်နယ်အတွက်ထပ်တူပြုခြင်းနှောင့်နှေးရှိနိုင်သည်。
- အချို့ကိစ္စများတွင်,即使某个进程已更新သိုကာတာ,အခြားဖြစ်စဉ်များသည်ဗားရှင်းအဟောင်းများကိုအသုံးပြုနေဆဲဖြစ်သည်。
</span><span><span class="hljs-comment">## သုံး、ဖြေရှင်းချက်နှင့်အကြံပြုချက်များ</span></span><span>
</span><span><span class="hljs-number">1</span></span><span>. **启用နာရီ间戳验证**
```ini
opcache.validate_timestamps=</span><span><span class="hljs-number">1</span></span><span>
opcache.revalidate_freq=</span><span><span class="hljs-number">0</span></span><span>
</span></span>ဤသည်ဖိုင်ကိုပြုပြင်ပြီးတာနဲ့ cache ကိုချက်ချင်းလန်းဆန်းစေလိမ့်မည်။
Cache ကိုကိုယ်တိုင်သန့်ရှင်းပါ ကုဒ်ကိုမွမ်းမံပြီးနောက်အောက်ပါလုပ်ဆောင်ချက်များကိုခေါ်ဆိုနိုင်သည်။
<span><span><span class="hljs-title function_ invoke__">opcache_invalidate</span></span><span>(</span><span><span class="hljs-string">'/path/to/file.php'</span></span><span>, </span><span><span class="hljs-literal">true</span></span><span>);
</span></span>ဒုတိယ parameter သည် စစ်မှန်သော နည်းလမ်းများသို့သတ်မှတ်ခြင်းကိုနောက်တစ်ကြိမ်ပြန်လည်တင်ပြရန်သေချာစေရန် Cache ကိုရှင်းလင်းရန်ဖိအားပေးမှု
opcache_compile_file_file <br> ကိုသုံးပါ ဘုံအလေ့အကျင့်တစ်ခုမှာ OPCOCE_InVALANDADE () ကို Cache ကိုရှင်းရှင်းလင်းလင်းဖော်ပြရန်အတွက် OPCOCK_COMPILE_File () ကို cache အသစ်ကိုနွေးထွေးစေရန် Call ဟုခေါ်ရန်ဖြစ်သည်။
Timestamps ကိုကြည့်ပါ OPCICE ကိုဖြည့်ဆည်းပေးသည့်အခါMုန်အပြောင်းအလဲများ ( touch command မှတဆင့်) ကိုသေချာစေရန်သေချာအောင်လုပ်ပါ။
ပေါင်းစည်းခြင်းလုပ်ငန်းစဉ်အခြေအနေ <br> <br> Multi-process ပတ် 0 န်းကျင်တွင် cache refresh နှင့်နွေးထွေးမှုကို သုံး. နွေးထွေးမှုကို သုံး. အချို့သောလုပ်ငန်းစဉ်များအဟောင်းကို cache ဟောင်းကိုဖတ်ရှုခြင်းမှကာကွယ်ရန်အတွက်လျှောက်လွှာအလွှာယုတ္တိဗေဒ၏အကူအညီဖြင့်တူညီစွာဖျော်ဖြေနိုင်သည်။
opcache_compile_file_file () သည် "Refresh Cache" function မဟုတ်ဘဲ "cache cache" tool ကိုကိရိယာတစ်ခုမဟုတ်ပါ။ အကယ်. ဖိုင်ကိုသိမ်းဆည်းထားပြီးပါက၎င်းသည်လက်ရှိအကြောင်းအရာများကိုတက်ကြွစွာအစားထိုးမည်မဟုတ်ပါ။
Code update ကိုချက်ချင်းအကျိုးသက်ရောက်နိုင်အောင်သေချာစေရန် OPCICE_INVALANDADE () ကို အသုံးပြုရန်အတွက်၎င်းကို cache ဟောင်းကိုရှင်းလင်းရန်အသုံးပြုရန်အကြံပြုသည်။ ၎င်းသည်ကျန်ရှိနေသေးသော cache ကိုရှောင်ရှားနိုင်ရုံသာမက၎င်းကိုစတင်ရောင်းချပြီးနောက်စွမ်းဆောင်ရည်မြင့်မားသည်။
operating optcache ၏ operating ယန္တရားကိုနားလည်ခြင်းနှင့်လုပ်ဆောင်ချက်များကိုအသုံးပြုခြင်းအားဖြင့်သာကျွန်ုပ်တို့သည်စွမ်းဆောင်ရည်အကောင်းဆုံးနှင့်ကုဒ်ဖြန့်ကျက်မှုတွင်၎င်း၏အားသာချက်များကိုအပြည့်အဝကစားနိုင်ပါသည်။
<span></span>