Page 1
more
mssql-php
Standard

Instalar drivers de Microsoft PHP para SQL Server en Ubuntu 16.04

En este tutorial veremos cómo instalar PHP para SQL Server, en este ejemplo usaremos la versión 7.0, si se desea la versión 7.2 sólo es reemplazar, usaré Ubuntu 16.04 pero  puede funcionar con otras versiones.

sudo su 
add-apt-repository ppa:ondrej/php -y 
apt-get update 
apt-get install php7.0 php7.0-dev php7.0-xml -y --allow-unauthenticated

Prerequisitos:

sudo su 
curl https://packages.microsoft.com/keys/microsoft.asc | apt-key add -

#Download appropriate package for the OS version
#Choose only ONE of the following, corresponding to your OS version

#Ubuntu 14.04
curl https://packages.microsoft.com/config/ubuntu/14.04/prod.list > /etc/apt/sources.list.d/mssql-release.list

#Ubuntu 16.04
curl https://packages.microsoft.com/config/ubuntu/16.04/prod.list > /etc/apt/sources.list.d/mssql-release.list

#Ubuntu 17.10
curl https://packages.microsoft.com/config/ubuntu/17.10/prod.list > /etc/apt/sources.list.d/mssql-release.list

exit
sudo apt-get update
sudo ACCEPT_EULA=Y apt-get install msodbcsql17
# optional: for bcp and sqlcmd
sudo ACCEPT_EULA=Y apt-get install mssql-tools
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bash_profile
echo 'export PATH="$PATH:/opt/mssql-tools/bin"' >> ~/.bashrc
source ~/.bashrc
# optional: for unixODBC development headers
sudo apt-get install unixodbc-dev

Drivers PHP para Microsoft SQL Server:

sudo pecl install sqlsrv
sudo pecl install pdo_sqlsrv
sudo su
echo extension=pdo_sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/30-pdo_sqlsrv.ini
echo extension=sqlsrv.so >> `php --ini | grep "Scan for additional .ini files" | sed -e "s|.*:\s*||"`/20-sqlsrv.ini
exit

Apache:

sudo su
apt-get install libapache2-mod-php7.0 apache2
a2dismod mpm_event
a2enmod mpm_prefork
a2enmod php7.0
echo "extension=pdo_sqlsrv.so" >> /etc/php/7.0/apache2/conf.d/30-pdo_sqlsrv.ini
echo "extension=sqlsrv.so" >> /etc/php/7.0/apache2/conf.d/20-sqlsrv.ini
exit

Reiniciar apache

sudo service apache2 restart

Fuente:

https://docs.microsoft.com/en-us/sql/connect/php/installation-tutorial-linux-mac?view=sql-server-2017#installing-the-drivers-on-ubuntu-1604-and-1710

https://docs.microsoft.com/en-us/sql/connect/odbc/linux-mac/installing-the-microsoft-odbc-driver-for-sql-server?view=sql-server-2017

more
Standard

Personalizar error 403

En la raíz se crea el archivo .htaccess con las ip a las cuales se les permite el acceso y la url del archivo que se va a abrir si no está dentro de las ip permitidas.

sudo nano .htaccess
<RequireAny>
 Require ip 190.248.159.226
 Require ip 190.248.159.227
</RequireAny>
ErrorDocument 403 /error/403.php

Se debe crear la carpeta error y dentro de ella su respectivo .htaccess

<RequireAll>
    Require all granted  
</RequireAll>

Dentro de la carpeta error se crea el archivo 403.php con el siguiente contenido:

<!DOCTYPE html>
<html lang="en">
<head>
 <meta charset="utf-8" />
 <meta name="viewport" content="width=device-width, initial-scale=1"/>
 <script src="//use.fontawesome.com/84c9ca0cf8.js"></script>
 <title>403 Acceso Denegado</title>

<style type="text/css">
 @import url('//fonts.googleapis.com/css?family=Roboto');
 body {
 background: #2e739a;
 color: #D7D7D7;
 font: 16px/1.3 "Roboto", sans-serif;
 }
 header {
 width: 100%;
 margin:0px auto;
 }
 h1 {
 text-align: center;
 color:#D7D7D7;
 font: 30px/1 "Roboto";
 text-transform: uppercase;
 margin: 5% auto 5%;
 margin-bottom: 35px;
 }

article { display: block; text-align: center; width: 650px; margin: 10px auto; }

@media screen and (max-width: 720px) {
 article { display: block; text-align: center; width: 450px; margin: 0 auto; }
 h1 { font: 70px/1 "Roboto";}
 .wrap {margin-top: 50px;}
 }

@media screen and (max-width: 480px) {
 article { display: block; text-align: center; width: 300px !important; margin: 0 auto; }
 h1 { font: 50px/1 "Roboto";}
 .wrap {margin-top: 50px;}

}
 </style>

<!--[if IE]><script src="//html5shiv.googlecode.com/svn/trunk/html5.js"></script><![endif]-->

</head>
<body>
<div class="wrap">
 <article>
 <header>
 <h1 id="fittext1">Error 403<i class="fa fa-exclamation-triangle fa-fw"></i></h1>
 </header>
 <p id="fittext2">Acceso Denegado </br> Su IP <?php echo $_SERVER['REMOTE_ADDR']; ?> no está autorizada para ver este contenido </br> Por favor contacte al administrador</p>
 </article>
