Ir para conteúdo
Entre para seguir isso  
ghlevin

Chamando função PHP por arquivo BAT

Recommended Posts

Preciso criar um arquivo BAT que deverá ser executado todo dia 25. Ele deverá executar uma função chamada emailAniversariantes(), que foi definida para a programação de um site dentro de dois arquivos (controller e model).

Como eu assumi esse site de outro desenvolvedor e o mesmo utilizava de um aplicativo pra executar essa função todo dia 25, precisaria que o arquivo BAT fizesse o mesmo. Acredito que a utilização de comandos PHP para o prompt de Windows possam ser a solução. Mas ainda não achei na internet os comandos corretos pra executar direto essa função do controller.

Minha função dentro do arquivo do diretório Model:

public function emailAniversariantes(){
$data = getdate();
$mes = $data[mon];
$ano = $data[year];
if($mes==12){
    $mes = 1;
    $ano = $ano+1;
}else{
    $mes = $mes+1;
    if($mes<10){
        $mes = '0'.$mes;
    }
}

$sqlUnidades = "select id, nome from unidade where ind_unidade_ativa=1 order by nome";
$resUnidades = System::element('db')->query($sqlUnidades);

$corpo = "";
$corpo .= "<div style='float:left;width:100%; height:3px; background-color:gray; margin-bottom:20px;'></div>";

$corpo .="<div style='font-family:Lucida Sans; font-size:13px;' color='black'>
            <br>Bom dia.<br>Segue abaixo a relação dos aniversariantes do próximo mês.<br>
            Se possível, sugerimos que entrem em contato com eles para desejar feliz aniversário!<br><br><br>
            </div>";

foreach ($resUnidades as $rUnidades){
    $sql = "Select u.id as id_usuario, i.id as id_investidor, uu.id_unidade, un.nome nome_unidade, u.email, 
            DATE_FORMAT(i.data_nasc, '%d/%m/%Y') as data_nasc, i.razao_social as nome, i.telefone, i.nome_responsavel,
            (Select count(*) from usuario u join usuario_unidade uu on (uu.id_usuario = u.id) join investidor i on (i.id_usuario = u.id)
            where uu.id_unidade = ".$rUnidades['id']." and month(i.data_nasc)=".$mes.") AS count
            from usuario u join usuario_unidade uu on (uu.id_usuario = u.id) 
            join unidade un on (un.id = uu.id_unidade)
            join investidor i on (i.id_usuario = u.id)
            where uu.id_unidade = ".$rUnidades['id']." and month(i.data_nasc)=".$mes."
            ORDER BY i.razao_social";
    $res = System::element('db')->query($sql);

    if($res[0]['count']>=1){
        $corpo .="<div style='width:100%; height:100%; float: left; margin: 25px 0;'>";

        $corpo .="<b>Unidade: ".$rUnidades['nome']."</b>";

        $corpo .="<table style='width: 100%; border-collapse: collapse; display: table; background-color: #FFFFFF; border: 3px solid #E2E1E0; padding: 5px;'>
                    <thead>
                        <tr stile='border-collapse: collapse; border: 3px solid #E2E1E0; padding: 5px;'>
                            <th style='border-collapse: collapse; background-color: #F7F7F7; border: 3px solid #E2E1E0; padding: 5px; text-align: center;'>Nome</th>
                            <th style='border-collapse: collapse; background-color: #F7F7F7; border: 3px solid #E2E1E0; padding: 5px; text-align: center;'>Telefone</th>
                            <th style='border-collapse: collapse; background-color: #F7F7F7; border: 3px solid #E2E1E0; padding: 5px; text-align: center;'>E-mail</th>
                            <th style='border-collapse: collapse; background-color: #F7F7F7; border: 3px solid #E2E1E0; padding: 5px; text-align: center;'>Responsável</th>
                            <th style='border-collapse: collapse; background-color: #F7F7F7; border: 3px solid #E2E1E0; padding: 5px; text-align: center;'>Data de Nascimento</th>
                        </tr>
                    </thead>";
        $corpo .="<tbody>";

        foreach ($res as $r){

            $corpo .= "<tr stile='border-collapse: collapse; border: 3px solid #E2E1E0; padding: 5px;'>";
                $corpo .= "<td style='border-collapse: collapse; background-color: #FFFFFF; border: 3px solid #E2E1E0; padding: 5px; text-align: center;'>".$r['nome']."</td>";
                $corpo .= "<td style='border-collapse: collapse; background-color: #FFFFFF; border: 3px solid #E2E1E0; padding: 5px; text-align: center;'>".$r['telefone']."</td>";
                $corpo .= "<td style='border-collapse: collapse; background-color: #FFFFFF; border: 3px solid #E2E1E0; padding: 5px; text-align: center;'>".$r['email']."</td>";
                $corpo .= "<td style='border-collapse: collapse; background-color: #FFFFFF; border: 3px solid #E2E1E0; padding: 5px; text-align: center;'>".$r['nome_responsavel']."</td>";
                $corpo .= "<td style='border-collapse: collapse; background-color: #FFFFFF; border: 3px solid #E2E1E0; padding: 5px; text-align: center;'>".$r['data_nasc']."</td>";
            $corpo .= "</tr>";
        }
        $corpo .="</tbody>";
        $corpo .="</table></div>";
    }
}

$corpo .= "<div style='width:100%; height:56px; float:left;'>";
$corpo .= "<table><font face='Lucida Sans'>";
$corpo .= "<tr>";
$corpo .= "<td style='float:left;'><div style='font-size:10px; float:left; width:200px; margin-top:5px; position:relative; margin-right:15px; float:left;'>Tel: +55 11 3577-7173<br>";
$corpo .= "email@meusite.com.br<br>";
$corpo .= "http://www.meusite.com.br/</td>";

$corpo .= "<td><img style='float:left; position:relative'></td>";

$corpo .= "</table></font></div></div>";
$corpo .= "</div>";

$arrayEmails = array();
$arrayEmails[0]="email2@meusite.com.br";
$arrayEmails[1]="email3@meusite.com.br";
$arrayEmails[2]="email4@meusite.com.br";
Util::enviaEmail("Remetente", $arrayEmails, "Aniversariantes ".$mes."/".$ano, $corpo,implode(";",$arrayEmails));
return "1";
} 

