HybridAuth и APC
Сегодня нашел на просторе интернета несколько расширяющих классов для HybridAuth Один из них предназначен для APC И содержит следующий код:
Пытаюсь понять как его подружить с нашим Гибридом, с Modxcloud и его APC. Может кто сможет помочь мыслью. Ведь многим приходится отключать APC
Исходный код лежит здесь
<?php
/**
* HybridAuth
*
* An open source Web based Single-Sign-On PHP Library used to authentificates users with
* major Web account providers and accessing social and data apis at Google, facebook*,
* Yahoo!, MySpace, Twitter, Windows live ID, etc.
*
* Copyright © 2009 (http://hybridauth.sourceforge.net)
*
* @package Hybrid_Auth
* @author hybridAuth Dev Team
* @copyright Copyright © 2009, hybridAuth Dev Team.
* @license http://hybridauth.sourceforge.net/licenses.html under MIT and GPL
* @link http://hybridauth.sourceforge.net
*/
// ------------------------------------------------------------------------
/*
* Copyright 2008 Google Inc.
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
* http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
/**
* A persistent storage class based on the APC cache, which is not
* really very persistent, as soon as you restart your web server
* the storage will be wiped, however for debugging and/or speed
* it can be useful, kinda, and cache is a lot cheaper then storage.
*
* @author Chris Chabot
*/
class Hybrid_Storage_Apc extends Hybrid_Storage {
public function __construct() {
if (! function_exists('apc_add')) {
throw new storageException("Apc functions not available");
}
}
private function isLocked($key) {
if ((@apc_fetch($key . '.lock')) === false) {
return false;
}
return true;
}
private function createLock($key) {
// the interesting thing is that this could fail if the lock was created in the meantime..
// but we'll ignore that out of convenience
@apc_add($key . '.lock', '', 5);
}
private function removeLock($key) {
// suppress all warnings, if some other process removed it that's ok too
@apc_delete($key . '.lock');
}
private function waitForLock($key) {
// 20 x 250 = 5 seconds
$tries = 20;
$cnt = 0;
do {
// 250 ms is a long time to sleep, but it does stop the server from burning all resources on polling locks..
usleep(250);
$cnt ++;
} while ($cnt <= $tries && $this->isLocked());
if ($this->isLocked()) {
// 5 seconds passed, assume the owning process died off and remove it
$this->removeLock($key);
}
}
/**
* @inheritDoc
*/
public function get($key, $expiration = false) {
$key = $this->storageKey . ":" . $key;
if (($ret = @apc_fetch($key)) === false) {
return false;
}
if (!$expiration || (time() - $ret['time'] > $expiration)) {
$this->delete($key);
return false;
}
return unserialize($ret['data']);
}
/**
* @inheritDoc
*/
public function set($key, $value) {
$key = $this->storageKey . ":" . $key;
if (@apc_store($key, array('time' => time(), 'data' => serialize($value))) == false) {
throw new storageException("Couldn't store data");
}
}
/**
* @inheritDoc
*/
public function delete($key) {
$key = $this->storageKey . ":" . $key;
@apc_delete($key);
}
}
Пытаюсь понять как его подружить с нашим Гибридом, с Modxcloud и его APC. Может кто сможет помочь мыслью. Ведь многим приходится отключать APC
ini_set ( 'apc.cache_by_default' , 0);
и жертвовать этой плюшкой.Исходный код лежит здесь
*Meta, которой принадлежат facebook и instagram признана экстремистской в России
Комментарии: 10
У тебя настолько часто авторизуются юзеры, что нужно использовать APC?
Ну и в PHP 5.5 его вообще нет, по умолчанию — там свой встроенный кэшер. Лично я уже перешел на 5.5.
Ну и в PHP 5.5 его вообще нет, по умолчанию — там свой встроенный кэшер. Лично я уже перешел на 5.5.
Я сижу на Modxcloud, там версия php 5.4.23. И да я делаю площадку на которой будет очень много авторизаций через соц сети…
Очень много — это несколько тысяч в секунду?
Вряд ли ты на меньших цифрах заметишь разницу.
Вряд ли ты на меньших цифрах заметишь разницу.
Ну не так конечно же) Просто хотелось как то использовать по максимуму ресурсы за которые платишь) Вот и хочется как то задействовать APC.
Ну и как этот кэшер использовать в MODx?
Его нужно слегка модернизировать, а потом вызвать в Endpoint.php.
Как минимум заменить:
Как минимум заменить:
$key = $this->storageKey . ":" . $key;
на$key = strtolower( $key );
Я пока его отложил на дальнюю полку. Может кто захочет его допилить и поделится буду только рад и не только я. В состав включена система кэширования и оптимизации байткода Zend OPcache (бывший Zend Optimizer+), ранее поставляемая в составе проприетарного пакета Zend Server, но недавно переведённая компанией Zend Technologies в разряд свободных проектов. Zend OPcache предоставляет средства для ускорения выполнения скриптов на языке PHP за счёт использования техники кэширования опкода и применения дополнительных оптимизаций. Предкомпилированный код скриптов кэшируется в разделяемой памяти, что позволяет избежать выполнения стадий чтения с диска, разбора и компиляции исходного кода скриптов при их повторном запуске.unix.uz/news/1390-reliz-php-5.5.0.html
Кроме того, Zend OPcache включает дополнительные методы оптимизации при генерации байткода, что позволяет достичь ускорения и за счёт более быстрого выполнения байткода. По сравнению с конкурирующей системой APC, Zend OPcache выигрывает по производительности в среднем на 5-20%, обеспечивает лучшую совместимость с различными ветками и возможностями языка PHP, а также содержит средства для выявления повреждения данных (например, из-за некорректно написанной PHP-функции на языке C).
Он, вроде как, включен по умолчанию.
Не у всех php 5.5:(
В репозитории github — HybridAuth Лежит версия 3.0.0 Может есть смысл перейти на нее? Она вроде как почище написана.
У довольствием перейду, как только её выпустят официально.
Пока это просто ветка в репозитории — неизвестно, сколько там ошибок.
Пока это просто ветка в репозитории — неизвестно, сколько там ошибок.
Авторизуйтесь или зарегистрируйтесь, чтобы оставлять комментарии.