什麼是apc?
Alternative PHP Cache (APC) 是 PHP 的程式碼快取,讓你的程式在第一次執行時編好,接下來的存取就不必再重編以加快速度。
PHP5.5版以後,apc已被zend opcache所取代,所以不再具有作用,會變成模擬狀態;對於php<5.5版的,以下的安裝還是適用。
OS
CentOS release 6.5 (Final)
PHP <5.5 安裝APC
php在5.5版以下,可以直接使用 pecl來安裝,你必需要有pecl和phpize這兩個執行檔,以下是可能的步驟:
1. 安裝 phpize
# yum install php-devel
或(關於webtatic repos.請參考備註)
# yum --enablerepo=webtatic install php-devel
2. 安裝 pecl
# yum install php-pear
或
# yum --enablerepo=webtatic install php-pear
3. 安裝 apc
# pecl install apc
PHP >=5.5 安裝APC
當PHP>=5.5時,直接用上面的安裝會出錯
/var/tmp/APC/apc_compile.c: In function 「my_copy_class_entry」:
/var/tmp/APC/apc_compile.c:755: 警告:永遠不相容的指標類型賦值
/var/tmp/APC/apc_compile.c: In function 「apc_copy_class_entry_for_execution」:
/var/tmp/APC/apc_compile.c:1956: 警告:永遠不相容的指標類型賦值
/var/tmp/APC/apc_compile.c: In function 「apc_copy_trait_alias」:
/var/tmp/APC/apc_compile.c:2379: 錯誤:「zend_trait_alias」 沒具名為 「function」 的成員
/var/tmp/APC/apc_compile.c:2380: 錯誤:「zend_trait_alias」 沒具名為 「function」 的成員
/var/tmp/APC/apc_compile.c:2380: 錯誤:「zend_trait_alias」 沒具名為 「function」 的成員
/var/tmp/APC/apc_compile.c: In function 「apc_copy_trait_precedence」:
/var/tmp/APC/apc_compile.c:2416: 錯誤:「zend_trait_precedence」 沒具名為 「function」 的成員
/var/tmp/APC/apc_compile.c:2417: 錯誤:「zend_trait_precedence」 沒具名為 「function」 的成員
/var/tmp/APC/apc_compile.c:2417: 錯誤:「zend_trait_precedence」 沒具名為 「function」 的成員
還好有網友[2] 提供直接tarball的安裝法:
1. 下載 tarball
http://git.php.net/?p=pecl/caching/apc.git;a=summary
2. 解壓
# tar zvfx apc-6a90406.tar.gz
# cd apc-6a90406
3. 安裝
# phpize
如果沒有phpize這個程式,請參考最上方安裝phpize
確認php-config的位置
# whereis php-config
php-config: /usr/bin/php-config /usr/share/man/man1/php-config.1.gz
組態
# ./configure --enable-apc --enable-apc-mmap --with-php-config=/usr/bin/php-config
編譯
# make
# make install
4. 重啟APACHE生效
# apachectl restart
查看
# php -m |grep 'apc'
# php -m | grep 'apc'
apc
apcu
# php -i
apc
APC support => Emulated
apcu
APCu Support => Disabled
Version => 4.0.11
APCu Debugging => Disabled
MMAP Support => Enabled
MMAP File Mask => /tmp/apc.XXXXXX
Serialization Support => Disabled
Revision => $Revision: 328290 $
Build Date => May 4 2016 17:40:03
Directive => Local Value => Master Value
apc.coredump_unmap => Off => Off
apc.enable_cli => Off => Off
apc.enabled => On => On
apc.entries_hint => 4096 => 4096
apc.gc_ttl => 3600 => 3600
apc.mmap_file_mask => /tmp/apc.XXXXXX => /tmp/apc.XXXXXX
apc.preload_path => no value => no value
apc.rfc1867 => Off => Off
apc.rfc1867_freq => 0 => 0
apc.rfc1867_name => APC_UPLOAD_PROGRESS => APC_UPLOAD_PROGRESS
apc.rfc1867_prefix => upload_ => upload_
apc.rfc1867_ttl => 3600 => 3600
apc.serializer => php => php
apc.shm_segments => 1 => 1
apc.shm_size => 32M => 32M
apc.slam_defense => On => On
apc.smart => 0 => 0
apc.ttl => 0 => 0
apc.use_request_time => On => On
apc.writable => /tmp => /tmp
設定
接下來要進行細節的設定
1. 將apc.php複製到網頁
# cd apc-6a90406
# cp apc.php /var/www/html/
2. 打開瀏覽器
3. 修改 php.ini 的設定
# vi /etc/php.d/apcu.ini
apc.enabled=1 apc.shm_size="60M" apc.shm_segments=2 apc.ttl=7200 apc.user_ttl=7200 apc.num_files_hint=1024 apc.mmap_file_mask=/tmp/apc.XXXXXX apc.enable_cli=1
4. 修改apc.php
尋找並修改預設的密碼
defaults('ADMIN_USERNAME','root'); // Admin Username
defaults('ADMIN_PASSWORD','12345678'); // Admin Password - CHANGE THIS TO ENABLE!!!
5. 重啟apache
移除APC/ 移除APCU
# pecl uninstall apcu
PHP Warning: PHP Startup: apc.shm_segments setting ignored in MMAP mode in Unknown on line 0
uninstall ok: channel://pecl.php.net/apcu-4.0.11
# rm /etc/php.d/apcu.ini
重啟apache生效
參考資料
[1] 安裝apc http://2bits.com/articles/installing-php-apc-gnulinux-centos-5.html
[2] http://www.cnblogs.com/study-notes/articles/5365332.html
原文編修自 2013-03-01 16:36:20