Archivos de Categoría: Apache @es

Instalar PHP 7.0 en Mac OS X con MacPorts

He usado este proceso para instalar PHP 7.0 con MacPorts junto con PHP 5.6.

Primero asegurarse de que el Apache que viene junto con Mac OS X está parado:

$ sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

Instalar PHP7 y algunos de sus módulos (la lista completa de módulos disponibles aquí):

$ sudo port install php70
$ sudo port install php70-apache2handler php70-cgi php70-gd php70-curl php70-intl php70-iconv php70-gettext php70-mbstring php70-imap php70-mcrypt php70-xmlrpc php70-mysql php70-openssl php70-sockets php70-zip php70-tidy php70-opcache php70-xsl php70-sqlite

Crear el fichero php.ini base a partir del ejemplo de development:

$ sudo cp /opt/local/etc/php.ini-development /opt/local/etc/php.ini

Averiguar la timezone actual y configurarla en php.ini:

$ TIMEZONE=`sudo systemsetup -gettimezone | awk '{ print $3 }'`
$ TIMEZONE=$(printf "%s\n" "$TIMEZONE" | sed 's/[][\.*^$/]/\\&/g')
$ sudo sed -i.bak "s/;date.timezone =/date.timezone = \"${TIMEZONE}\"/g" php.ini

Actualizar los sockets de MySQL si es que se está usando:

$ sudo sed -i.bak "s#pdo_mysql\.default_socket.*#pdo_mysql\.default_socket=`/opt/local/bin/mysql_config --socket`#" php.ini
$ sudo sed -i.bak "s#mysqli\.default_socket.*#mysqli\.default_socket=`/opt/local/bin/mysql_config --socket`#" php.ini

Ahora con este comando se pueden ver las versiones de PHP instaladas:

$ sudo port select --list php
Available versions for php:
	none
	php56 (active)
	php70

Seleccionar php70 como la versión activa de PHP:

$ sudo port select php php70
Selecting 'php70' for 'php' succeeded. 'php70' is now active.

Habilitar PHP 7 en Apache:

$ cd /opt/local/apache2/modules
$ sudo /opt/local/apache2/bin/apxs -a -e -n php7 mod_php70.so

Reiniciar Apache:

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

Se puede comprobar la versión de php en la consola así:

$ php -v
PHP 7.0.0 (cli) (built: Dec 12 2015 11:18:35) ( NTS )
Copyright (c) 1997-2015 The PHP Group
Zend Engine v3.0.0, Copyright (c) 1998-2015 Zend Technologies
    with Zend OPcache v7.0.6-dev, Copyright (c) 1999-2015, by Zend Technologies

Si la versión que se muestra no es la 7.0 asegurarse de que la ruta /opt/local/bin está definida antes que /usr/bin en la variable PATH:

$ echo $PATH
/opt/local/bin:/usr/local/bin:/usr/bin:/bin:/usr/sbin:/sbin:/usr/local/bin

También asegurarse de que /opt/local/bin/php está apuntando a /opt/local/bin/php70:

$ $ ls -l /opt/local/bin/php
lrwxr-xr-x  1 root  admin    20B Dec  5 23:25 /opt/local/bin/php -> /opt/local/bin/php70

Si al ejecutar phpinfo(); no aparece la versión 7.0 comprobar que solo el módulo 7.0 es cargado en /opt/local/apache2/conf/httpd.conf:

#LoadModule php5_module        modules/mod_php56.so
LoadModule php7_module        modules/mod_php70.so

php7

Aumentar el tamaño máximo de fichero que se puede subir en PHP

A veces necesitas aumentar el tamaño máximo de fichero que se puede subir en PHP que por defecto es 2 megabytes.

php_upload_max_filesize

Dicho tamaño máximo está determinado por 2 valores en PHP:

  • Tamaño máximo de fichero a subir: upload_max_filesize
  • Tamaño máximo de una petición Post: post_max_size

Por eso es importante que ambos valores tengan un valor correcto en php.ini:

upload_max_filesize = 32M
post_max_size = 32M

Permitir servir ficheros fuera de /var/www en Apache2

Estoy usando tanto Ubuntu como Mac OS X en mi ordenador. Quería poner una partición compartida en la que pondría todo lo susceptible de estar duplicado en ambos sistemas: DropBox, descargas, música, etc. Las páginas que estoy desarrollando también iban ahí pero estaba obteniendo todo el rato errores 403. Cualquier cosa fuera de /var/www no funcionaba. Al final me dí cuenta de que en /etc/apache2/apache2.conf hay una configuración con Directory que deniega el acceso a cuaquier fichero fuera de /var/www y /usr/share:

<Directory />
       Options FollowSymLinks
       AllowOverride None
       Require all denied
</Directory>

<Directory /usr/share>
        AllowOverride None
        Require all granted
</Directory>

<Directory /var/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

Para solucionar esto tan sólo hay que quitar el primer bloque Directory o mejor aún añadir otro bloque con Require all granted apuntando a tu ruta específica:

<Directory /home/shared/www/>
        Options Indexes FollowSymLinks
        AllowOverride None
        Require all granted
</Directory>

apache_logo

Cambiar entre diferentes versiones de PHP en Apache con Mac Ports

Si tienes por ejemplo 2 versiones diferentes de PHP en la misma máquina puede cambiar entre ellas usando APache eXtenSion tool:

Por ejemplo para activar PHP 5.4:

$ cd /opt/local/apache2/modules
$ sudo /opt/local/apache2/bin/apxs -a -e -n php5 mod_php54.so

Y para activar PHP 5.6:

$ cd /opt/local/apache2/modules
$ sudo /opt/local/apache2/bin/apxs -a -e -n php5 mod_php56.so

Para PHP 7.0:

$ cd /opt/local/apache2/modules
$ sudo /opt/local/apache2/bin/apxs -a -e -n php7 mod_php70.so

apache_logo

No se puede establecer conexión con MySQL después de actualizar PHP

Cuando actualizas a una nueva versión de PHP es posible que éste esté leyendo otro fichero php.ini al que leía la versión anterior. Tiene que comprobar qué php.ini está leyendo (por ejemplo con phpinfo()) y comprobar que las opciones pdo_mysql.default_socket, mysql.default_socket y mysqli.default_socket están bien configuradas. Estarán probablemente en blanco:

pdo_mysql.default_socket =
mysql.default_socket =
mysqli.default_socket =

Y deberían tener algo similar a esto:

pdo_mysql.default_socket = /opt/local/var/run/mysql55/mysqld.sock
mysql.default_socket = /opt/local/var/run/mysql55/mysqld.sock
mysqli.default_socket = /opt/local/var/run/mysql55/mysqld.sock

mysql