SD * Attention le script doit s'executer avec l'utilisateur root */ // Define path to application directory defined('APPLICATION_PATH') || define('APPLICATION_PATH', realpath(dirname(__FILE__) . '/application')); // Define application environment defined('APPLICATION_ENV') || define('APPLICATION_ENV', (getenv('APPLICATION_ENV') ? getenv('APPLICATION_ENV') : 'production')); // Ensure library/ is on include_path set_include_path(implode(PATH_SEPARATOR, array( realpath(APPLICATION_PATH . '/../library'), get_include_path(), ))); /** Zend_Application */ require_once 'Zend/Application.php'; // Create application, bootstrap, and run $application = new Zend_Application( APPLICATION_ENV, APPLICATION_PATH . '/configs/application.ini' ); try { $opts = new Zend_Console_Getopt( //Options array( 'help|?' => "Displays usage information.", 'file|f=s' => "Give the full file path to integrate", 'mail' => "Only send a mail when a file is write", 'debug' => "Send a mail for debug", ) ); $opts->parse(); } catch (Zend_Console_Getopt_Exception $e) { echo $e->getUsageMessage(); exit; } //Usage if( isset($opts->help) || count($opts->getOptions())==0 ) { echo "Execute basic action when a customer send a file.\n"; echo $opts->getUsageMessage(); exit; } //Get the file if ( isset($opts->file) ) { $c = new Zend_Config($application->getOptions()); $dateFile = date('YmdHis', filectime($opts->file)); //Get the main directory name in FTP and SFTP $pathParts = pathinfo($opts->file); $filenameIn = $pathParts['basename']; $extension = ''; if (array_key_exists('extension', $pathParts) ){ $extension = $pathParts['extension']; } $client = basename(dirname($pathParts['dirname'])); $startpos = strlen( $c->profil->path->data . DIRECTORY_SEPARATOR ); if ( 'sftp' == substr($opts->file, $startpos, 4) ) { $type = 'SFTP'; $fluxBasePath = $c->profil->path->sftp . '/' . $client; } elseif ( 'ftp' == substr($opts->file, $startpos, 3) ) { $type = 'FTP'; $fluxBasePath = $c->profil->path->ftp . '/' . $client; } $fluxBasePath .= '/send'; $OptionsCopyAddDate = false; $OptionsCopyDeleteAfter = false; $OptionsRunWithEndFile = false; /** * @todo : links to prestation table and file rules * Prestation => Repertoire reception, etc */ switch ($client) { case 'sfrbtr' : $prestation = 'FICH_RCE'; $filemask = array( 'FICH_RCE_SCORE_.*.csv', ); break; case 'gefacto': $prestation = 'GEFACTO'; $OptionsCopyAddDate = true; $OptionsRunWithEndFile = true; break; } //Use ".fin" or ".end" files to do something $runExtensions = array('fin', 'end'); if ( in_array( $extension, $runExtensions) ) { if ( $OptionsRunWithEndFile ) { $extToDelete = $extension; if (file_exists($fluxBasePath . '/' . $filenameIn)) { $pathParts = pathinfo($fluxBasePath . '/' . $filenameIn); $filenameIn = $pathParts['basename']; $extension = ''; if (array_key_exists('extension', $pathParts) ){ $extension = $pathParts['extension']; } } else { echo "Fichier inexistant $filenameIn\n"; exit; } } else { exit; } } //Get the realname of file IN or exit if ( $OptionsRunWithEndFile ) { if ( in_array( $extension, $runExtensions) ) { $extensionLength = strlen($extension)+1; $filenameIn = substr($filenameIn, 0, strlen($filenameIn) - $extensionLength); $extension = ''; } else { exit; } } $lines = file($fluxBasePath . '/' . $filenameIn); $nbLines = count($lines); //Define default out filename $filenameOut = $filenameIn; //Add date to filename if ( $OptionsCopyAddDate ) { $extensionLength = 0; if ( $extension != '' ) { $extensionLength = strlen($extension)+1; $filenameOut = substr($filenameIn, 0, strlen($filenameIn) - $extensionLength); $filenameOut = $filenameOut . '_' . date('YmdHis') . '.' . $extension; } else { $filenameOut = $filenameIn . '_' . date('YmdHis'); } } //Prepare mail if ($opts->mail || $opts->debug) { $subject = "[Flux] - Réception fichier $client"; $txt = "Réception d'un fichier pour traitement\n"; $txt.= "Client : $client\n"; $txt.= "Mode de transmission : $type\n"; $txt.= "Fichier : ".$filenameIn."\n"; $txt.= "Nombre de Lignes : $nbLines\n"; $mail = new Zend_Mail('UTF-8'); $tr = new Zend_Mail_Transport_Smtp('smtp.celeste.fr'); $mail->setDefaultTransport($tr); $mail->setBodyText($txt); $mail->setFrom('supportdev@scores-decisions.com', 'Machine'); $mail->addTo('suivi@scores-decisions.com', 'Suivi'); $mail->setSubject($subject); $mail->send(); //Stop if ($opts->mail) { exit; } } //Copie du fichier $destDir = $c->profil->path->storage . '/' . $client . '/' . 'send'; if ( !is_dir($destDir) ) { mkdir($destDir, 0755, true); } if ( copy($fluxBasePath . '/' . $filenameIn, $destDir. '/' . $filenameOut) ) { echo date('Y-m-d H:i:s')." - Copie du fichier $filenameIn dans $destDir\n"; //Execute $db = Zend_Db::factory($c->profil->db->metier); Zend_Db_Table::setDefaultAdapter($db); try { $fluxM = new Application_Model_Sdv1FluxFileIn(); $fluxM->insert(array( 'client' => $client, 'name' => $prestation, 'depotType' => $type, 'depotDate' => $dateFile, 'depotFile' => $filenameOut, 'nbLines' => $nbLines, 'dateInsert' => date('YmdHis'), 'dateExecute' => '0000-00-00 00:00:00', )); echo date('Y-m-d H:i:s')." - Enregistrement client:$client fichier:$filenameOut\n"; } catch (Zend_Db_Exception $e) { echo date('Y-m-d H:i:s')." - ERREUR Enregistrement client:$client fichier:$filenameOut\n"; } //Suppression des fichiers if ( $OptionsCopyDeleteAfter ) { unlink( $fluxBasePath . '/' . $filenameIn ); if ( $OptionsRunWithEndFile ) { unlink( $fluxBasePath . '/' . $filenameIn . '.' . $extToDelete ); } } } else { echo date('Y-m-d H:i:s')." - ERREUR Copie du fichier $filenameIn dans $destDir\n"; } }