Я пытаюсь установить APC на Gentoo с php 5.2 Вот полная команда, которую я запустил:
mkdir /home/APC-php
cd /home/APC-php
wget http://pecl.php.net/get/APC
tar -xzvf APC
cd APC-3.1.9
/usr/local/php5/bin/phpize
./configure --enable-apc --enable-apc-mmap --with-php-config=/usr/local/php5/bin/php-config
make
make test (i think almost everything failed here)
make install
/etc/init.d/httpd restart
В make install
команда показала
Installing shared extensions: /usr/local/php5/lib/php/extensions/no-debug-non-zts-20060613/
Installing header files: /usr/local/php5/include/php/
Когда я сделал после изготовления, make test
вывод был:
=====================================================================
FAILED TEST SUMMARY
---------------------------------------------------------------------
APC: apc_store/fetch with strings [tests/apc_001.phpt]
APC: apc_store/fetch with objects [tests/apc_002.phpt]
APC: apc_store/fetch with objects (php pre-5.3) [tests/apc_003.phpt]
APC: apc_store/fetch with bools [tests/apc_004.phpt]
APC: apc_store/fetch with arrays of objects [tests/apc_005.phpt]
APC: apc_store/fetch reference test [tests/apc_006.phpt]
APC: apc_inc/apc_dec test [tests/apc_007.phpt]
APC: apc_cas test [tests/apc_008.phpt]
APC: apc_delete_file test [tests/apc_009.phpt]
APC: apc_store/fetch/add with array of key/value pairs. [tests/apc_010.phpt]
APC: bindump user cache [tests/apc_bin_001.phpt]
APC: bindump file cache part 1 [tests/apc_bin_002.phpt]
APC: APCIterator general [tests/iterator_001.phpt]
APC: APCIterator regex [tests/iterator_002.phpt]
APC: APCIterator chunk size [tests/iterator_003.phpt]
APC: APCIterator regex & chunk size & list [tests/iterator_004.phpt]
APC: APCIterator delete [tests/iterator_005.phpt]
APC: APCIterator formats [tests/iterator_006.phpt]
APC: APCIterator Overwriting the ctor [tests/iterator_007.phpt]
=====================================================================
Я уже добавил extension=apc.so
в /usr/local/lib64/php5/php.ini
Extension_dir - это extension_dir = "./"
Чтобы загрузить apc, мне пришлось поместить файл apc.so в свой каталог www. Теперь phpinfo (); говорит, что загружено.
Проблема в том, что apc_store не может эффективно хранить данные между запросами.
$bar = 'BAR';
apc_store('foo', $bar);
var_dump(apc_fetch('foo'));
В рамках одного запроса эта работа.
Теперь, если я попытаюсь сделать var_dump(apc_fetch('foo'));
по другому запросу он печатает:
bool(false)
Это похоже на то, что APC не работает в фоновом режиме, а запускается только для каждого запроса
Разве эта награда не стоит вопроса? :(
У меня были подобные проблемы в прошлом.
Попробуйте добавить эту строку в конфигурацию php
apc.mmap_file_mask=/tmp/apc.XXXXXX
apc.shm_size=48
В любом случае, почему вы не используете pecl-apc пакет от gentoo?
Судя по предоставленной вами информации, похоже, что вы скомпилировали большую часть необходимых пакетов с нуля, а не использовали систему управления пакетами Gentoo, известную как Portage. Выбор варианта установки из исходного кода обычно является плохой идеей, если вы точно не знаете, что делаете. Хотя верно, что поведение Portage по умолчанию также заключается в установке пакетов из исходного кода, он имеет расширенный набор инструментов управления зависимостями, который автоматически обрабатывает самые сложные зависимости и делает обновление и удаление пакетов безболезненным.
Следующие файлы и каталоги, которые вы указали, являются нестандартными для типичной конфигурации Gentoo и наверняка приведут к неожиданному сбою или сбою взаимозависимых пакетов:
/usr/local/lib64/php5/php.ini
/etc/init.d/httpd
/usr/local/php5/bin/phpize
Если это не производственная машина и вы можете сэкономить время простоя, я предлагаю полностью удалить Apache и PHP, а затем переустановить их с помощью Portage следующим образом:
Установите Apache:
emerge -av www-servers/apache
Затем вам нужно установить PHP, но обязательно установите apache2
USE-флаг. Добавление ваших USE-флагов в /etc/portage/packages.use
гарантирует, что они будут сохранены в будущих обновлениях. Типичный набор USE-флагов для PHP в /etc/portage/packages.use
будет выглядеть так:
dev-lang/php apache2 berkdb bzip2 calendar cli crypt ctype curl curlwrappers fileinfo filter ftp gd gdbm hash iconv imap inifile ipv6 json ldap mssql mysql mysqli nls pdo phar posix readline session simplexml snmp soap sockets spell sqlite ssl threads tokenizer truetype unicode xml xmlrpc xsl zip zlib
Вы сможете удалить большинство USE-флагов, которые я указал в этом примере, за исключением apache2
флаг. Ваши конкретные требования будут определять USE-флаги, которые вам нужно установить, но для базовой установки PHP, которая будет работать с Apache, вам потребуется только apache2
устанавливаемый флаг.
Теперь, когда у вас установлены USE-флаги, вы можете продолжить установку PHP:
emerge -av dev-lang/php
После успешной установки PHP вы можете подтвердить, что он правильно настроен для работы с Apache, открыв /etc/conf.d/apache2
в текстовом редакторе и убедитесь, что строка, начинающаяся с APACHE2_OPTS
содержит директиву -D PHP5
.
Теперь вы можете запустить Apache, вызвав правильный сценарий инициализации:
/etc/init.d/apache2 start
На этом этапе не должно возникнуть проблем с запуском Apache. Следующий шаг требует внесения некоторых изменений в PHP, так что пока вы должны снова остановить Apache.
Gentoo разделяет файлы конфигурации PHP на два отдельных каталога, один для настройки PHP CLI, а другой для настройки PHP, используемого с Apache. Эти каталоги выглядят следующим образом:
/etc/php/cli-php5/php.ini
/etc/php/apache2-php5/php.ini
Ваш точный путь может немного отличаться в зависимости от установленной вами версии PHP.
Последний шаг - установить APC, снова используя Portage:
emerge -av dev-php5/pecl-apc
После успешной установки APC вам может потребоваться отредактировать /etc/php/apache2-php5/php.ini
файл, чтобы проверить правильность настройки APC и убедиться, что PHP загружает расширение при запуске Apache. Убедитесь, что в php.ini
файл:
apc.enabled=1
apc.shm_size=32
Доступен полный список директив конфигурации APC. здесь, в онлайн-документации PHP.
Вы выполнили все шаги, необходимые для правильной настройки Apache, PHP и расширения APC для среды Gentoo. Для завершения перезапустите Apache.
/etc/init.d/apache2 restart