2010-11-03 42 views
7

Tôi đã cố gắng sử dụng APC nhưng dường như không hoạt động như tôi mong đợi.PHP "apc_store" và "apc_fetch" không hoạt động như mong đợi

file1:

$bar = 'BAR'; 
apc_store('foo', $bar, 3600); 
var_dump(apc_fetch('foo'));   // It works here. Displays BAR 

file2:

var_dump(apc_fetch('foo')); 

Khi tôi thực hiện file2 trong vài giây, nó sẽ trả false thay vì 'BAR' là dữ liệu được lưu trữ trong bộ nhớ cache.

+0

Không bao giờ chạy vào nó, nhưng nó vẫn xảy ra khi [apc.localcache] (http://www.php.net/manual/en/apc.configuration.php#ini.apc.localcache) được đặt thành false ? – Wrikken

+0

Bạn đang thử nghiệm từ một trang web hay từ dòng lệnh? –

+3

Bạn đang sử dụng SAPI nào? Apache với mod_php? SUEXEC (mà không có gì hơn một wrapper xung quanh CGI)? FastCGI? CGI? Tôi đoán là bạn có nhiều hơn một quá trình PHP, vì vậy họ không chia sẻ không gian bộ nhớ ... – ircmaxell

Trả lời

0

Cài đặt (http://svn.php.net/viewvc/pecl/apc/trunk/apc.php?view=markup) trong một khu vực được bảo vệ của máy chủ, thiết lập mô tả trong nhận xét và điều đó sẽ giúp chẩn đoán sự cố bộ đệm APC của bạn một cách dễ dàng ... hoặc ít nhất cung cấp cho bạn thông tin chi tiết hơn về lý do không hoạt động như mong muốn.

4

Nó hoạt động tốt :) - miễn là bạn nhớ rằng mọi tập lệnh php được thực thi từ dòng lệnh đều sử dụng bộ nhớ cache riêng, vì vậy bạn sẽ không thể truy cập dữ liệu được lưu bởi script1 bên trong script2. (bạn không thể truy cập nó trong một lần chạy script1 sau đó vì nó bị xóa khi tập lệnh kết thúc)

Các cache này cũng tách biệt khỏi bộ nhớ cache bạn có nhiều khả năng muốn sử dụng và đó là bộ nhớ cache của các tập lệnh php được thực thi thông qua máy chủ web của bạn.

Vì vậy, nếu bạn có những bài kiểm tra trên lưu trong webroot của bạn, do đó bạn có thể truy cập ví dụ http://localhost/file1.php, sau đó http://localhost/file2.php

Nó sẽ làm việc như mong đợi.

Điều này cũng có nghĩa là bạn không thể xóa bộ nhớ cache APC của máy chủ web khỏi dòng lệnh. Bộ nhớ cache (bộ nhớ cache người dùng hoặc bộ nhớ cache opcode) mã thanh toán bù trừ phải được thực hiện thông qua máy chủ web của bạn. Nó sẽ là một wget từ shell, hoặc file_get_contents() từ php cli - nó tùy thuộc vào sở thích và hoàn cảnh của bạn.

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