SERVIDOR MUITO LENTO C/ AJAX

1. SERVIDOR MUITO LENTO C/ AJAX

Paulo
henbran

(usa Debian)

Enviado em 24/06/2010 - 14:34h

PESSOAL, BOA TARDE!!! Por favor, ajudem-me a resolver um problema de lentidão AJAX no servidor WEB.
..............................................
Uso a muito tempo Ubuntu (agora versão 10 64bits), apache2, php5, mysql5 e, desenvolvi um sistema com tecnologia Ajax x PHP e Mysql. Uso orientação a Objetos em PHP. A estrutura PHP está assim:

arquivo (classe) principal: chamarClass.php
----------------------------------------------------------
<?php
session_start();
require_once 'cmdSql.php';
require_once 'pesquisaSql.php';

class chamarClass extends cmdSQL {
public $funcao;
public function __construct() {
$this->funcao = $_POST[funcao];
$this->funcao();
}

public function funcao() {
switch ($this->funcao) {
case 'pesqTurma':
//echo "teste1: ".$this->funcao; exit;
$pesquisaSql = new pesquisaSql();
//echo "teste3: ".$this->funcao; exit;
$this->sql = $pesquisaSql->pesqTurma();
//echo "teste2: ".$this->sql;exit;
$this->pesquisar();
break;

case 'pesqDiasSemana':
$pesquisaSql = new pesquisaSql();
$this->sql = $pesquisaSql->pesqDiasSemana();
$this->pesquisar();
break;

case 'pesqDisponibilidadeTurno':
$pesquisaSql = new pesquisaSql();
$this->sql = $pesquisaSql->pesqDisponibilidadeTurno();
$this->pesquisar();
break;

case 'pesqOutroTemaInteresse':
$pesquisaSql = new pesquisaSql();
$this->sql = $pesquisaSql->pesqOutroTemaInteresse();
$this->pesquisar();
break;

case 'pesqCargaHrDesejada':
$pesquisaSql = new pesquisaSql();
$this->sql = $pesquisaSql->pesqCargaHrDesejada();
$this->pesquisar();
break;

case 'pesqCursoRealizado':
$pesquisaSql = new pesquisaSql();
$this->sql = $pesquisaSql->pesqCursoRealizado();
$this->pesquisar();
break;

default:
echo "funcao indefinida";
session_destroy(); // DESTRUIR SESSÃO POIS PODE SER TENTARIVA DE CÓDIGO MALICIOSO
exit;
break;
}
if (is_array($this->retorno)
)$this->extraiArrayXml();
///echo $this->xml; exit;
if ($this->xml != ''
)echo $this->exibeXml();
}

}


$chamarClass = new chamarClass();
?>
-----------------------------------------------------------------
que extende a classe cmdSql: cmdSql.php
-----------------------------------------------------------------
<?php

/* DEFINIÇÃO DESTA CLASSE: Receber as strings básicas Sql e executar (select / insert / update / delete)
* setar o resultado das instruções sql executadas no atributo 'retorno' e ...
* de uma classe extendida dessa se pode gerar a string xml e ...
* exibir o xml
*/

