ID: 42809 Updated by: [EMAIL PROTECTED] Reported By: apolinux at hotmail dot com -Status: Open +Status: Feedback Bug Type: WDDX related Operating System: Windows XP PHP Version: 5.2.4 New Comment:
We can't really help with this as long as you can't provide a short script that we can actually run. The one you have posted here is a) too long b) is not self-contained (it includes several other files..) So, if you want this bug to get fixed you need to do some hard work and cut down the code to whatever makes the bug appear. Hint: start by cutting all irrelevant parts out, like comments, classes, include/require lines, error checks, etc. Previous Comments: ------------------------------------------------------------------------ [2007-10-01 16:22:43] apolinux at hotmail dot com sorry, but I can't cut part of this code, because It doesn't works properly. May be the problem is when I try to make the call with WDDX locally, remotely instead. ------------------------------------------------------------------------ [2007-10-01 15:42:12] [EMAIL PROTECTED] Can you please try and cut it down a few dozen lines? Short script is around 10-20 lines long.. ------------------------------------------------------------------------ [2007-10-01 12:31:12] apolinux at hotmail dot com <? if (file_exists("../config/config.php") ){ include "../config/config.php"; } else { include "./config/config.php"; } ini_set('include_path', ini_get('include_path').";".$CONFIG_BASE['ruta_paginas']."/PEAR/"); require_once "PEAR.php"; require_once "DB.php"; require_once "operativolib.php"; require_once "granlavasecolib.php"; require_once "agenciaslib.php"; /* CREACION DE LA CLASE SINCRONIZACION contiene los metodos necesarios para comunicarse remotamente cliente a servidor usa el protocolo de conexion WDDX */ class Sincronizacion extends Operativo { var $urlServidor = ''; var $datos; var $peticion ; var $tabla; var $arrObj; function __construct($conex=NULL,$idAgenciaDest=NULL,$datos=NULL) { parent::__construct($conex); $agencia = new Agencias($conex); if ($this->idAgencia == $idAgenciaDest) {//no me conecto a la misma agencia die('No se puede conectar a la misma agencia.'); } if (empty($idAgenciaDest) && $datos['equipo'] != EQUIPO_SERVIDOR) { $this->lanzarErr('El URL de la Agencia esta vacio.<br />'); return false; } $this->urlServidor = $agencia->datos($idAgenciaDest)->URL.'/servidorWDDX.php'; if (!empty($datos)) { $this->asignaDatos($datos); } return true; } function asignaDatos($datos){ $this->datos = $datos; $this->peticion = $this->datos['peticion']; $this->tabla = $this->datos['tabla']; } /* funcion creaPaquete Empaqueta los datos en el formato WDDX listo para enviar */ function creaPaquete($datos) { $packet_id = wddx_packet_start("Llamada Remota WDDX"); if (is_array($datos)) { //verVar($datos); foreach($datos as $key => $data){ //create a var whith the name of the content of $key $$key = $data; wddx_add_vars($packet_id,$key); } } else { wddx_add_vars($packet_id, "datos"); } $paquete = wddx_packet_end($packet_id);// verVar($paquete); $paquete = urlencode($paquete); return $paquete; } function enviaPaquete($paqueteSerializado) { $ch = curl_init(); curl_setopt ($ch, CURLOPT_URL, "$this->urlServidor"); curl_setopt ($ch, CURLOPT_HEADER, 0); curl_setopt ($ch, CURLOPT_POSTFIELDS, $paqueteSerializado); curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1); if (! $resul = curl_exec ($ch)){ $this->lanzarErr("Error al comunicarse con '$this->urlServidor'"); return false; }// verlog($resul); curl_close ($ch); return $resul; } function analizaPaquete($paquete) { if (empty($paquete)) { return ''; } $paquete= urldecode($paquete); //verlog($paquete); //preg_match("/(<\/wddxPacket>)/s", $paquete, $m); //$paquete=$m[0]; //error_log(print_r($m,TRUE),0);//verVar($m);verVar($paquete); $parsed_packet = wddx_deserialize($paquete);// verlog($parsed_packet); return $parsed_packet; } public static function recibePaquete() { $fp = fopen("php://input", "r"); $paqueteRecibido = ''; while(!feof( $fp ))$paqueteRecibido.=fgets( $fp ); fclose($fp); return $paqueteRecibido; } /* funcion enviarDatosRemoto envia los datos en formato wddx al servidor ,recibe una respuesta y la devuelve */ public function enviarDatosRemoto()//$arrVariables) { //verificar si se envian o se reciben datos if (empty($this->datos) ){ die('No hay datos para enviar.'); } if ($this->datos['peticion'] == ENVIAR_DATOS) { //realiza la consulta $this->error = false; $this->datos['arrObj'] = $this->consultaBD();// verVar($this->datos['arrObj']); if ($this->error){ return false; } //verVar($this->datos['arrObj']); } //verlog($this->datos); //crear paquete $paquete = $this->creaPaquete($this->datos); //enviar paquete remotamente $respuesta = $this->enviaPaquete($paquete); //echo "resp=$respuesta,"; print_r($this->analizapaquete($respuesta)); echo ", error: '$this->error'";echo "<br />"; if ($this->error) { return $this->msg; } //analizar paquete $paqueteRecibido = $this->analizaPaquete($respuesta); //print_r($paqueteRecibido); if (empty($paqueteRecibido)) { $this->lanzarErr("La respuesta del servidor '$this->urlServidor' es vacia. Por favor verifique su configuracion"); return false; } if ($paqueteRecibido['error'] == 1){ $this->lanzarErr($paqueteRecibido['respuesta'],$paqueteRecibido['codError']); return false; } return $paqueteRecibido['respuesta'];//en crea paquete se define datos } public function recibeDatosRemoto() { $paquete = $this->recibePaquete(); //verlog($paquete); $consulta = $this->analizaPaquete($paquete); //verLog($consulta); if (empty($consulta) ){ $arrResp = array('respuesta' => 'consulta vacia.','error' => 1); } else { $peticion = $consulta['peticion']; $this->tabla = $consulta['tabla']; if ($peticion == SOLICITAR_DATOS) { $datos = $this->consultaBD(); } else { //enviar DATOS $datos = $this->insertaBD($consulta['arrObj']); } if (!$datos) { $datos = $this->msg; } $arrResp = array('respuesta' => $datos , 'error' => $this->error,'codError' => $this->codError); } $respuesta = $this->creaPaquete($arrResp); //verLog(print_r($arrResp)); return $respuesta; } function consultaBD() {//verVar($this) ; exit; switch ($this->tabla){ case T_ORDENES: $sql = "SELECT * FROM ordenes"; break; case T_PRENDAS: $sql = "SELECT * FROM prendas"; break; case T_CLIENTES: $sql = "SELECT * FROM clientes"; break; case T_OPERARIOS: $sql = "SELECT * FROM operarios"; break; case T_AGENCIAS: $sql = "SELECT * FROM agencias"; break; }//verlog("$this->tabla,$sql"); $datos =& $this->conex->getAssoc($sql,false, array(), DB_FETCHMODE_OBJECT); //verlog(print_r($datos,1)); if (PEAR::isError($datos)){ $this->lanzarErr($datos->getUserInfo()); //return $datos->getUserInfo(); return false; } //verlog($datos); return $datos; } /* funcion realiza la consulta de agregacion */ function insertaBD($datos) {//verlog($datos); if (empty($datos)) { $this->lanzarErr('Los datos para insercion son vacios.'); return false; } switch($this->tabla){ case T_ORDENES: $tabla = 'ordenes'; break; case T_PRENDAS: $tabla = 'prendas'; break; case T_CLIENTES: $tabla = 'clientes'; break; case T_OPERARIOS: $tabla = 'operarios'; break; case T_AGENCIAS: $tabla = 'agencias'; break; default: $this->lanzarErr('La tabla no existe'); return false;; } $contExt = 0; $sql = 0; foreach ($datos as $reg) { //recorre un array de objetos $cont = 0; $cadValores = ''; $cadCampos = ''; foreach($reg as $nombre => $valor) { //ciclo a traves de la clase if ($cont == 0){ $coma = ''; $cont = 1; } else { $coma = ','; } $cadCampos .= "$coma $nombre"; $cadValores .= "$coma '$valor'"; } if ($contExt == 0 ){ $sql = "INSERT INTO $tabla ($cadCampos)\nVALUES ($cadValores)\n"; $contExt = 1; } else $sql .= ",($cadValores)\n"; } $db = $this->conex; $res = $db->query($sql); if (PEAR::isError($res)){ if ($res->getCode() == -5 ) { //registros duplicados $this->lanzarErr("Existen registros duplicados en $tabla.",-5); //verlog("tabla=$this->msg "); return false; } else { //die($res->getUserInfo()); return $res->getUserInfo(); } } $numModif = $db->affectedRows(); $this->msg = "Se insertaron $numModif registros en $tabla"; return $this->msg; } function sincronizarTodo(){ $arrTablas1 = array( 'ordenes'=>T_ORDENES, 'prendas' => T_PRENDAS, 'clientes' => T_CLIENTES, 'operarios' => T_OPERARIOS, 'agencias' => T_AGENCIAS); $arrTablas2 = array( 'operarios' => T_OPERARIOS, 'agencias' => T_AGENCIAS); if (strtolower($this->idAgencia) == EQUIPO_PRINCIPAL){ //esta agencia=principal, recibe arrtablas1,envia arrtablas2 $arrTablasPeticion = $arrTablas1; $arrTablasEnvio = $arrTablas2; } else { $arrTablasPeticion = $arrTablas2; $arrTablasEnvio = $arrTablas1; } foreach($arrTablasPeticion as $nombre => $codTabla) { $datos = array('peticion'=>SOLICITAR_DATOS,'tabla'=> $codTabla ,'arrObj'=>''); $this->asignaDatos($datos); $cad .= nl2br("Solicitando la informacion de $nombre...\n"); $this->error = false; $resul = $this->enviarDatosRemoto(); //echo "aqui: $nombre, $codTabla.<br />"; //verVar($resul);//$datos); if ($this->error ){ $cad .= "<br />$this->msg"; break; } $cad .= nl2br("Agregando la informacion de $nombre en mi BD...\n"); //verVar($resul); exit; $this->error = false; $resul2 = $this->insertaBD($resul); //verlog($resul); $cad .= "$this->msg"; if ($this->error and $this->codError != ERR_REGISTROS_DUPLICADOS){ break; } $cad .= "$resul2<br />"; } $cad .= "<br />"; if (!$this->error or ($this->error and $this->codError == ERR_REGISTROS_DUPLICADOS) and 1 ) { foreach($arrTablasEnvio as $nombre => $codTabla) { $datos = array('peticion' => ENVIAR_DATOS, 'tabla' => $codTabla); $this->asignaDatos($datos); $cad .= "Enviar datos de tabla $nombre ...<br />"; $this->error = false; //echo "tabla=$codTabla "; $resul = $this->enviarDatosRemoto(); $cad .= $this->msg; //verVar($this); if ($this->error == TRUE and $this->codError != ERR_REGISTROS_DUPLICADOS){ //$cad .= "<br />$this->msg"; break; } $cad .= "$resul<br />"; //break; } } // } $this->msg = $cad; //$this->msg."<br />$cad"; if ($this->error){ return false; } return true; } } ?> /* i'm calling first to sincronizarTodo() */ ------------------------------------------------------------------------ The remainder of the comments for this report are too long. To view the rest of the comments, please view the bug report online at http://bugs.php.net/42809 -- Edit this bug report at http://bugs.php.net/?id=42809&edit=1