PHP: Instalar PDO_SQLSRV en Linux

Buscando en los modulos de Ubuntu/Debian no aparece la extensión para PHP de PDO_SQLSRV, solamente tenemos:

  • php7.0-pdo-firebird
  • php7.0-pdo-pgsql
  • php7.0-pdo-sqlite
  • php7.0-pdo-odbc
  • php7.0-pdo-mysql
  • php7.0-pdo-dblib

Y nada que diga php7.0-pdo-sqlsrv, pero la solución es compilar la extensión manualmente, gracias a PEAR, como root ejecutamos:

apt-get install unixodbc-dev php7.0-dev php-pear

pecl install pdo_sqlsrv-4.0.5

echo -e “; priority=20\nextension=pdo_sqlsrv.so” > /etc/php/7.0/mods-available/pdo_sqlsrv.ini

phpenmod -v 7.0 pdo_sqlsrv

/etc/init.d/php7.0-fpm restart

Y listo, deberíamos de tener en nuestro phpinfo() algo así:

Si utilizamos windows, descargamos la extensión desde aquí: Microsoft Drivers for PHP for SQL Server y este link para instalar el driver Microsoft ODBC Driver 13 for SQL Server

Y listo, ya nos podemos conectar al servidor SQL Server desde PHP.

Instalar extensión OpCache en XAMPP

La manera de instalar una extensión en PHP es editar el archivo PHP.ini y agregar extension=php_EXTENSION.dll o php_EXTENSION.so (sí no utilizas windows) pero al querer agregar la extensión de OpCache lo tradicional sería:

extension=php_opcache.dll

Pero el archivo de error.log arroja lo siguiente:

PHP Warning: PHP Startup: Invalid library (appears to be a Zend Extension, try loading using zend_extension=php_opcache.dll from php.ini) in Unknown on line 0

Aquí la solución es agregar la extensión pero de Zend, quedando así:

zend_extension=php_opcache.dll

Reinicias el servicio de Apache y listo!,

Error 500 con Nginx+Chroot+PHP5-FPM+PhpMyadmin

Despues de hacer la instalación de Nginx y PHP5-FPM con Chroot (Jail) e instalar MySQL PhpMyAdmin la página me daba un error 500.

Investigando veo que el problema esta en la siguiente línea del archivo library/common.inc.php de PhpMyAdmin.

date_default_timezone_set(@date_default_timezone_get());

El problema está en que la función date_default_timezone_get() y todo se debe a que no se tienen los archivos necesarios para buscar la timezone del servidor, como lo muestra el log de nginx

[error] 12058#0: *13 FastCGI sent in stderr: “PHP message: PHP Fatal error: date_default_timezone_get(): Timezone database is corrupt – this should *never* happen! in /var/www/phpmyadmin/libraries/common.inc.php on line 276” while reading response header from upstream, client: 111.111.111.111, server: miservidor.com, request: “GET /phpmyadmin/ HTTP/1.1”, upstream: “fastcgi://127.0.0.1:9000”, host: “miservidor.com”

La solución es instalar la timezonedb con PHP-PEAR ( pecl ), procedemos con el siguiente código:

apt-get install php-pear php5-dev
pecl install timezonedb
echo ‘extension=timezonedb.so’> /etc/php5/mods-available/timezonedb.ini
ln -sf /etc/php5/mods-available/timezonedb.ini /etc/php5/fpm/conf.d/30-timezonedb.ini
service php5-fpm restart

Y listo!!.. ya debe de funcionar correctamente la página de PhpMyAdmin

No LDAP support for PHP, ¿como activar la librería?

Estoy probando la librería adLDAP en PHP con Codeigniter y al momento de ingresar a la página me marca un error de que no se cuenta con soporte para LDAP.

Fatal error: Uncaught exception ‘adLDAP\adLDAPException’ with message ‘No LDAP support for PHP. See: http://www.php.net/ldap’ in C:\xampp\htdocs\sistema\application\libraries\adLDAP\adLDAP.php:606

Lo más extraño es que en el archivo de configuración php.ini, si esta habilitada la DLL de php_ldap.dll

extension=php_ldap.dll

Se reinicia XAMPP y nada de nada, el mismo error.

La solución es copiar estos 3 archivos al directorio de c:\windows\system\ los cuales estan dentro de c:\xampp\php\

libeay32.dll
libsasl.dll
ssleay32.dll

Una vez copiados a la carpeta system de Windows, reiniciamos Apache y listo!!!, ya tenemos el módulo LDAP activado.

ldap

LDAP Support enabled
RCS Version $Id: 6de334df54b2b93e6a633c353cfca7412b9a37cd $
Total Links 0/unlimited
API Version 3001
Vendor Name OpenLDAP
Vendor Version 20433
SASL Support Enabled

Codeigniter: Only variable references should be returned by reference

Después de actualizar mi versión de PHP a la 5.6.4 mis paginas en Codeigniter me mostraban este error:

A PHP Error was encountered
Severity: Notice
Message: Only variable references should be returned by reference
Filename: core/Common.php
Line Number: 257

