2012-02-12 24 views
6

Tôi gặp sự cố khi chúng tôi chạy bản nâng cấp cho ứng dụng web của mình.clearstatcache + include_path + sessions

Sau khi tập lệnh nâng cấp hoàn tất và truy cập ứng dụng web qua trình duyệt, chúng tôi nhận được lỗi không tìm thấy tệp trên require_once() vì chúng tôi đã chuyển một số tệp và PHP vẫn có cấu trúc thư mục cũ được lưu trong bộ nhớ cache.

Nếu chúng tôi có 120 giây mặc định cho realpath_cache_ttl hết hạn, thì mọi thứ sẽ tự giải quyết, nhưng điều này không thể chấp nhận được vì lý do hiển nhiên.

Vì vậy, tôi đã thử sử dụng clearstatcache với thành công hạn chế. Tôi tạo ra một file riêng biệt (clearstatcache.php) mà chỉ gọi chức năng này (đây là một tập tin một dòng), và đặt một cuộc gọi đến nó trong cài đặt kịch bản của chúng tôi qua curl:

<?php 
clearstatcache(true); 

này dường như không làm việc Tuy nhiên, nếu tôi gọi tập tin này thông qua trình duyệt nó ngay lập tức bắt đầu hoạt động.

Tôi đang chạy phiên bản PHP 5.3

tôi bắt đầu nhìn vào sự khác biệt theo yêu cầu tiêu đề giữa trình duyệt và curl của tôi, và điều duy nhất tôi có thể thấy rằng có thể có vấn đề là cookie PHPSESSID.

Vì vậy, câu hỏi của tôi là, hiện tại vấn đề PHPSESSID (tôi không nghĩ rằng nó nên). Tôi đang làm gì sai với kịch bản curl của tôi? Tôi đang sử dụng

curl -L http://localhost/clearstatcache.php 

EDIT: Sau khi nghiên cứu sâu hơn, tôi đã quyết định điều này có lẽ có cái gì để làm với nhiều quy trình apache chạy. clearstatcache sẽ chỉ xóa bộ nhớ cache của quá trình apache hiện tại - khi trình duyệt đang thực hiện yêu cầu một quá trình apache khác phục vụ yêu cầu và quá trình này vẫn có bộ nhớ cache cũ.

+0

AFAIK 'realpath_cache_ttl' và' realpath_cache_size' chỉ ảnh hưởng đến đường dẫn thực, đường dẫn đến tệp tồn tại. Ít nhất điều này được chứng minh bằng thực tế là tôi có các giá trị mặc định là 120 và 16K trên tất cả các dự án của tôi và tôi chưa bao giờ gặp phải vấn đề như vậy. Bạn có sử dụng bất kỳ bộ nhớ cache opcode nào không? – zerkms

+0

bạn chính xác, bộ nhớ cache là cho mỗi quá trình. – goat

Trả lời

1

Cho rằng bộ đệm là một phần của tiến trình con Apache nhờ mod_php, giải pháp của bạn ở đây có lẽ sẽ khởi động lại máy chủ Apache.

Nếu bạn đang sử dụng FastCGI (dưới Apache hoặc máy chủ web khác), giải pháp có thể sẽ khởi động lại bất kỳ trình quản lý quy trình nào bạn đang sử dụng.

Bước này có thể trở thành một phần trong kế hoạch phát hành chuẩn của bạn. Lưu ý rằng có thể có các bộ nhớ cache khác mà bạn cũng có thể cần xóa.

+0

Downvoter, tôi thực sự sẽ đánh giá cao một số phản hồi hữu ích. – Charles

+0

Theo như tôi có thể nói, đây là giải pháp duy nhất vào lúc này. Nếu bạn bằng cách nào đó có thể kết nối với mọi quá trình apache và clearstatcache thì đó sẽ là giải pháp tốt nhất, nhưng cho đến khi tôi tìm ra cách để làm điều đó, đây là giải pháp duy nhất. –

+0

Theo như tôi biết, không có cách nào để chuyển yêu cầu HTTP đến một đứa con Apache cụ thể. Điều đó * sẽ * rất tiện dụng. Bạn có thể thử mở nhiều kết nối liên tục như có các con Apache, mặc dù đó có thể sẽ tiêu tốn nhiều tài nguyên và thời gian hơn là khởi động lại an toàn. – Charles

Các vấn đề liên quan