require_once("Banco.php");
class cmdSQL extends Banco {

public $retorno; //GUARDA O RETORNO DA INSTRUÇÃO SQL EXECUTADA
public $rs; // SETA O RECORDSET
public $sql;
public $xml;

//||||||||||||| COMANDOS DE SQL PARA OPERAÇÕES BÁSICAS
//++++++++++++++++++++++++++ PESQUISAR ++++++++++++++++++++++++++
public function pesquisar() { // inicio do function PESQUISAR
//if ($sql)$this->sql = $sql;
try {
$this->conectar();
try // depende do resultado das instruções SQL a seguir
{
$this->rs = $this->con->prepare($this->sql, array(PDO::ATTR_CURSOR => PDO::CURSOR_FWDONLY));
$this->rs->execute(); //executa a instrução sql
$this->retorno[n_reg] = $this->rs->rowCount();
$this->retorno[n_cols] = $this->rs->columnCount();
//echo "teste0: ". $this->retorno[n_reg]; exit; //LINHA SÓ P/ TESTE;

if (($this->retorno[n_reg])>0) {
$this->retorno[res]=$this->rs->fetchAll(PDO::FETCH_ASSOC); //Retorna todas as linhas (registros) como um array
}
else {
//Mensagem alertando que não econtrou registros
$this->retorno[msg] .= "Registro(s) não encontrado(s).";
}

}
catch (Exception $e) {
$this->retorno[msg] .= "\nErro: Código: " . $e->getCode() . "Mensagem " . $e->getMessage();
}
} catch (Exception $exc) {
$this->retorno[msg] .= $this->msg." <hr> ".$exc->getTraceAsString();
}
return $this->retorno;
} // fim do function PESQUISAR
//++++++++++++++++++++++++++ INCLUIR ++++++++++++++++++++++++++
public function incluir() {
//$this->Banco = new Banco();
$this->conectar();
if (isset ($this->con)) {
try {
$this->rs = $this->con->prepare($this->sql);
$this->rs->execute();
$this->retorno[msg] = 'Registro salvo com sucesso!';
}
catch (Exception $e) {
$this->retorno[msg] = "Erro de inclusão: Código: " . $e->getCode() . "Mensagem " . $e->getMessage();
}
}
return $this->retorno;
}
//++++++++++++++++++++++++++ ALTERAR ++++++++++++++++++++++++++
public function alterar() {
//$this->Banco = new Banco();
$this->conectar();
if (isset($this->con)) {
try {
$this->rs = $this->con->prepare($this->sql);
$this->rs->execute();
$this->retorno[msg] = 'Registro alterado com sucesso!';
}
catch (Exception $e) {
$this->retorno[msg] = "Erro: Código: " . $e->getCode() . "Mensagem " . $e->getMessage();
}
}
//return $this->retorno;
}
//+++++++++++++++++++++++ EXCLUIR ++++++++++++++++++++++
public function excluir() {
//$this->Banco = new Banco();
$this->conectar();
if(isset($this->con)) {
try {
$this->rs = $this->con->prepare($this->sql);
$this->rs->execute();
$this->retorno[msg] = 'Registro alterado com sucesso!';
}
catch (Exception $e) {
$this->retorno[msg] = "Erro: Código: " . $e->getCode() . "Mensagem " . $e->getMessage();
}
}
return $this->retorno;
}

public function extraiArrayXml() {
try {
if ($this->retorno[res]) {
foreach ($this->retorno[res] as $lin) {
foreach ($lin as $k=>$col) {
$linha .= "<".$k.">".utf8_encode($col)."</".$k.">";
}
}
$this->xml .= "<registros>".$linha."</registros>";
}
if ($this->retorno[n_reg]) $this->xml .= "<n_reg>".$this->retorno[n_reg]."</n_reg>";
if ($this->retorno[n_cols]) $this->xml .= " <msg> ".$this->retorno[n_cols]." </msg>";
if ($this->retorno[msg]) $this->xml .= " <msg> ".$this->retorno[msg]." </msg>";

} catch (Exception $exc) {
echo "Erro de extração da Array para XML.<hr>".$exc->getTraceAsString();
}


}
// %%%%%%%%%%%%%%%% EXIBE XML %%%%%%%%%%%%%%
public function exibeXml() {
try {
$this->xml = "<?xml version=\"1.0\" encoding=\"UTF-8\"?><raiz>".$this->xml."</raiz>";
header("Content-type: application/xml");
return $this->xml;
} catch (Exception $exc) {
echo '<msg>Erro de montagem XML!!!<msg>'.$exc->getTraceAsString();
}
}
}

?>
---------------------------------------------------------------
que extende a classe Banco.php
---------------------------------------------------------------
<?php

require_once("dC.php");

