Blog

Etiqueta: hosting php

Promoción hosting GRID

Publicado en General Novedades Nuestros servicios en septiembre 20, 2011 8:07 am

Hoy comienza en Blackslot una promoción que durará hasta el 1 de enero de 2012. Podrás disfrutar de un descuento del 50% en cualquiera de los planes de alojamiento GRID dados de alta en estas fechas y se aplicará durante todo el tiempo que mantengas el alojamiento.

Además,  el registro o la transferencia de tu dominio serán gratuitos.

Existen planes individuales, los denominados planes GRID,  y planes para alojar diversos dominios denominados planes GRID PRO que pueden ser contratados tanto  bajo plataforma Linux cómo Windows.

Te ofrecemos alojamientos en servidores que cuentan con las últimas tecnologías:

Windows 2008 Server R2

GNU/Linux

  • PHP 5.3
  • Mysql 5
  • PERL
  • Python

En Blackslot pensamos en ponértelo fácil a la hora de trasladar tu web. Te ayudamos con la migración de tu sitio web tanto si está en HTML, como en PHP o .NET.

Además, también podemos ocuparnos del traslado de tu base de datos MSSQL o MySQL, así como de la migración de gestores de contenido como por ejemplo: WordPress, Magento, Joomla, etc.

Para darte de alta sólo tienes que pasarte por aquí.

Configurar wildcard domains conservando la variable de $_SESSION en php

Publicado en Desarrollo web Sistemas TI en mayo 10, 2010 8:43 am

Muchos os habréis fijado en servicios web que usan subdominios dinámicos (wildcard) para las cuentas de sus usuarios, como por ejemplo jaiku.

Sin embargo, una vez configurados los subdominios dinámicos, tenemos un serio problema y es que, las variables de sesión por defecto se pierden cada vez que ejecutamos la aplicación web desde un subdominio distinto al que hemos utilizado para crear dicha variable de sesión.

Podemos comprobar esto en algunos sitios web que no usan subdominios dinámicos pero, si hacemos login en su www.dirección.com, si después vamos a su dirección.com sin las ‘www’ nos encontramos con que no hemos iniciado sesión. El problema es similar y tiene la misma solución que en el caso de los wildcard domains.

Voy a explicar cómo solucionar este problema y como hacer funcionar subdominios dinámicos.

Los pasos:

1 – Configurar el dns
2 – Configurar el servidor web
3 – Configurar bien el ámbito de las variables $_SESSION en la aplicación php para que se compartan las variables de sesión entre los subdominios.


Configurar el dns.

Basta con crear una entrada tipo host es decir, “A” apuntando a *.tudominio.com . También vale con crear un CNAME * apuntando al registro A del dominio principal (“tudominio.com”).

Si hacemos un ping a “loquesea.tudomino.com” debería ya resolver (a menos que tengas capado el tráfico ICMP claro)

Configurar el servidor web.

En Apache httpd, debemos configurar en el vhost de nuestro dominio un ServerAlias que atienda a “*.midominio.com”

En Nginx, debemos configurar en la sección Server un valor server_name como “*.midominio.com”

En IIS, debemos dejar un sitio virtual sin headers y ese es el que atenderá las peticiones de vuestro wildcard dns, es la única forma.

Se ha discutido sobre este tema en el foro oficial de IIS y según los propios desarrolladores, aunque ha sido demandada durante años, no se piensa implementar dicha funcionalidad por ahora, ni siquiera en IIS7.

Nota: sólo podemos disponer de un sitio web sin headers por servidor web IIS.


Configurar nuestras variables de $_SESSION en php

El truco esta en configurar la directiva session.cookie_domain como “.midominio.com” (importante el . delante del dominio).

Podéis hacerlo en tiempo de ejecución, antes de llamar a session_start(); siempre que tengamos deshabilitado el autoarranque de sesiones en el php.ini (como es lógico y viene por defecto)

ini_set("session.cookie_domain",".midominio.com");
session_start();


¿Usas plesk?

Sergio ya explicó como configurar wildcard domains en servidores con el panel de control Plesk.

PDO en la próxima versión del driver de SQL Server para php

Publicado en Desarrollo web en mayo 8, 2010 9:27 pm

Hace unos días podíamos leer que por fín el driver de php para trabajar con SQL Server desde php contará con soporte para PDO en su versión 2.0.

php_sqlsrv_pdo

Esto es un gran avance para los desarrolladores que trabajen con php bajo entornos Microsoft ya que los orm más importantes escritos en este lenguaje, y algunos cms como Drupal, se basan en PDO y se integran en la mayoría de los framework más usados.

Por nuestra parte en Blackslot, procederemos a implantar este driver en nuestros servicios de hosting grid Microsoft, en cuanto la versión estable esté disponible.

Un vistazo a Doctrine 2

Publicado en Desarrollo web en mayo 2, 2010 2:15 am

Doctrine es un ORM que cada vez estamos usando más los que trabajamos con el framework Symfony para php.

La nueva versión de Doctrine está reescrito en php5.3, mejorando su rendimiento de una forma notable y haciendo mucho más ágil su uso.

