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], 0, 10);
$this->control['fechaIni'][$data[3]] = substr($data[1], 0, 10);
$this->control['fechaFin'][$data[3]] = substr($data[2], 0, 10);
$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]