</div>
<script src="//ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<script src="//cdnjs.cloudflare.com/ajax/libs/FitText.js/1.2.0/jquery.fittext.js"></script>
<script type="text/javascript">
 $("#fittext1").fitText(1.1);
 $("#fittext2").fitText(1.5);
</script>
</body>
</html>
more
Standard

Enviar mensajes a través de la API de Telegram a un Canal

A continuación como enviar mensajes a tráves de la API de Telegram a un canal:

  • El canal primero debe ser público, con el fin de saber el id del canal.
  • Tener un Telegram BOT.
https://api.telegram.org/bot[BOT_API_KEY]/sendMessage?chat_id=[NOMBRE_DEL_CANAL_O_ID]&text=[MENSAJE]
  • BOT_API_KEY es la API Key generada por BotFather cuando se crea el bot
  • NOMBRE_DEL_CANAL_O_ID nombre o id del canal
  • MENSAJE el mensaje a enviar  (URL-encoded) es posible usar emojis sacandolos de acá https://apps.timwhitlock.info/emoji/tables/unicode

 

$apiToken = "my_bot_api_token";

$data = [
 'chat_id' => '@my_channel_name',
 'text' => 'Hello world!'
];

$response = file_get_contents("https://api.telegram.org/bot$apiToken/sendMessage?" . http_build_query($data) );
more
Standard

Permitir direcciones ip desde .htaccess

Editar el archivo:

/etc/apache2/apache2.conf

Agregar la línea:

<Directory /var/www/html/>
 AllowOverride All
 </Directory>

Luego crear el archivo .htaccess:

<RequireAny>
 Require ip 190.248.159.226
 Require ip 190.248.159.227
 </RequireAny>

Se pueden extraer las ip por paises en la página https://www.ip2location.com/free/visitor-blocker
more
Standard

Software para comprimir imágenes Freeware

Mass Image Compressor

https://sourceforge.net/projects/icompress/

MassImageCompressor reduce el tamaño de imagen considerable (> 90%) según las dimensiones y los parámetros de calidad seleccionados por el usuario. Reduzca todas las imágenes en una carpeta (y opcionalmente subcarpetas) con un solo clic. Mass Image Compression para páginas web, correo electrónico o almacenamiento en dispositivos móviles nunca fue tan fácil. Se conservan todos los metadatos de imagen (etiquetas EXIF).

more
Standard

vTiger – Evitar crear Cotizaciones y Ordenes de servicio directamente

Editar el archivo: layouts\vlayout\modules\Vtiger\ListViewContents.tpl

Entrar en la línea 135 Justo antes de <table class=”emptyRecordsDiv”> y agregar un if:

{if $MODULE!='Quotes' && $MODULE!='Invoice' && $MODULE!='SalesOrder' }
	<table class="emptyRecordsDiv">
		<tbody>
			<tr>
				<td>
					{assign var=SINGLE_MODULE value="SINGLE_$MODULE"}
					{vtranslate('LBL_EQ_ZERO')} {vtranslate($SINGLE_MODULE, $MODULE)} {vtranslate('LBL_FOUND')}.{if $IS_MODULE_EDITABLE} {vtranslate('LBL_CREATE')} <a href="{$MODULE_MODEL->getCreateRecordUrl()}">{vtranslate($SINGLE_MODULE, $MODULE)}</a>{/if}
				</td>
			</tr>
		</tbody>
	</table>
{/if}

 

more
Standard

cdr_custom.conf en Issabel

Habilitamos el uso de los cdr_custom

nano /etc/asterisk/cdr_custom.conf

Modificando la linea [mappings], quitandole los comentarios

[mappings]
calls.csv => ${CSV_QUOTE(${CDR(accountcode)})},${CSV_QUOTE(${CDR(src)})},${CSV_QUOTE(${CDR(dst)})},${CSV_QUOTE(${CDR(dcontext)})},${CSV_QUOTE(${CDR(clid)})},${CSV_QUOTE(${CDR(channel)})},${CSV_QUOTE(${CDR(dstchannel)})},${CSV_QUOTE(${CDR(lastapp)})},${CSV_QUOTE(${CDR(lastdata)})},${CSV_QUOTE(${CDR(start)})},${CSV_QUOTE(${CDR(answer)})},${CDR(billsec)},${CSV_QUOTE(${CDR(duration)})},${CSV_QUOTE(${CDR(end)})},${CSV_QUOTE(${CDR(disposition)})},${CSV_QUOTE(${CDR(amaflags)})},${CSV_QUOTE(${CDR(uniqueid)})},${CSV_QUOTE(${CDR(userfield)})}

Éstos archivos se guardan en la ruta /var/log/asterisk/cdr-custom/

 

more
Standard

Samba en Issabel

yum install samba samba-client samba-common
nano /etc/samba/smb.conf

Dentro de global

[global]
map to guest = bad user
/bin/systemctl restart smb.service

Luego se crean los puertos y se habilitan en el Firwall de Issabel

more
Standard

Powerbi: Host is blocked because of many connection errors. Unblock with ‘mysqladmin flush-hosts’

Powerbi muestra el error Host ‘host_name‘ is blocked because of many connection errors. Unblock with ‘mysqladmin flush-hosts’ luego de solicitar la actualización.

La solución es cambiar el valor predeterminado el cual es 10

SET GLOBAL max_connect_errors=10000;

Para consultar el cambio:

show variables like "max_connect_errors";
more