Jonathan Wage, impartió en Febrero de este año durante la conferencia Symfony Live 2010 una interesante charla presentando algunas de las novedades más interesantes que se recogen en esta nueva versión.

Restablecer la contraseña de Mailman

Publicado en Sistemas TI en enero 15, 2010 1:51 am

Si has olvidado la contraseña de administrador de mailman, puedes restablecerla desde:

$MAILMAN_ROOT_D/bin/mmsitepass

Pd: Si usas Plesk, puedes localizar la ruta $MAILMAN_ROOT_D como hemos comentado aquí.

Configuración rápida de Virtual Host en Apache

Publicado en Sistemas TI en enero 7, 2010 9:32 am

Tras tener Apache+php+mysql instalado, llega el momento de crear alojamientos virtuales para nuestros dominios. Apache guarda los archivos de configuración de los Virtual Host en  /etc/apache2/vhosts.d/ si no hemos configurado ninguno allí veremos las plantillas que podemos usar como base (una con ssl y otra sin ssl).

En el ejemplo, voy a crear un archivo de configuración para BlackSlot en openSuse.

# Nos movemos al directorio de configuración vhost
cd /etc/apache2/vhosts.d
# Copiamos la plantilla a un nuevo archivo
cp vhost.template blackslot.conf
# En otra distribución seguramente sea /var/www/vhosts/
mkdir -p /srv/www/vhosts/blackslot/

Es importante tener en cuenta que el archivo de configuración debe terminar con el sufijo “.conf” para que Apache lo lea.

Debemos editarlo y sustituir el dominio de ejemplo “dummy-host.example.com” por el nuestro, así como las rutas que en nuestro ejemplo es /srv/www/vhosts/blackslot/. Sobre todo establece correctamente el DocumentRoot y donde dice <Directory “/srv/www/vhosts/dummy-host.example.com”>

Reiniciamos Apache y listo.

/etc/init.d/apache2 restart

Instalar extensión php-memcached en Suse Linux

Publicado en Desarrollo web Sistemas TI en enero 6, 2010 9:00 am

Aunque este tutorial está escrito pensando en una distribución Suse y openSuse, se podría aplicar a otras como debian.

Antes de nada, tenemos dos opciones a elegir: php-memcached o php-memcache. Las dos funcionan igual en la capa de programación php, pero tienen las siguientes particularidades:

php-memcache: Es la extensión más antigua de las dos, no requiere librerías adicionales.

php-memcached: Es la extensión más nueva, pero desarrollada por Andrei Zmievski (desarrollador del core de php) y requiere libmemcached. Yo he elegido esta, porque me da más confianza que Andrei sea el responsable de su desarrollo.

* Nota: si usas symfony 1.2 o inferior, debes usar la extensión php-memcache

Comencemos pues descargando la extensión libmemcached y la compilamos.


wget http://download.tangent.org/libmemcached-0.35.tar.gz

tar -xvf libmemcached-0.35.tar.gz

cd libmemcached-0.35/

/configure

make

make install

Ahora nos tendríamos que bajar la extensión php-memcached del sitio web pecl, pero antes debemos instalar las librerías de desarrollo de php, para poder compilar dicha extensión.

#instalamos las librerías de desarrollo de php
zypper install php5-devel

#ahora nos bajamos la extensión de pecl
wget http://pecl.php.net/get/memcached-1.0.0.tgz
cd memcached-1.0.0/

#hacemos un phpize para generar el configurador
phpize

#compilamos
/configure
make
make install

Por último debemos crear el archivo /etc/php5/conf.d/memcached.ini e indicar lo siguiente en él para que php active esta extensión:

extension=memcached.so

Ahora basta con reiniciar el servidor web para disponer de esta extensión habilitada.

Instalar LAMP (Linux+Apache2+MySQL5+PHP5) en openSuse 11.2

Publicado en Sistemas TI en enero 5, 2010 9:12 am

1. Instalar los paquetes necesarios:


# zypper install apache2 php5 mysql

2. Levantar apache y mysql:


# rcapache2 start
# rcmysql start

3. Creamos una configuración segura para mysql:


# mysql_secure_installation

Aquí nos pedirá crear una clave para el usuario root de mysql, eliminaremos los usuarios anonimos y la bd ‘test’ y deshabilitaremos el login remoto con privilegios de root.

4. Abrimos el puerto 80 (HTTP)


# SuSEfirewall2 open EXT TCP http

# SuSEfirewall2 stop

# SuSEfirewall2 start

5. Probamos que todo está instalado correctamente:


# touch /srv/www/htdocs/phpinfo.php
# echo '<?php phpinfo(); ?>' > /srv/www/htdocs/phpinfo.php

Y accedemos desde el navegador a http://ipserver/phpinfo.php. Aquí, fijaros que PHP5 y mysql figuren como instalados.

Enviar correo con gmail en php usando swift mailer 4

Publicado en Desarrollo web en enero 4, 2010 2:53 pm

