2012-11-06 31 views
6

Tôi đang xây dựng một khung nơi các cá thể sản phẩm sử dụng các tệp khung chính, cho đến khi có bản sao của phiên bản riêng của tệp đó. Để đạt được điều này tôi đã thực hiện như sau:PHP bao gồm thứ tự đường dẫn và bộ nhớ cache trạng thái

set_include_path(MY_PRODUCT_ROOT.'/' . PATH_SEPARATOR . MY_FRAMEWORK_ROOT.'/'); 

Vì vậy, nếu tôi gọi include('view-users.php'); đầu tiên nó sẽ tìm trong MY_PRODUCT_ROOT cho /view-users.php và nếu đó là không tìm thấy, sau đó nó sẽ tìm đến MY_FRAMEWORK_ROOT/xem người dùng .php.

Quy trình này hoạt động rất độc đáo cho đến khi tôi thêm tệp vào thư mục gốc của sản phẩm. Tôi biết rằng PHP/Apache đang lưu vào bộ nhớ đệm và một người sẽ nghĩ rằng để chạy clearstatcache(true); để xóa mọi bộ nhớ đệm trạng thái. PHP có khả năng sử dụng file_exists bên trong nó bao gồm(); và cho rằng tệp mới vẫn không tồn tại. Tôi đã thử khởi động lại Apache mà không có hiệu lực.

Thật không may khi chạy clearstatcache(true); cũng không giúp ích gì. Chỉ một lần tôi đã xóa MY_FRAMEWORK_ROOT/tệp, hãy nhớ xóa bộ nhớ cache và thử lại, do đó tìm MY_PRODUCT_ROOT/tệp.

Im một chút bối rối, tôi biết chúng tôi cần phải làm mới hiểu PHP/Apache cho dù các file (s) tồn tại hay không, nhưng clearstatcache(true); không được giúp đỡ ...

Bất kỳ ý tưởng?

CẬP NHẬT: Sửa chữa, khởi động lại Apache có vẻ như trợ giúp ngay bây giờ. Tôi nhắc lại rằng điều này chỉ xảy ra khi cố gắng ADD một tập tin vào MY_PRODUCT_ROOT, để chồng lên nhau một file MY_FRAMEWORK_ROOT hiện có, cho tùy

CẬP NHẬT: môi trường phát triển là Zend Server CE PHP 5.3.14 trên Windows, môi trường sản xuất Centos Linux httpd , PHP 5.3+. Thực tế là trình tối ưu hóa Zend được bật trên môi trường dev của tôi có thể có hiệu lực, Ngoài ra, không sử dụng APC hoặc bất kỳ tập lệnh lưu trữ bộ nhớ đệm nào khác

+0

Để chính xác hơn, khởi động lại apache chỉ hoạt động khi gọi clearstatcache. Tôi thực sự phải xóa tệp khuôn khổ, sau đó tải lại trang và đặt lại tệp khuôn khổ – Prof83

+1

bạn đã bật bộ nhớ cache apc chưa? (hoặc bộ nhớ cache mã hóa khác) –

+0

Tôi cũng không thể tạo lại sự cố của bạn trên php-5.3.3 và apache 2.2.16. Bạn có thể nêu thêm thông tin về môi trường của mình không? – Lars

Trả lời

2

Zend Optimizer+ tăng tốc thực thi PHP bằng cách tối ưu hóa bộ nhớ đệm và tối ưu hóa. Nó lưu trữ bytecode script biên dịch sẵn trong bộ nhớ chia sẻ. Điều này giúp loại bỏ các giai đoạn đọc mã từ đĩa và biên dịch nó trên truy cập trong tương lai. Để cải thiện hiệu suất hơn nữa, mã byte được lưu trữ được tối ưu hóa để thực thi nhanh hơn.

Đây là bộ nhớ đệm nội dung tệp được tìm thấy trong phần bao gồm, do đó clearstatcache không hoạt động. Tôi đã vô hiệu hóa Zend Optimizer và nó hoạt động ngay bây giờ.

+1

Xin lưu ý rằng bạn có thể chấp nhận câu trả lời của riêng bạn. Ngoài ra, bạn có thể vui lòng kiểm tra, nếu 'clearstatcache (true, true)' có khác biệt khi Zend Optimizer + hoạt động không? Nếu không, bạn nên gửi báo cáo lỗi tại trang chủ sản phẩm. – Lars

+0

Cảm ơn @Lars sẽ kiểm tra điều đó ... – Prof83

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