Page 1
Standard

Instalar multiples versiones de PHP en diferentes carpetas

Para evitar conflictos primero desinstalar php

sudo apt-get remove 'php*'
sudo apt-get purge 'php*'

Agregar el repositorio de ondrej/php

sudo apt install software-properties-common -y
sudo add-apt-repository ppa:ondrej/php -y
sudo apt update && sudo apt upgrade -y

Instalar el módulo fcgid de apache

sudo apt install libapache2-mod-fcgid -y

Instalar PHP 8.1 y 8.2

Continue Reading →
more
Standard

Solución: Warning: mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password] in

Warning: mysqli_real_connect(): The server requested authentication method unknown to the client [caching_sha2_password] in 
Warning: mysqli_real_connect(): (HY000/2054): The server requested authentication method unknown to the client in

Este error me apareció al tener Mysql 8 con PHP 7.2, la razón es que MySQL 8 por defecto usa caching_sha2_password, un complemento que no es reconocido por las versiones anteriores de PHP (mysqlnd).

Solución 1: Actualizar PHP a una versión mas reciente.

Solución 2: hacer un downgrade a mysql.

Solución 3: Usar el métono de autenticación anterior explicado a continuación.

sudo nano /etc/mysql/my.cnf

Agregar al final

[mysqld]
default-authentication-plugin=mysql_native_password

Y ejecutar la consulta:

alter user 'username'@'localhost' identified with mysql_native_password by 'password';
more
Standard

No se puede instalar PHP en Debian

Cuando se ejecuta sudo apt-get install php7.0 aparece el error:

Reading package lists... Done
Building dependency tree
Reading state information... Done
Some packages could not be installed. This may mean that you have
requested an impossible situation or if you are using the unstable
distribution that some required packages have not yet been created
or been moved out of Incoming.
The following information may help to resolve the situation:

The following packages have unmet dependencies:
 php : Depends: php7.0 but it is not going to be installed
E: Unable to correct problems, you have held broken packages.

Se debe ejecutar el siguiente comando para verificar que PPAs tenemos configurados:

LC_ALL=C apt policy

Si la salida es esta:

 500 http://ppa.launchpad.net/ondrej/php/ubuntu disco/main amd64 Packages
     release v=19.04,o=LP-PPA-ondrej-php,a=disco,n=disco,l=***** The main PPA fo                                                                             r supported PHP versions with many PECL extensions *****,c=main,b=amd64
     origin ppa.launchpad.net

Quiere decir que hemos roto el sistema agregando fuentes extranjeras, hay que eliminar las fuentes php del sourcelist:

cd /etc/apt/sources.list.d/

Eliminar las fuentes php:

rm ondrej-ubuntu-php-disco.list
rm ondrej-ubuntu-php-disco.list.save
rm php7.3.list
rm php7.3.list.save

Actualizar e instalar

apt-get update
apt-get install php

Y listo.

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

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

Conectar Codeigniter con MSSQL en Ubuntu

A continuación muestro como conectar codeigniter con mssql en ubuntu

Para ubuntu 14 con php5

apt-get install unixodbc freetds freetds-dev tdsodbc php5-odbc

Para Ubuntu 16 con php7

apt-get install unixodbc freetds-common freetds-dev tdsodbc php7.0-odbc

Reiniciar Apache

service apache2 restart

Editar /etc/freetds/freetds.conf

[nombre-servidor]
host = 192.168.10.10
port = 1433
tds version = 7.3

La version TDS 7.3 es para SQL Server 2008, para ver un listado de los protocolos visitar este link

 

Editar /etc/odbcinst.ini 

[TDS]
Driver = /usr/lib/x86_64-linux-gnu/odbc/libtdsodbc.so
Description = FreeTDS driver
Setup = /usr/lib/x86_64-linux-gnu/odbc/libtdsS.so

 

Editar /etc/odbc.ini

[mi-servidor]
Driver = TDS
Description = Descripcion 
ServerName = nombre-servidor
Database = bd_ejemplo

El ServerName es el nombre del servidor en el archivo de configuración freetds.conf, en el archivo de configuración de codeigniter debe tener algo así:

