Ver Mensaje Individual
  #1 (permalink)  
Antiguo 12/10/2011, 16:41
espher
 
Fecha de Ingreso: abril-2008
Ubicación: Chihuahua Mexico
Mensajes: 166
Antigüedad: 16 años, 6 meses
Puntos: 15
funciones que no andan al pasar txt a bd

Hola a todos tengo un gran problemota con un mis funciones que son para un cronjob de zend. el problema es este: tengo una funcion que agarra de un txt datos para alimentar una BD pero no lo hace!!!!! la bd se separa con dos tablas una temporal y la tabla padre de esta misma, la tabla temporal se alimenta del txt y la tabla padre de la tabla temporal pero no me anda.

aqui les dejo el codigo una ayuda en verdad me urge ya me traen en el trabajo y no quiero perderlo

Código PHP:
[HIGHLIGHT="PHP"]final class cronJob {//esta clase lee todos los archivo txt y los almacena en las tablas correspondientes
    
private $_cxn;//Variable privada para la conexion a la base de datos
    
private $control = array(
        
'fechaIni'=>array(),
        
'fechaFin'=>array(),
        
'fechaCarga'=>array(),
        
'registros'=>array()
    );
    private 
$_errors = array();
    private 
$_errorsDispatched false;
    private 
$_archivos = array();//son los archivos de texto que hay en el data path

    
public function __construct() {

        
$_cxn = new mysqli('localhost''root''root''pruebasalsuper');//funcion de coneccion para pruebas en local
        
$this->_archivos = array(//crea un arreglo con las direcciones de cada archivo de texto
$writer = new Zend_Log_Writer_Stream('../www/mssql.log');//log para almacenar errores en la incercion a base de datos
        
$logger = new Zend_Log($writer);    
        
        foreach(
$this->_archivos as $zip) {//desempaqueta comprimidos
            
$zip str_replace('.txt''.zip'$zip);
            if(!
file_exists($zip)) continue;
            @
exec("unzip -o {$zip} -d " DATA_PATH);
        }
        if(
file_exists(DATA_PATH '/eficontrol.zip')) {
            @
exec('unzip -o ' DATA_PATH '/eficontrol.zip -d ' DATA_PATH);
        }
    }

    public function 
__destruct() {
        if(
$this->_errorsDispatched===false) {
            
$this->_dispatchErrors();
        }
    }
/**
     * @return CronJob
     */
    
public function init() {
        
$datosControl = @fopen(DATA_PATH '/eficontrol.txt''r');//guarda lo que hay en eficontrol dentro del arreglo control
        
if($datosControl===false) die();
        while((
$data fgetcsv($datosControl))!==false) {
            
$this->control['fechaCarga'][$data[3]] = substr($data[0], 010);
            
$this->control['fechaIni'][$data[3]] = substr($data[1], 010);
            
$this->control['fechaFin'][$data[3]] = substr($data[2], 010);
            
$this->control['registros'][$data[3]] = (int)$data[4];
            
$this->control['registros2'][$data[3]] = (int)$data[5];
        }
        
fclose($datosControl);
        return 
$this;
    }

    public function 
run() {
if(
$this->control['fechaCarga']['CH']!=''$this->_cargaAsistencias();

}

// esta funcion carga los datos de la tabla temporal a la tabla original y tampoco me anda por que al comparar el contenido de la tabla temporal contra el txt obviamente me marca error ya que no existe el mismo numero datos en ambos

private function _cargaAsistencias() {
        if(!
$this->_checkFile($this->_archivos['CH'])) return;
        
$this->_loadTemp('tmp_asistencia_promotores'$this->_archivos['CH']);
        if(
$this->_getRegistros('tmp_asistencia_promotores''Sucursal')!=$this->control['registros']['CH']) {
            
$this->_errorHandle('Número de registros de la tabla de ventas no coincide con la tabla de control');
            return;
        }
        
$date = new Zend_Date();
        
$date $date -> sub(2,Zend_Date::MONTH);
        
$day$date->get('dd');
        
$date $date -> sub($day-1,Zend_Date::DAY);
        
$today = new Zend_Date();
        
$num 0;
        while (!(
$date -> equals($today,Zend_Date::MONTH)) || !($date-> equals($today,Zend_Date::DAY)) || !($date->equals($today,Zend_Date::YEAR))){
            
$date $date -> addDay(1);
            
$num++;
        } 
        try{
            
$this->_cxn->query("DELETE FROM asistencia_promotores WHERE Fecha<DATE_SUB('{$this->control['fechaCarga']['CH']}', INTERVAL {$num} DAY)");
            
$this->_cxn->query('INSERT INTO asistencia_promotores SELECT * FROM tmp_asistencia_promotores');
        }catch(
Exception $pe){
            
$logger->info("No se inserto en la tabla temporal algunos registros");
        continue;
        }
    }
    
$this->_errors[] = $msg;
    }


// funcion por si ay errores que me los manden al correo
    
private function _dispatchErrors() {
        
$headers "MIME-Version: 1.0\r\n";
        
$headers .= "Content-type: text/html; charset=iso-8859-1\r\n";
        
$headers .= "From: web reportes alsuper <[email protected]>\r\n";
        
$asunto 'informe de carga datos reportes alsuper.com';
        
$contenido 'Error(es) en la carga:<br/><ul><li>' implode('</li><li>'$this->_errors) . '</li></ul>';
        if(
count($this->_errors)>0) {
            @
mail('[email protected]'$asunto$contenido$headers);
            @
mail('[email protected]'$asunto$contenido$headers);
            echo 
$contenido;
        }
        
$this->_errorsDispatched true;
    }


//funcion para checar el archivo el txt en este caso
    
private function _checkFile($filePath) {
        if(!
file_exists($filePath)) {
            
$this->_errorHandle('No se encontro el archivo: ' $filePath);
            return 
false;
        }
        return 
true;
    }



/*esta funcion es la que no me anda!!!!! borra los datos dentro de la tabla temporal pero al momemento de hacer el load data local no me sube los archivos del txt a la bd alguna idea!!!
*/
    
private function _loadTemp($table$fileName) {
        
$_cxn2 = new mysqli('localhost''root''root''pruebasalsuper');//funcion de coneccion para pruebas en local
        
$_cxn2->query("TRUNCATE {$table}");
        
//se agregan los datos a los tmps
        
$res =$_cxn2->query("LOAD DATA LOCAL INFILE '{$filePath}' INTO TABLE {$table} FIELDS TERMINATED BY ',' LINES TERMINATED BY '\n\r'");
        if(!
$res) {
            
$this->_errorHandle("Error con el Load data local infile");
        }
    }


    
//con esta funcion tenemos el total de registro que obviamente me marca cero ya que solo le e podido dar truncate pero no la puedo llenar con la informacion del txt
    
private function _getRegistros($table$column='*') {
        
$_cxn2 = new mysqli('localhost''root''root''pruebasalsuper');//funcion de coneccion para pruebas en local
        
$result $_cxn2->query("SELECT COUNT({$column}) FROM {$table}");
        if(
$result===false) throw new Exception("Error: " $this->_cxn->error "\nSQL: SELECT COUNT({$column}) FROM {$table}");
                
$numRegistros = ($row $result->fetch_row())!==null? (int)$row[0]:0;
        return 
$numRegistros;
    }
}[/
HIGHLIGHT