1 $memcache = new Memcache();
2
3 $all_items = $memcache->getExtendedStats('items');
4
5 var_export($all_items);
1 array (
2 '192.168.0.110:11211' =>
3 array (
4 'items' =>
5 array (
6 1 =>
7 array (
8 'number' => '1',
9 'age' => '1851',
10 ),
11 2 =>
12 array (
13 'number' => '1',
14 'age' => '1851',
15 ),
16 3 =>
17 array (
18 'number' => '2',
19 'age' => '1864',
20 ),
21 7 =>
22 array (
23 'number' => '1',
24 'age' => '1851',
25 ),
26 9 =>
27 array (
28 'number' => '1',
29 'age' => '1',
30 ),
31 12 =>
32 array (
33 'number' => '2',
34 'age' => '1851',
35 ),
36 13 =>
37 array (
38 'number' => '1',
39 'age' => '1851',
40 ),
41 14 =>
42 array (
43 'number' => '1',
44 'age' => '1851',
45 ),
46 15 =>
47 array (
48 'number' => '1',
49 'age' => '1851',
50 ),
51 16 =>
52 array (
53 'number' => '1',
54 'age' => '1850',
55 ),
56 18 =>
57 array (
58 'number' => '2',
59 'age' => '1851',
60 ),
61 19 =>
62 array (
63 'number' => '1',
64 'age' => '1851',
65 ),
66 20 =>
67 array (
68 'number' => '1',
69 'age' => '1851',
70 ),
71 ),
72 ),
73 )
1 foreach ($options as $option) {
2 if (isset($all_items[$option]['items'])) {
3 $items = $all_items[$option]['items'];
4
5 foreach ($items as $number => $item) {
6 $str = $memcache->getExtendedStats('cachedump', $number, 0);
7 $line = $str[$option];
8 if (is_array($line) && count($line) > 0) {
9 foreach ($line as $key => $value) {
10 $keys[] = $key;
11 }
12 }
13 }
14 }
15 }
1 function list_key() {
2 $memcache = new Memcache();
3 $all_items = $memcache->getExtendedStats('items');
4 $keys = array();
5 foreach ($this->_options as $options) {
6 foreach ($options as $option) {
8 if (isset($all_items[$option]['items'])) {
9 $items = $all_items[$option]['items'];
10 foreach ($items as $number => $item) {
11 $str = $memcache->getExtendedStats('cachedump', $number, 0);
12 $line = $str[$option];
13 if (is_array($line) && count($line) > 0){
foreach ($line as $key => $value) {
$keys[] = $key;
14 }
15 }
16 }
17 }
18 }
19 }
20
21 return array_unique($keys);
22
23 }
今天同事說需要在瀏覽器及時打印出現在正在執行任務的信息,但又不能一口氣的把所有的信息全部echo出來。因爲程序需要執行2-3個小時才能結束。
這個功能其實也很好做。使用php自帶的ob系列函數就可以了。
我實現的代碼如下:
1 //先填充好buffer,防止需要及時輸出的東西被放到了buffer中去 start
2 ob_start();
3 $buffer_size = ini_get('output_buffering');//獲得緩衝區大小
4
5 for($i=0;$i<(int)$buffer_size;$i++){
6 echo ' ';
7 }
8 ob_flush();
9 flush();
10 //先填充好buffer,防止需要及時輸出的東西被放到了buffer中去 end
11
12 //下面爲需要及時輸出的內容
13 for($i=1;$i<=10;$i++){
14 echo $i,'<Br />';
15 ob_flush();
16 flush();
17 sleep(1);
18 }
每秒打印1個字符。共打印十個數字。
這個效果在ff、ie8下都很好。但是在ie6下,第一次執行的時候確實等了10多秒一下在打印出來的。再次刷次頁面的時候才和ff、ie8的效果一直。
我想這個情況是因爲ie6瀏覽器自帶緩衝區導致的問題。可是又不知道怎麼解決。於是在www上搜索了一下。原來真的是這樣的。網上有位哥們說
“IE的某些版本只有在字符串緩衝到256字節的時候纔會將緩衝內容輸出到瀏覽器上”。
於是我修改了上面的代碼爲:
1 //先填充好buffer,防止需要及時輸出的東西被放到了buffer中去 start
2 ob_start();
3
4 function isIE6(){
5 $agent = $_SERVER['HTTP_USER_AGENT'];
6 return (stripos($agent, 'MSIE 6.0') !== false);
7 }
8
9 $buffer_size = ini_get('output_buffering');//獲得緩衝區大小
10
11 //如果是IE6 需要加上256,因爲在某些ie6版本下 ie6瀏覽器自己有256的緩衝區
12 if (isIE6()) {
13 $buffer_size = (int)$buffer_size + 256;
14 }
15
16 for($i=0;$i<(int)$buffer_size;$i++){
17 echo ' ';
18 }
19 ob_flush();
20 flush();
21 //先填充好buffer,防止需要及時輸出的東西被放到了buffer中去 end
22
23 //下面爲需要及時輸出的內容
24 for($i=0;$i<10;$i++){
25 echo $i,'<Br />';
26 ob_flush();
27 flush();
28 sleep(1);
29 }
執行下。ok!!
謹此爲記。
參考:http://www.iefans.net/ie-php-huanchong-kongzhi/