class Banco extends dC {

public $con;
public $msg;

public function __construct() {
}

public function conectar() {

$this->tipoBd();
if ($this->con) {
try {
$this->con->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
} catch (PDOException $e) {
$this->msg = "Erro de conexão com o banco de dados: Código: " . $e->getCode() . "Mensagem " . $e->getMessage() . "hora: " . date('H:i:s');
}
} else {
echo "Erro na definição PDO do banco de dados!";
exit;
}
}

public function tipoBd() {
try {
switch ($this->tipo) {
case 'mysql':
try {
$this->con = new PDO("mysql:host=" . $this->host . ";dbname=" . $this->bd, $this->user, $this->pass);
} catch (Exception $exc) {
$this->msg = "Erro de coneção com o banco de dados MySql. " . $exc->getTraceAsString();
}
break;
case 'pgsql':
$this->con = new PDO("pgsql:dbname={" . $this->bd . "};user={" . $this->user . "}; password={" . $this->pass . "};host=" . $this->host);
break;
case 'oci8':
$tns = "(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=" . $this->host . ")(PORT=1521)))(CONNECT_DATA=(SID=" . $this->bd . ")))";
$this->con = new PDO("oci:dbname=" . $tns, $this->user, $this->pass, array(PDO::ATTR_PERSISTENT => true));
break;
case 'mssql':
$this->con = new PDO("mssql:host={" . $this->host . "},1433;dbname={" . $this->bd . "}", $this->user, $this->pass);
break;
}
} catch (Exception $exc) {
echo $exc->getTraceAsString();
exit;
}
}

}
?>
---------------------------------------------------------------
que extende a classe dC.php
-----------------------------------------------------------------
<?php
class dC {
public $tipo = "mysql";
public $host = "localhost";
public $bd = "nomeDoBancoDeDados";
public $user = "usuario";
public $pass = "senha";
}
?>
---------------------------------------------------------------
A classe que monta as sstring sql é pesquisaSql.php
----------------------------------------------------------------
<?php

session_start();

class pesquisaSql {

public $fim;
public $funcao;
public $limite;
public $ordem;
public $sessao;
public $todos;
public $id_turma;
public $desc_turma;

public function pesqTurma() {
$this->ordem = "GROUP BY t.id_turma ORDER BY t.desc_turma LIMIT 20";

if ($this->id_turma != '') {
$condicao .= " t.id_turma= " . $this->id_turma;
}

if ($this->desc_turma != '') {
if ($condicao)
$condicao .= " AND ";
$condicao .= " t.desc_turma= " . $this->desc_turma;
}

if ($condicao)
$condicao = " WHERE " . $condicao;

return "SELECT t.id_turma, t.desc_turma FROM turma t " . $condicao . " " . $this->ordem;
}

public function pesqDiasSemana() {
$this->ordem = "GROUP BY s.id_dia_semana ORDER BY s.desc_dia_semana LIMIT 20";

if ($this->id_dia_semana != '') {
$condicao .= " s.id_dia_semana= " . $this->id_dia_semana;
}

if ($this->desc_dia_semana != '') {
if ($condicao)
$condicao .= " AND ";
$condicao .= " t.desc_dia_semana= " . $this->desc_dia_semana;
}

if ($condicao)
$condicao = " WHERE " . $condicao;

return "SELECT s.id_dia_semana, s.desc_dia_semana FROM dia_semana s " . $condicao . " " . $this->ordem;
}

public function pesqDisponibilidadeTurno() {
$this->ordem = "GROUP BY d.id_disponibilidade ORDER BY d.desc_disponibilidade LIMIT 20";

if ($this->id_disponibilidade != '') {
$condicao .= " d.id_disponibilidade= " . $this->id_disponibilidade;
}

if ($this->desc_disponibilidade != '') {
if ($condicao)
$condicao .= " AND ";
$condicao .= " d.desc_disponibilidade= " . $this->desc_disponibilidade;
}

if ($condicao)
$condicao = " WHERE " . $condicao;

return "SELECT d.id_disponibilidade, d.desc_disponibilidade FROM disponibilidade_turno d " . $condicao . " " . $this->ordem;
}
// &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public function pesqOutroTemaInteresse() {
$this->ordem = "GROUP BY ot.id_outro_tema ORDER BY ot.desc_outro_tema LIMIT 20";

if ($this->id_outro_tema != '') {
$condicao .= " d.id_outro_tema= " . $this->id_outro_tema;
}

if ($this->desc_outro_tema != '') {
if ($condicao)
$condicao .= " AND ";
$condicao .= " ot.desc_outro_tema= " . $this->desc_outro_tema;
}

if ($condicao)
$condicao = " WHERE " . $condicao;

return "SELECT ot.id_outro_tema, ot.desc_outro_tema FROM outro_tema_interesse ot " . $condicao . " " . $this->ordem;
}
// &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public function pesqCargaHrDesejada() {
$this->ordem = "GROUP BY ch.id_carga_horaria ORDER BY ch.desc_carga_horaria LIMIT 20";

