Archivos de Categoría: PHP

Instalar MongoDB en Ubuntu 12.04 con driver PHP

Instalar MongoDB:

sudo apt-key adv --keyserver hkp://keyserver.ubuntu.com:80 --recv 7F0CEB10
echo 'deb http://downloads-distro.mongodb.org/repo/ubuntu-upstart dist 10gen' | sudo tee /etc/apt/sources.list.d/mongodb.list
sudo apt-get update
sudo apt-get install mongodb-10gen

Instala driver PHP de MongoDB:

sudo apt-get install php-pear php5-dev
pecl search mongo
sudo pecl install mongo

Configurar driver PHP de MongoDB PHP en Apache: Crear un fichero llamado /etc/apache/conf.d/mongo.ini con el siguiente contenido:

extension=mongo.so

Luego reiniciar Apache:

sudo service apache2 restart

Arrancar, parar y reiniciar MongoDB:

sudo service mongodb start
sudo service mongodb stop
sudo service mongodb restart

Fichero de configuration:

/etc/mongodb.conf

Fichero de log:

/var/log/mongodb/mongodb.log

Ficheros de datos:

/var/lib/mongodb

Ref: http://docs.mongodb.org/manual/tutorial/install-mongodb-on-ubuntu/

Nowdoc y heredoc en PHP

Del manual:

Nowdocs son a las cadenas con comillas simples lo mismo que Heredoc lo es a las comillas dobles. Una cadena nowdoc se especifica de forma análoga a la heredoc, pero no se realiza ningún análisis dentro de nowdoc. Esta construcción es ideal para embeber código PHP o grandes fragmentos de texto sin necesidad de escaparlo.

Es importante fijarse que la diferencia entre las 2 es que nowdocs usa comillas simples para definir el tag (que puede ser cualquier cosa) y heredocs no.

$foo = 'bar';

$now = <<<'NOW'
    I'm now, $foo!
NOW;

$here = <<<HERE
    I'm here, $foo!
HERE;

En este caso:

$now es "I'm now, $foo!"

$here es "I'm here, bar!"

Ref: http://php.net/manual/en/language.types.string.php#language.types.string.syntax.nowdoc
http://stackoverflow.com/a/11153164

Usar el php de MacPorts desde la línea de comandos

Hace un tiempo instalé Apache+MySQL usando MacPorts en Mac OS X. Todo iba bien siempre y cuando estuviera navegando por las páginas usando un navegador, pero en cuanto usé PHP mediante el CLI para ejecutar comandos de Symfony2 comenzaron los problemas. Me decía que no tenía configurada la zona horaria, y yo estaba seguro de haberla configurado en el fichero php.ini.

$ php app/console doctrine:schema:update --force

  
[ErrorException] Warning: date_default_timezone_get(): It is not safe to rely on the system' s timezone settings. You are *required* to use the date.timezone setting or the date_default_timezone_set() function. In case you used any of those me thods and you are still getting this warning, you most likely misspelled th e timezone identifier. We selected 'Europe/Berlin' for 'CET/1.0/no DST' ins tead in /Users/enekochan/Documents/Webs/este.es/vendor/monolog/monolog/src/ Monolog/Logger.php line 199

          

Buscando una solución por internet me di cuenta de que el problema era que estaba ejecutando el php binario que viene con Mac OS X, y en ese no tenía configurada la zona horaria. Se puede ver de donde se lee el fichero php.ini ejecutando esto:

$ php -i | grep 'Configuration File'
Configuration File (php.ini) Path => /etc
Loaded Configuration File => (none)

La primera solución que se me ocurrió fue usar la ruta completa al php binario de MacPorts:

$ /opt/local/bin/php app/console doctrine:schema:update --force
$ /opt/local/bin/php -i | grep 'Configuration File'
Configuration File (php.ini) Path => /opt/local/etc/php5
Loaded Configuration File => /opt/local/etc/php5/php.ini

Una mejor solución consiste en añadir la ruta /opt/local/bin al path del sistema antes que la ruta /usr/bin. Esto se puede hacer editando el fichero ~/.bash_profile:

PATH=/opt/local/bin:$PATH;export PATH

Luego hay que cerrar y volver a abrir el terminal o recargar el ~/.bash_profile:

$ source ~/.bash_profile

Ref: Stackoverflow

Instalar y configurar MongoDB y el driver PHP con MacPorts

Instalar y configurar MongoDB con MacPorts

Installar MongoDB con MacPorts es tan fácil como ejecutar el siguiente comando:

$ sudo port install mongodb

MongoDB usa por defecto la ruta /data/db para almacenar los ficheros de datos, y es muy probable que no tengas esa ruta por lo que al ejecutar el servidor de MongoDB (mongod) acabarás teniendo este error:

*********************************************************************
 ERROR: dbpath (/data/db/) does not exist.
 Create this directory or give existing directory in --dbpath.
 See http://dochub.mongodb.org/core/startingandstoppingmongo