$db['mssql'] = array(
'dsn' => '',
'hostname' => 'dsn=my-server;uid=myusername;pwd=mypassword',
'username' => '',
'password' => '',
'database' => 'MyDatabase',
'database' => '',
'dbdriver' => 'odbc',
'dbprefix' => '',
'pconnect' => FALSE,
'db_debug' => (ENVIRONMENT !== 'production'),
'cache_on' => FALSE,
'cachedir' => '',
'char_set' => 'utf8',
'dbcollat' => 'utf8_general_ci',
'swap_pre' => '',
'encrypt' => FALSE,
'compress' => FALSE,
'stricton' => FALSE,
'failover' => array(),
'save_queries' => TRUE
);

y se llama de esta forma:

class Prueba_Model extends CI_Model{
	public function __construct(){
	parent::__construct();
	$this->pruebadb = $this->load->database('mssql', true);
}

 

more
more
Standard

PHP Warning: file_put_contents(TelegramException.log): failed to open stream: Permission denied in …/vendor/longman/telegram-bot/src/Exception/TelegramException.php on line 24

Luego de revisar la línea 24 del archivo al que hace referencia, se puede observar que trata de escribir y añadir un log.

namespace Longman\TelegramBot\Exception;

class TelegramException extends \Exception
{

    public function __construct($message, $code = 0)
    {
        parent::__construct($message, $code);

        $path = 'TelegramException.log';
        $status = file_put_contents(
            $path,
            date('Y-m-d H:i:s', time()) .' '. self::__toString() . "\n",
            FILE_APPEND
        );

    }
}

Pero no tiene permisos de hacerlo. Por lo que hay que darselos a la carpeta en donde se encuentra el archivo php que se esta ejecutando

chmod 777 [carpeta donde se esta ejecutando el script php]

 

more
Standard

Enviar por POST en ajax

Una forma de ver lo que se envía por POST a través ajax en PHP es probarlo en la misma página y mostrarlo con un alert, así verificamos que lo que se va es lo deseado.

<?php

if($_SERVER['REQUEST_METHOD'] == 'POST') {
    echo '<pre>';
    print_r($_POST);
    exit; // importante!
}

?>

<form method="post" id="classic_login" action="">
    <input type="text" name="user" placeholder="Username" class="classic_field" id="user_field" />
    <input type="text" name="pass" placeholder="Password"  class="classic_field" id="pass_field" />
    <input type="submit" name="login" value="Login" class="classic_button" id="login_button" />
    <input type="submit" name="register" value="Register" class="classic_button" id="register_button" />
</form> 


<script src="//ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<script type="text/javascript">
$("#classic_login").submit(function(event) {
    var formdata  = $(this).serialize();
    event.preventDefault();

    $.ajax({
        url: document.URL, 
        type: 'POST',
        data: formdata,
        success: function(response) { 
            alert(response); 
        }
    });
});
</script>

Si es un ARRAY lo que enviamos:

"data": {sData:sData},

En codeigniter en el controlador lo atrapamos de esta forma

function test(){
	$data = $this->input->post('sData');
	print_r($data);
}

 

more
codeigniter
Standard

Enviar mensajes desde Codeigniter con gmail

  1. Descargar Codeigniter
  2. Crear el controlador email  ./application/controllers/email.php con el siguiente código:
    <?php if ( ! defined('BASEPATH')) exit('No direct script access allowed');
    
    class Email extends CI_Controller {
    
    	public function index()
    	{
    		$config = Array(		
    				    'protocol' => 'smtp',
    				    'smtp_host' => 'ssl://smtp.gmail.com',
    				    'smtp_port' => 465,
    				    'smtp_user' => 'correo@gmail.com',
    				    'smtp_pass' => 'clave',
    				    'smtp_timeout' => '4',
    				    'mailtype'  => 'text', 
    				    'charset'   => 'iso-8859-1'
    				);
     
    		$this->load->library('email', $config);
    		$this->email->set_newline("\r\n");
    
    		$this->email->from('correo@gmail.com', 'correo@gmail.com');
    		$this->email->to('destino@ejemplo.com');
    		//$this->email->cc('otro@otro-ejemplo.com');
    		//$this->email->bcc('copiaoculta@otro-ejemplo.com');
    
    		$this->email->subject('Email Test');
    		$this->email->message('Mensaje de Prueba');
    
    		$this->email->send();
    
    		echo $this->email->print_debugger();
    
    
    	}
    }

    Continue Reading →

more