if ($this->id_carga_horaria != '') {
$condicao .= " ch.id_carga_horaria= " . $this->id_carga_horaria;
}

if ($this->desc_carga_horaria != '') {
if ($condicao)
$condicao .= " AND ";
$condicao .= " ch.desc_carga_horaria= " . $this->desc_carga_horaria;
}

if ($condicao)
$condicao = " WHERE " . $condicao;

return "SELECT ch.id_carga_horaria, ch.desc_carga_horaria FROM carga_horaria_desejada ch " . $condicao . " " . $this->ordem;
}
// &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&
public function pesqCursoRealizado() {
$this->ordem = "GROUP BY cr.id_curso_realizado ORDER BY cr.desc_curso_realizado LIMIT 20";
if ($this->id_carga_horaria != '') {
$condicao .= " ch.id_carga_horaria= " . $this->id_carga_horaria;
}

if ($this->desc_curso_realizado != '') {
if ($condicao)
$condicao .= " AND ";
$condicao .= " cr.desc_curso_realizado= " . $this->desc_curso_realizado;
}

if ($condicao)
$condicao = " WHERE " . $condicao;

return "SELECT cr.id_curso_realizado, cr.desc_curso_realizado FROM curso_realizado cr " . $condicao . " " . $this->ordem;
}
}
?>
============================================================
AJAX
============================================================
var HttpReq = null;
var tipo_retorno= null;
var separador=null;
var retorno=null;

function chamar_ajax(url, dados, tipo, tretorno, str){
tipo_retorno = tretorno;
separador = str;
ajax(url, dados, tipo);
return retorno;
}

function ajax(url, dados, tipo){
if (document.getElementById) //Verifica se o Browser suporta DHTML.
{
HttpReq = GetXmlHttpObject();
HttpReq.open("POST", url, tipo);
HttpReq.setRequestHeader("Content-Type", "application/x-www-form-urlencoded; charset=ISO-8859-1");
HttpReq.send(dados);
try {
HttpReq.onreadystatechange = XMLHttpRequestChange();
}
catch (e) {
HttpReq.onreadystatechange = XMLHttpRequestChange;
}
}
}


//verifica se o browser suporta o Ajax e cria XMLHttpRequest
function GetXmlHttpObject(){
var xmlHttp = null;
try {
// Firefox, Opera 8.0+, Safari====================
xmlHttp = new XMLHttpRequest();
}
catch (e) {
// Internet Explorer
try {
xmlHttp = new ActiveXObject("Msxml2.XMLHTTP");
}
catch (e) {
xmlHttp = new ActiveXObject("Microsoft.XMLHTTP");
}
}
return xmlHttp;
}

//verifica o status da requisição Ajax e quando e depois chama a função que ira definir que função ira processar o dados retornados
function XMLHttpRequestChange(){
if (HttpReq.readyState == 4) {
if (HttpReq.status == 200) {
if (tipo_retorno == "xml") {
retorno = HttpReq.responseXML;
}
else {
if (tipo_retorno == "m") { //se matriz ele carega uma string e despois tratar transfoma ela com uma matriz
var texto = new String(HttpReq.responseText);
retorno = texto.split(separador); /* split trabalho o vetor ... */
}
else {
retorno = HttpReq.responseText;
//window.alert(retorno);
}
}
}
else {
window.alert("erro ao HttpReq.status");
}
}
}


  






Patrocínio

Site hospedado pelo provedor RedeHost.
Linux banner

Destaques

Artigos

Dicas

Tópicos

Top 10 do mês

Scripts