La solución esta en modificar la linea 257 que esta en el archivo system/core/Common.php en donde veremos algo asi:

return $_config[0] =& $config;

Y remplazar por este codigo:

$_config[0] =& $config;
return $_config[0];

Listo!! adiós a la noticia en PHP.

WordPress: Como actualizar wordpress y plugins sin necesidad de contar con FTP o SFTP

Si en tu servidor web donde tienes instalado worpress no cuentas con una conexión FTP o no la quieres agregar en la configuración de wordpress, pero al momento de quere actualizar cualquier plugin o versión de wordpress te solicita información de tu conexión FTP y te marca el error:

Ha sido imposible conectar con el servidor FTP localhost:21

Existe una solución para que todo este proceso lo haga directamente en los archivos de wordpress, solo se necesita agregar la siguiente linea en el archivo de configuración wp-config.php , lo pueden agregar hasta el final del archivo.

define(‘FS_METHOD’,’direct’);

Y listo!, cuando actualicen, ya no solicitará información de la conexión

PHPExcel: Error al abrir un archivo creado con la función php://output

Estoy utilizando la libreria PHPExcel para crear archivos Excel 2007 desde PHP al vuelo., pero al momento de descargar el archivo utilizando algo como lo siguiente:

header(‘Content-Type: application/vnd.openxmlformats-officedocument.spreadsheetml.sheet’);
header(‘Content-Disposition: attachment;filename=”pruebas.xlsx”‘);
header(‘Cache-Control: max-age=0’);

$objWriter = PHPExcel_IOFactory::createWriter($objPHPExcel, ‘Excel2007’);
$objWriter->save(‘php://output’);

Y al abrir el excel me aparece un error como el siguiente:

Excel no puede abrir el archivo ‘pruebas.xlsx’ porque el formato o la extensión de éste no son válidos. Compruebe que el archivo no se ha dañado y que la extensión del mismo coincide con el formato del archivo.

Pero el detalle esta en que si se genera para guardar el excel en disco duro, si se abre correctamente, entonceees!., el problema esta en la generación al vuelo que este enviando algo extraño.

La solución esta en el encoding de los archivos PHP, estos deben de estar en modo UTF-8 sin BOM (ANSI as UTF-8), para ver que tipo de codificación tenemos, instalamos el notepad++, despues en la parte inferior derecha aparecerá el encoding y pues verificar que diga ANSI as UTF-8, para convertir solo ingresar al menú Codificación.

Y listo!.., ya podemos crear nuestro archivo Excel., también no olviden verificar que no se mande nada de nada de texto (ni un espacio en blanco., nadaaa!)

SQL Server: No regresa el texto completo en las celdas con valores tipo texto, modificar php.ini

Siguiendo con el tema del truncado de caracteres en SQL desde nuestra aplicación de PHP del post anterior, resulta que la solución también se puede hacer con el comando SQL.

SET TEXTSIZE NUMERO_CARACTERES_A_OBTENER

Pero igual si queremos algo más permanente, solo es cosa de modificar nuestro archivo PHP.ini, las lineas donde tengamos:

; Valid range 0 – 2147483647. Default = 4096.
;mssql.textlimit = 4096

; Valid range 0 – 2147483647. Default = 4096.
;mssql.textsize = 4096

Por lo general están comentadas estas lineas, solo es cosa de descomentarlas y poner el valor que deseemos, reiniciamos apache y listo 🙂

PHP: Convertir fecha de Twitter del formato RFC 2822 a uno de MySQL

Pues he estado probando la API de twitter y el campo created_at tiene la fecha en formato RFC 2822, osea en español algo así: Sun, 14 Aug 2005 16:13:03 +0000, el problema esta al guardar la información en la base de datos MySQL, ya que solo acepta formato “YYYY-MM-DD HH:MM:SS” entonces, ocupamos modificar esta información.

la solución esta en utilizar 2 funciones de PHP: strtotime y date

strtotime lo que hace es convertir una descripción de fecha/hora textual en Inglés a una fecha Unix y con comando date le damos el formato que deseemos.

Teniendo algo así.

date(‘Y-m-d H:i:s’,strtotime($json->created_at))

Archivo CSV marca error de formato SYLK

He estado trabajando con la librería php-csv-utils para crear archivos CSV desde PHP de forma más facil., y despues de crear el script y querer abrir el archivo.CSV con Microsoft Office Excel me aparece el siguiente mensaje de error:

Se ha detectado que “archivo.CSV” es un archivo SYLK, pero no se puede cargar. Puede que el archivo contenga errores o que no tenga formato de archivo SYLK. Haga clic en Aceptar para intentar abrirlo con otro formato

Y pues no se abre el archivo.., investigando sobre la solución a este error me encuentro que cuanto en la linea 1, aparece el texto ID (asi con mayusculas), es cuando aparece el error., la solución es que excel no detecte que los 2 primeros caracteres digan ID, ya sea pasarlo todo a minusculas ( id ), o la primera mayuscula y la demas minuscula ( Id )

Aquí la explicación oficial de la ayuda de Microsoft para el error SYLK y si quieren saber más sobre el formato Symbolic Link (SYLK) pues en wikipedia.