Wiki Instalação #227
Contorno para PHP sem extensão de semáforo
João Borsoi, #227, abril 2010Palavras-chave: instalação, php
A instalação do avalanche em ambiente com PHP sem extensão de semáforo, irá gerar um erro como abaixo:
Fatal error: Call to undefined function sem_get() in /home/ADE/lib/avalanche-2.0.4-3/lib/AV_DBDriver.inc on line 116
Apesar de ser um requisito do avalanche, existe um contorno, não recomendado. Mas para usuários que saibam o que estão fazendo, pode ser útil principalmente quando deseja-se instalar o avalanche em ambiente onde não se pode alterar as configurações do PHP.
Até a atual versão do avalanche (2.0.6), os semáforos são usados somente em funcionalidades de criação e alteração dinâmica de tabelas do banco de dados, uma vez que estas não funcionam como transações (transactions).
Desta forma, se o aplicativo não faz uso desses recursos, é possível comentar as linhas que geram o erro, editando o arquivo avalanche/lib/UM_Users.inc, no método Login, conforme exemplo abaixo:
function Login($login, $password)
{
$maintenance=$this->module->pageBuilder->siteConfig->getVar("flags",
"maintenance");
if($maintenance)
throw new AV_Exception(MAINTENANCE, $this->lang);
// try
// {
// $this->dbDriver->ResumeTransaction();
// }
// catch(Exception $e)
// {
// throw new AV_Exception(MAINTENANCE, $this->lang);
// }
$sessionH = &$this->module->pageBuilder->sessionH;
if($sessionH->isMember())
$sessionH->attemptLogout();
$SQL = "SELECT userId, status FROM UM_User WHERE ";
$SQL .= "login = '" . $login . "'";
$user = $this->dbDriver->GetRow($SQL);
if($user['status'] == 0)
throw new AV_Exception(PERMISSION_DENIED, $this->lang);
if(!$sessionH->attemptLogin($login,$password))
throw new AV_Exception(PERMISSION_DENIED, $this->lang);
}