PHP Velho Oeste 2024

APCIterator::__construct

(PECL apc >= 3.1.1)

APCIterator::__constructAPCIterator イテレータオブジェクトを作成する

説明

public APCIterator::__construct ( string $cache [, mixed $search = NULL [, int $format = APC_ITER_ALL [, int $chunk_size = 100 [, int $list = APC_LIST_ACTIVE ]]]] )

APCIterator オブジェクトを作成します。

パラメータ

cache

キャッシュの形式。user あるいは file となります。

search

APC のキーの名前にマッチする PCRE 正規表現。 単一の正規表現の場合は文字列で、複数の正規表現の場合は配列で指定します。 NULL を渡すと、検索をスキップします。

format

希望する書式。 APC_ITER_* 定数の組み合わせで指定します。

chunk_size

チャンクサイズ。0 より大きい値でなければなりません。 デフォルト値は 100 です。

list

一覧にする形式。APC_LIST_ACTIVE あるいは APC_LIST_DELETED を渡します。

返り値

成功した場合に APCIterator オブジェクト、 失敗した場合に NULL を返します。

例1 APCIterator::__construct() の例

<?php
foreach (new APCIterator('user''/^counter\./') as $counter) {
    echo 
"$counter[key]$counter[value]\n";
    
apc_dec($counter['key'], $counter['value']);
}
?>

参考

  • apc_exists() - APC キーが存在するかどうかを調べる
  • apc_cache_info() - APC のデータから、キャッシュされた情報を取得する
add a note add a note

User Contributed Notes 3 notes

up
1
petabyte
12 years ago
With MAMP (using PHP 5.3.5 and APC 3.1.7) passing an array with multiple regex strings as $search arg always yields an empty APCIterator. Whereas passing a single string regex works. (Note: I only tried cache type 'user'.)

Workaround: Concatenated all regexes to single one with alternation. Example:

<?php
$results
= new APCIterator('user', '/^('.implode('|', $patterns).')');
?>
up
-2
puiumarius at gmail dot com
10 years ago
There is a bug in APCIterator: whatever the chunk size, APCIterator gets ALL keys matching the specified pattern (it seems that $chunk_size parameter is ignored).

Also, the documentation states that the default chunk size is 100, but even that is ignored.

Tested APC version is 3.1.13.

Example (I have 180 keys for this pattern in total):
$objIterator = new APCIterator('user', '/^key_prefix_\.*/', APC_ITER_ALL, 20);

If I itterate $objIterator  and then count() the results, I get 180.

Also, for:
$objIterator = new APCIterator('user', '/^key_prefix_\.*/');
Same count(), 180.

Even $objIterator->getTotalCount() returns 180.
up
-1
Anti Veeranna
13 years ago
Iterating (and specifically using current()) does not expunge cache entries for which $ttl has passed, you need to use apc_fetch to get rid of stale entries.
To Top