2024 年 PHP Conference Japan

opcache_reset

(PHP 5 >= 5.5.0, PHP 7, PHP 8, PECL ZendOpcache >= 7.0.0)

opcache_reset重設 opcode 快取的內容

說明

opcache_reset(): 布林值

此函式會重設整個 opcode 快取。呼叫 opcache_reset() 之後,所有腳本將在下一次被執行時重新載入和重新剖析。此函式僅重設記憶體中的快取,而不是檔案快取。

參數

此函式沒有參數。

回傳值

如果 opcode 快取已重置,則返回 true;如果 opcode 快取已停用,或正在重新啟動或重新啟動程序中,則返回 false(請參閱 opcache_get_status())。

另請參閱

新增註解

使用者貢獻的註解 4 則註解

56
fbgolly at gmail dot com
7 年前
我透過 CLI 清除快取的解決方法是建立一個像這樣的 bash 腳本

#!/bin/bash
WEBDIR=/var/www/html/
RANDOM_NAME=$(head /dev/urandom | tr -dc A-Za-z0-9 | head -c 13)
echo "<?php opcache_reset(); ?>" > ${WEBDIR}${RANDOM_NAME}.php
curl https://127.0.0.1/${RANDOM_NAME}.php
rm ${WEBDIR}${RANDOM_NAME}.php

將其放入 /usr/local/bin/opcache-clear 並使其可執行。
當我想要清除快取時,只需在終端機中執行「opcache-clear」。
47
匿名
9 年前
應該說明的是,透過 cli 執行 opcache_reset() 不會重置快取。
所以 `php -r "var_dump(opcache_reset());"` 輸出「true」但不會清除快取。建立檔案,透過 http 存取它 - 快取就會清除。
18
mike
8 年前
在某些(大多數?)系統中,PHP 的 CLI 具有與網路伺服器或 PHP-FPM 程序使用的 opcode 快取分開的 opcode 快取,這表示在 CLI 中執行 opcache_reset() 不會重置網路伺服器/fpm 的 opcode 快取,反之亦然。
4
Jan
4 年前
對於較長的 php 腳本:opcache_reset() 將會取得一個鎖定,並且只會在腳本結束後才會重置快取,然後才會釋放鎖定。

在單個腳本中呼叫 opcache_reset() 之後多次呼叫 opcache_reset() 或任何其他 opcache 操作方法(例如 opcache_invalidate())是沒有用的:當 opcache_reset() 持有鎖定時,其他 opcache 方法將返回 false,並且它們對快取將沒有任何影響。

雖然在此鎖定期間 opcache 操作方法沒有作用,但 opcache 會重新快取對應於 opcache.revalidate_freq 設定的腳本,前提是 opcache.validate_timestamps 已開啟。

為了保持快取最新,請在修改單個 php 檔案時使用 opcache_invalidate()。對於較大的變更,請僅在 php 腳本結束時使用 opcache_reset()。
To Top