Mostrar mensagens com a etiqueta PHP. Mostrar todas as mensagens
Mostrar mensagens com a etiqueta PHP. Mostrar todas as mensagens

terça-feira, 19 de abril de 2016

Sessões e lentidão no Magento


Uma das maiores plataformas de lojas online é sem dúvida a Magento, apesar do meu contacto com esta plataforma não ter passado de instalação e configurações iniciais, desta vez foi me pedido para analisar e solucionar um problema nesta plataforma.

Foi reportado uma instabilidade na plataforma, dificuldades de acesso, extrema lentidão em resumo algo que não é compatível com quem pretende usar a 100% da plataforma.

Motivo:
O sistema Magento, guarda as sessões dos utilizadores em ficheiros, sessões essas que neste caso, nunca foram apagadas desde que o sistema ficou online, ficando a pasta com +/- 200,000 ficheiros.

Tentou-se eliminar os ficheiros via FTP, via FileExplorer dentro do Plesk mas devido ao numero elevado de ficheiros tornava qualquer ideia um fiasco.

Ainda surgiu a possibilidade de um acesso por terminal, mas a empresa de alojamento não cedeu acessos em tempo útil.

Tentei ainda usar um ficheiro .php com a função unlink que já resolveu outros casos, mas ao requisitar o ficheiro, o próprio browser entrava em colapso.

Solução:

Ao fim de todas estas tentativas frustradas, surge a solução repartida em duas partes:

  • ficheiro .php para ser invocado pelo browser
  • ficheiro .py para executar a acção de remover dentro do servidor (S.O. Linux)

Nota: Deixo apenas as linhas gerais dos ficheiros iniciais, no fim deixo o download de versões melhoradas.
Nota 2: Não me responsabilizo pelo uso destes ficheiros indevidamente ou sem saber o que está a fazer.

Fazer upload para a pasta de root_site (www, http_docs, ...)
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
<?php
// mag_session_rm.php simplified
// Retorn path real do servidor
$fp = realpath(dirname(__FILE__))."/var";
// Confirma que o ficheiro python esta na pasta "var"
if(file_exists($fp."/session_rm.py")){
  // Troca para o pasta "var"
  chdir($fp);
  // Executa o shell_exec para iniciar rm_sessions.py
  shell_exec("python session_rm.py");
}

Fazer upload para a pasta root_site/var
1
2
3
4
5
6
7
8
"""
USE THIS SCRIPT CAREFULLY - mag_session_rm.py
"""
#!/usr/bin/python
import os

# Chama as funções de sistema operativo para remover
os.popen("rm -f ./session/*")


O caminho que pretendemos afetar fica em root_site/var/sessions
Fiz ficheiros em locais diferentes, para tentar minimizar tentativas de acessos/adulteração dos ficheiros.

Por fim pelo browser aceder ao url do site ex: www.lojaonline.com/mag_session_rm.php

Aguardar uns segundos/minutos dependendo da quantidade de ficheiros e em pouco tempo a sua loja Magento está de novo em pleno.

[Download] Neste ficheiro vai encontrar os dois ficheiros, mas o de php tem implementado um formulário onde pede uma password que deve ser definida pelo leitor.


1
20
21
22
<?php
// Minimal Security - SHA1 Password 
// Get One in www.sha1-online.com
$safePasswd = "22bf5d4a65ff0792ed773c17fa7178ed1cf76aa6";

Obrigado pela atenção

segunda-feira, 24 de setembro de 2012

PHP , SMTP - Função email autenticado

A função mail() no PHP, é uma função simples e usada largamente por quem deixa ao critério do servidor o envio de emails de dentro dos projecto, e esta função usa o servidor de envio de emails interno para o fazer.

No entanto, recentemente (não sei precisar o tempo) um dos maiores revendedores de serviços de alojamento do nosso país a esotérica, passo a não permitir o envio de email de dentro dos clientes sem que estes se autenticassem via SMTP.

Foi por este motivo que alguém me contacto, e me pediu para resolver o problema.

Pois bem, para começar tive que converter todos os ficheiros que enviavam emails, e retirar a função mail.

PHP - Email autenticado

o PHPMailer é uma classe de php que trata da ligação e de enviar os emails autenticados, por isso bastou importar o ficheiro e tratar do resto.

Para não andar sempre a importar o PHPMailer, decidi criar um ficheiro de envio de email, ao qual chamei smtpMailConfig.php o qual deverá ser adicionado com include() a cada inicio de página onde possa ser necessário.

Ficheiro.php
<?php

# Ficheiro de configurações de SMTP e ligação com PHPMailer
include("smtpMailConfig.php");

?>
smtpMailConfig.php

<?php
require("phpmailer/class.phpmailer.php");

/*
 * Função de Enviar o email
 * $vFrom - Email de Origem
 * $vFromNome - Nome de Origem
 * $vTo - Email de destino
 * $vToNome - Nome de destino
 * $vAssunto - Assunto do Email
 * $vEmail - Texto do Email
 * $vCC - Parametro CC (separados por ;)
 */
function fcEnviarEmail($vFrom,$vFromName,$vTo,$vToName,$vAssunto,$vEmail,$vCC){
global $mail;
$mail = new PHPMailer();
$mail->IsSMTP();
$mail->SMTPAuth = true;

# Dados de Ligação
$mail->Host = "127.0.0.1";
$mail->Username = "info@byteajudarblog.pt";
$mail->Password = "emailpassword";

# Dados Gerais
$mail->From = $vFrom;
$mail->FromName = $vFromName;
$mail->AddAddress($vTo, $vToName);

if(!empty($vCC)){
$vCCArr = explode(';',$vCC);
foreach($vCCArr as $key){
$mail->AddCC($key);
}
}


$mail->IsHTML(true);
$mail->Subject = $vAssunto;
$mail->Body = $vEmail;

if(!$mail->Send()){
return 0;
//echo $mail->ErrorInfo;
}else{
  return 1; //echo "Email Enviado";
}
}

?>

Enviar email pela função

Após a aplicação dos passos acima, basta chamar a função e passar os parâmetros:

Ficheiro.php
<?php
$assunto = "Email Online";
$texto = "Texto.......texto";


$mailOk = fcEnviarEmail("info@blog.pt","Nome Blog","email@destino.com",'Destino',$assunto,$texto,'cc1@destino.com;cc2@destino.com');

if($mailOk==1)
  echo "Email enviado com sucesso"; # Ou mais código php
else
  echo "Erro a enviar email";
?>


Autenticação nos serviços Esotérica

Para quem tenha mesmo assim erro a enviar email pelo serviço desta empresa, (e esta situação aconteceu comigo) basta no painel de controlo do domínio (s) verificar se no servidor de DNS existe indicação do localhost (IP: 127.0.0.1), caso não exista tem que adicionar.

======================
Nota: As minhas desculpas pelo código não estar com coloração, mas o blogger não tem essa ferramenta.