Como a função é chamada pelo arquivo Controller:

public function emailAniversariantes() {
$retorno = CadAdmin::emailAniversariantes();
echo $retorno;
} 

Agradeço quem puder me ajudar.

Compartilhar este post


Link para o post
Compartilhar em outros sites

um .bat (assim como um .sh) é um simples arquivo com comando de terminal/prompt

ou seja, seu bat vai ter que chamar um script PHP pelo terminal:

 

 

php.exe nome_do_script

(considerando que php.exe está em seu PATH)

 

Caso nunca tinha executado um script no terminal, veja este meu artigo:

http://rberaldo.com.br/diferentes-formas-execucao-php/

Compartilhar este post


Link para o post
Compartilhar em outros sites

Crie uma conta ou entre para comentar

Você precisar ser um membro para fazer um comentário

Criar uma conta

Crie uma nova conta em nossa comunidade. É fácil!

Crie uma nova conta

Entrar

Já tem uma conta? Faça o login.

Entrar Agora
Entre para seguir isso  

  • Conteúdo Similar

    • Por danilosilva222
      Olá pessoal, boa tarde! 
      Sou novato em programação e aqui no fórum é a minha primeira postagem, e tenho uma dúvida.
      Com Javascript, é possível desenvolver um sistema web completo para gestão, como por exemplo, academias, lojas, supermercados, etc..? 
      Desde já agradeço a atenção de vocês. 
    • Por LuanMartinsTI
      Eu gostaria de saber se existe algum problema relacionado a seguranca criando uma funcao assim, no exemplo sempre que eu crio uma funcao pre reutilizar os dados sao passados direto na chamada da funcao dentro do php, o usuario nao insere nenhum dado, quando o usuario vai inserir dados eu nao trabalho dessa forma, entao minha duvida [e, se mesmo o parametro da funcao sendo informado dentro do php no codigo pode existir algum problema.
      public function contar_cadastro($tabela, $sql){ try { if($sql == null){ $this->Select = $this->Conn->prepare("SELECT * FROM $tabela"); $this->Select->execute(); return $this->Select->rowCount(); }else{ $this->Select = $this->Conn->prepare("SELECT * FROM $tabela". " " ." $sql"); $this->Select->execute(); return $this->Select->rowCount(); } } catch (PDOException $exc) { exibeMensagens($Msg, $ErrNo); } } E as chamadas das funcoes assim
       
      $cmsPDO = new CmsPDO(); $r_userStaff = $cmsPDO->contar_cadastro('usuarios', ' where cargo > 2'); $r_userVip = $cmsPDO->contar_cadastro('usuarios', ' where cargo = 2'); $r_userBan = $cmsPDO->contar_cadastro('usuarios', " where ban = '1'"); $r_usuarioPDO = $cmsPDO->contar_cadastro('usuarios', null); $r_servVip = $cmsPDO->contar_cadastro('servidores', " where vipfree = 'V'"); $r_servFree = $cmsPDO->contar_cadastro('servidores', " where vipfree = 'F'"); $r_servInat = $cmsPDO->contar_cadastro('servidores', " where verificado = '1'"); $r_servOff = $cmsPDO->contar_cadastro('servidores', " where estado = 'Off'"); $r_servOn = $cmsPDO->contar_cadastro('servidores', " where estado = 'On'"); $r_servidores = $cmsPDO->contar_cadastro('servidores', null); Eu normalmente crio as funcoes assim:
      public function cadastrar_usuario($usuario){ try { if($this->veriricarnick($usuario) == false){ if($this->verificiarEmail($usuario) == false){ $query = 'INSERT INTO usuarios ' . '(id, nome, senha, email, cargo, ip)' . 'value(null,:nome, :senha, :email, :cargo, :ip)'; $this->Criar = $this->Conn->prepare($query); $this->Criar->bindValue(':nome' , $usuario->getNome() , PDO::PARAM_STR); $this->Criar->bindValue(':senha' , $usuario->getSenha(), PDO::PARAM_STR); $this->Criar->bindValue(':email' , $usuario->getEmail(), PDO::PARAM_STR); $this->Criar->bindValue(':cargo' , $usuario->getCargo(), PDO::PARAM_INT); $this->Criar->bindValue(':ip' , $usuario->getIp() , PDO::PARAM_STR); $this->Criar->execute(); if($this->Criar->rowCount() == 1){ return 1; }else{ return false; } }else{ return false; } }else{ return false; } } catch (PDOException $exc) { exibeMensagens("<b> Erro ao inserir.</b> Mensagem:{$exc->getMessage()} Código: {$exc->getCode()}", WS_ERROR); } }  
    • Por nosredna
      Olá amigos,
       
      tenho o seguinte código:
      <html> <script type="text/javascript"> function Soma(){ var soma = 0; var ipts = document.querySelectorAll('input[oninput="Soma()"]'); for(var x=0; x<ipts.length; x++){ var valorItem = parseFloat(ipts[x].value); !isNaN(valorItem) ? soma += parseFloat(valorItem) : null; } document.querySelector('#final').value = soma.toFixed(2); } </script> <form action=""> Total produto1: <input type="text" oninput="Soma()" value="0"><br> Total produto2: <input type="text" oninput="Soma()" value="0"><br> <br> Total todos os produtos12: <input type="text" id="final"> </form> </html> Bom...para essas duas inputs funciona corretamente.
      Porém, se eu quiser colocar mais inputs como: Total produto3 + Total produto4 = Total todos os produtos34, Total produtoX + Total produtoY = Total todos os produtosXY, ...
      e usar o mesmo código JS, é possível? alguém poderia me dar uma dica de como eu faço para fazer isso? já tentei de várias maneiras, mas não estou tendo sucesso...
       
      Fico agradecido. 
    • Por moreaux
      Tenho um apache2 configurado para a minha pasta /var/www/meusite , porem quando clonaram, usaram https e nao SSH, fiz o clone do novo projeto, todos os arquivos estão iguais, porem quando renomeio as pastas para ir para o meu novo projeto, me da o erro :
       
      This page isn’t working
      Dando o erro de HTTP ERROR 500, ja tentei verificar no LOG do apache, porem não esta logando nada, alguem poderia me ajudar? 
×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.