Swift Mailer es probablemente la mejor librería para enviar correos mediante smtp y sendmail que existe para php. Escrita por Fabien Potencier, CEO de Sensio Labs y Lead developer del framework Symfony para php.

El siguiente código nos permite enviar correo usando el servidor smtp de gmail con esta herramienta:


 $transport = Swift_SmtpTransport::newInstance('smtp.gmail.com',
                                               465,
                                               'ssl')
              ->setUsername('usuario@gmail.com')
              ->setPassword('tu contraseña');

 //Creamos el mailer pasándole el transport con la configuración de gmail
 $mailer = Swift_Mailer::newInstance($transport);

 //Creamos el mensaje
 $message = Swift_Message::newInstance($subject)
             ->setFrom(array('tuemail@blackslot.gov' => 'Blackslot'))
             ->setTo($to_addresses)
             ->setBody($body);

 //Enviamos
 $result = $mailer->send($message);

Extraer elementos de una lista html y exportarlos a un array con php

Publicado en Desarrollo web en diciembre 31, 2009 5:50 pm

Puede que en algún momento de nuestras apasionantes vidas como desarrolladores web nos interese extraer el contenido de cada uno de los elementos de una lista html (<li>,<option> o similares) y almacenarlos en un array para utilizarlos a lo largo de nuestra aplicación.

Me he escrito una función que hace precisamente esto, gracias a la función preg_replace de php.


function li2Array($html,$elemento="li"){

  $a = array("/<".$elemento.">(.*?)</".$elemento.">/is");
  $b = array("$1 <explode>");

  $html  = preg_replace($a, $b, $html);
  $array = explode("<explode>",$html);

  return $array;

}

Solución al error HTTP/1.1 417 Expectation Failed Connection: close Content-Length: 0 en php con curl

Publicado en Desarrollo web en diciembre 31, 2009 8:32 am

Cuando desarrollamos con php haciendo uso de la librería curl, para hacer peticiones http post, nos podemos encontrar con el siguiente error al mostrar las cabeceras de respuesta: “HTTP/1.1 417 Expectation Failed Connection: close Content-Length: 0

La solución al problema es enviar el campo Expect (basta con enviarlo vacío) dentro de las cabeceras http de la petición. Lo vemos en el siguiente ejemplo:


$ch = curl_init();

//metemos el campo expect en la cabeceras

curl_setopt( $ch, CURLOPT_HTTPHEADER, $headers = array( "Expect:"));

Cómo activar o deshabilitar Safe Mode (Modo Seguro) en nuestro panel

Publicado en Nuestros servicios Sistemas TI en diciembre 24, 2009 12:59 pm

Algunas aplicaciones, como WordPress necesitan que el Safe Mode (Modo Seguro) no este activo. Esto se puede controlar facilmente desde nuestro panel de control, sin tocar una línea de código.

1) En el panel de control accedemos a Ajustes de alojamiento.

ajustes de alojamiento

2) En el apartado de soporte para PHP, activamos o desactivamos la función php_mode.

safemode

Cargar extensión de php desde código (en tiempo de ejecución)

Publicado en Desarrollo web en diciembre 24, 2009 9:37 am

Para cargar una extensión en tiempo de ejecución en php, tenemos la función dl();

Para cargar por ejemplo la extensión para conectarse a una base de datos mysql haríamos:

if(!extension_loaded("mysql")){
  dl("php_mysql.".PHP_SHLIB_SUFFIX);
}

El valor de la constante PHP_SHLIB_SUFFIX almacena la extensión que tendría una librería dependiendo el sistema operativo en el que corra nuestra aplicación.

Saludos, Asier Marqués

Ordenar arrays asociativos contenidos en otro array con php

Publicado en Desarrollo web en diciembre 23, 2009 4:27 pm

Algunas veces disponemos de un array que contiene a su vez varios arrays asociativos, que contienen por ejemplo datos obtenidos tras una consulta a la base de datos.

Puede que dicho array esté cacheado y no queramos atacar a la base de datos para ordenar esos resultados, por lo que nos vendría genial poder ordenar los arrays asociativos que contenga dicho array, en base a los valores que contenga una de las claves de los mismos.

Lo vemos más claro en un ejemplo. Tenemos el siguiente array:


$resultados = array(

array(

      'id' => 1,
      'nombre' => 'Enjuto',
      'apellido' => 'Mojamuto'

     ),

array(

      'id' => 2,
      'nombre'  => 'Marlo',
      'apellido'  => 'Brando'

     )

);

En php disponemos de la función usort(), que ordena en base a una función de comparación que nosotros especifiquemos.

Por ejemplo si quisiéramos ordenar en base a la clave id, en orden descendiente, la función sería:


function comparar($x, $y){

          if ( $x['id'] == $y['id'] )
             return 0;
          else if ( $x['id'] > $y['id'] )
             return -1;
          else
             return 1;

}

Y ahora llamamos a usort para que utilice dicha función:


//si no estamos en un entorno Orientado a Objetos
usort($resultados, array('comparar'));

//si estamos en un entorno Orientado a Objetos
usort($resultados, array('nombreDeClase','comparar'));