84669 人學習
152542 人學習
20005 人學習
5487 人學習
7821 人學習
359900 人學習
3350 人學習
180660 人學習
48569 人學習
18603 人學習
40936 人學習
1549 人學習
1183 人學習
32909 人學習
Nginx設定A專案的root目錄是a,a目錄軟鏈到a1。 後來發布新程式碼後,會產生和a1同級的a2,a目錄也指到了a2,但在存取A專案的時候,運行的還是a1的程式碼運行結果,理論上此時應該執行的是a2程式碼才對。 甚至把a1目錄刪了,報錯內容都還是a1目錄裡的某部分程式碼不對。
A
a
a1
a2
懷疑是Nginx,或是php-fpm將程式碼檔案快取起來了? OPCache,還是Nginx,php-fpm哪裡設定的問題嗎? 求大神解答。
小伙看你根骨奇佳,潜力无限,来学PHP伐。
看你的描述,我估計問題出在opcache上。这里nginx应该是把目录a作为路径传递到了php-fpm中(通常的配置是这样的),而opcache也是以路径作为缓存代码的Key,所以说虽然软连接指向的目录改变了,但是opcache辨識到的目錄是一樣的,所以使用了直接快取的檔案。
opcache
建議在開發環境中,不要開啟程式碼緩存,因為目前opcache還不能每次都檢查檔案是否更新,只能透過函數或設定更新時間來更新。
mtjpmj
php.ini裡配置:
opcache.validate_timestamps=1 opcache.revalidate_freq=0
opcache會每次都驗證PHP檔案的修改時間戳,如果PHP檔案被修改過,opcache會重新快取新的PHP檔案opcode到記憶體.
看你的描述,我估計問題出在
opcache
上。这里nginx应该是把目录
a
作为路径传递到了php-fpm中(通常的配置是这样的),而
opcache
也是以路径作为缓存代码的Key,所以说虽然软连接指向的目录改变了,但是
opcache
辨識到的目錄是一樣的,所以使用了直接快取的檔案。建議在開發環境中,不要開啟程式碼緩存,因為目前
opcache
還不能每次都檢查檔案是否更新,只能透過函數或設定更新時間來更新。php.ini裡配置:
opcache會每次都驗證PHP檔案的修改時間戳,如果PHP檔案被修改過,opcache會重新快取新的PHP檔案opcode到記憶體.