*********************************************************************

Hay varias opciones:

Crear esa carpeta y darle los permisos adecuados:

$ sudo mkdir -p /data/db/
$ sudo chown `id -u` /data/db

Proporcionar otra ruta como la carpeta de datos usando la opción --dbpath:

$ mongodb --dbpath /var/lib/mongo

Y la mejor de todas, crear las carpetas necesarias para los datos y los logs y crear el fichero de configuración que indica dónde están dichas rutas:

$ sudo mkdir /opt/local/var/db/mongodb
$ sudo mkdir /opt/local/var/log/mongodb
$ sudo touch /opt/local/var/log/mongodb/mongodb.log
$ sudo mkdir /opt/local/etc/mongodb/

Añade lo siguiente al fichero /opt/local/etc/mongodb/mongodb.conf:

# Store data alongside MongoDB instead of the default, /data/db/
dbpath = /opt/local/var/db/mongodb

# Only accept local connections
bind_ip = 127.0.0.1

# Running as daemon
fork = true

# Take log
logpath = /opt/local/var/log/mongodb/mongodb.log
logappend = true

Puedes entonces ejecutar mongod especificando el fichero de configuración que acabas de crear:

$ sudo mongod -f /opt/local/etc/mongodb/mongodb.conf

Una forma aún más fácil es usar el comando load/unload que viene con MacPorts que crea y define todas esas opciones en el fichero /opt/local/etc/LaunchDaemons/org.macports.mongodb/org.macports.mongodb.plist. Puedes arrancar y parar MongoDB con estos comandos (usarlos hará que MongoDB se autoarranque al inicio del sistema!):

$ sudo port load mongodb
$ sudo port unload mongodb

Más opciones de configuración: http://docs.mongodb.org/manual/reference/configuration-options/

Instalar el driver PHP de MongoDB

Antes de instalar el driver tenemos que estar seguros de que tenemos instalado pear y pecl. Ejecutar los siguientes comandos a ver si muestran algún resultado:

$ pear version
$ pecl version

Ahora instalamos el driver PHP con el comando pecl:

$ sudo pecl install mongo

Cuando acabe la instalación verás algo como esto:

Build process completed successfully
Installing '/opt/local/lib/php/extensions/no-debug-non-zts-20090626/mongo.so'
install ok: channel://pecl.php.net/mongo-1.3.4
configuration option "php_ini" is not set to php.ini location
You should add "extension=mongo.so" to php.ini

La última línea indica que tienes que editar a mano el fichero php.ini, que en mi caso está en /opt/local/etc/php5/php.ini, y añadir la extensión para mongo. Puedes añadir esa línea al final del fichero pero se supone que su sitio es en la sección “Dynamic Extensions”.

Ahora reinicia el servidor Apache y ya estarás preparado para usar MongoDB desde PHP.

$ sudo /opt/local/etc/LaunchDaemons/org.macports.apache2/apache2.wrapper start

Fuentes: http://api.mongodb.org/wiki/current/PHP%20Language%20Center.html
http://noteit.jiaeil.com/install-mongodb-via-macports-on-mac
http://stackoverflow.com/questions/8029064/new-to-mongodb-can-not-run-command-mongo

Script de instalación de Apache 2 + MySQL 5 + PHP 5.3 + phpMyAdmin 3.5.4 para Mac OS X usando MacPorts

Basándome en las instrucciones de Gilles Fabio he creado un completo script para instalar Apache 2, MySQL 5, PHP 5.3 y phpMyAdmin 3.5.4 en Mac OS X usando MacPorts.

Ya que MacPorts compila todos los ports desde el código fuente es necesario tener instalado “Command Line Tools” (descárgalo desde http://connect.apple.com/, se necesita un Apple ID) y una vez instalados hay que ejecutar xcodebuild -license en la línea de comandos para aceptar la EULA (End User License Agreement).

Instala y configura automáticamente todo lo que se necesita para tener en funcionamiento un entorno Apache+MySQL+PHP. Una vez instalado los ficheros de configuración más importantes se encuentran aquí:

httpd.conf:         /opt/local/apache2/conf/httpd.conf
httpd-vhosts.conf:  /opt/local/apache2/conf/extra/httpd-vhosts.conf
htdocs folder:      /opt/local/apache2/htdocs
php.ini:            /opt/local/etc/php5/php.ini
config.inc.php:     /opt/local/apache2/htdocs/phpmyadmin/config.inc.php
my.cnf:             /opt/local/my.cnf
mysqld.sock:        /opt/local/var/run/mysql5/mysqld.sock

Puedes descargar el script desde mi repositorio Github: installMacPorts-Apache-MySQL-PHP-phpMyAdmin-OSX.sh

Echa un vistazo a mi artículo de cómo configurar los virtual hosts para poder tener multiples webs alojadas en el mismo servidor.

ACTUALIZACIÓN: Puedes instalar PHP 5.4 usando esta guia: https://gist.github.com/2721719