Administración PHP - Noviembre 2005
←
→
Transcripción del contenido de la página
Si su navegador no muestra la página correctamente, lea el contenido de la página a continuación
Administración PHP Noviembre 2005 Jordi Llonch jordi@laigu.net http://creativecommons.org/licenses/by-sa/2.0/
Administración PHP Índice • Instalación • Configuración • Monitoraje • Seguridad • Consideraciones al programador • Recursos 2
Administración PHP Instalación • Instalación general en un sistema Fedora Core 3: – rpm -i php-4.3.9-3.i386.rpm – rpm -i php-mysql-4.3.9-3.i386.rpm – rpm -i php-pear-4.3.9-3.i386.rpm – Estos paquetes instalarán el intérprete de PHP y configurarán Apache para la ejecución de PHP como módulo: • /etc/httpd/conf.d/php.conf • AddType application/x-httpd-php .php • AddType application/x-httpd-php-source .phps • LoadModule php4_module modules /libphp4.so • DirectoryIndex index.php • 3
Administración PHP Instalación PEAR • Instalación de las librerías PEAR: – Utilizaremos los siguientes comandos: • • Ver paquetes instalados: • # pear list • • INSTALLED PACKAGES: • = = = = = = = = = = = = = • PACKAGE VERSION STATE • Archive_Tar 1.1 stable • Console_Getopt 1.2 stable • DB 1.6.2 stable • Mail 1.1.3 stable • ... • • Ver la lista de paquetes disponibles: • # pear list-all • • Actualizar todos los paquetes: • # pear upgrade-all • • Instalar un paquete: • # pear install PAQUETE • • 4
Administración PHP Instalación PEAR • Comprobar la instalación de PEAR: – Crearemos el siguiente script PHP: • • • 5
Administración PHP Configuración: El archivo de configuración • El archivo de configuración (llamado php.ini a partir de PHP 4.0) – Leído cuando arranca PHP: • Para las versiones como módulo de servidor esto sólo ocurre una vez al arrancar el servidor web. • Para la versión CGI, esto ocurre en cada llamada. 6
Administración PHP Configuración: Directivas generales • asp_tags boolean – Permite el uso de las etiquetas estilo ASP además de las habituales etiquetas . También se incluye el atajo para imprimir variables < %= $valor %>. • auto_append_file string – Especifica el nombre de un archivo que es incluido automáticamente después del archivo principal. El archivo se incluye como si fuese llamado mediante la función include(), así que se utiliza include_path. – El valor especial none desconecta la adición automática de archivos. – Nota: Si el script es terminado con exit(), no tendrá lugar la adición automática. • auto_prepend_file string – Especifica el nombre de un archivo que es incluido automáticamente antes del archivo principal. El archivo se incluye como si fuese llamado mediante la función include(), así que se utiliza include_path. – El valor especial none desconecta la adición automática de archivos. 7
Administración PHP Configuración: Directivas generales • doc_root string – "Directorio raiz" de PHP en el servidor. Sólo se usa si no está vacío. Si PHP se configura con safe_mode, no se sirven archivos fuera de este directorio. • engine boolean – Esta directiva sólo es útil en la versión de PHP como módulo Apache. Se utiliza para sitios que desean habilitar la ejecución del PHP directorio por directorio o en base a cada servidor virtual. Poniendo php_engine off en los sitios apropiados del archivo httpd.conf, se puede habilitar o deshabilitar PHP. 8
Administración PHP Configuración: Directivas generales • open_basedir string – Limita los archivos que se pueden abrir por PHP al árbol de directorios especificado. – Cuando un script intenta abrir un archivo con, por ejemplo, fopen o gzopen, se comprueba su localización. Si el fichero está fuera del árbol de directorios especificado, PHP se negará a abrirlo. Todos los enlaces simbólicos son resueltos, de modo que no es posible evitar esta limitación usando uno de ellos. – El valor especial . indica que el directorio base será aquel en el que reside el script. – Bajo Windows, separe los directorios mediante punto y coma. En el resto de sistemas, sepárelos con dos puntos ":". Como módulo de Apache, los senderos para open_basedir de los directorios padre se heredan automáticamente. – El valor por defecto es permitir abrir todos los archivos. • gpc_order string – Fija el order de parseo de variables GET/POST/COOKIE. El valor por defecto de esta directiva es "GPC". Fijándola, por ejemplo, a "GP", hará que PHP ignore por completo las cookies y que sobreescriba las variables recibidas por GET con las que tengan el mismo nombre y vengan por POST. • ignore_user_abort string – Por defecto está a on. Si se cambia a off, los script terminarán tan pronto como intenten enviar algo después de que un cliente ha parado la conexión. 9
Administración PHP Configuración: Directivas generales • include_path string – Especifica una lista de directorios en los que las funciones require(), include() y fopen_with_path() buscan los archivos. El formato es similar a la variable de entorno de sistema PATH: una lista de directorios separados por dos puntos en UNIX o por punto y coma en Windows. • magic_quotes_gpc boolean – Fija el estado magic_quotes para operaciones GPC (Get/Post/Cookie). Si magic_quotes vale on, todas las ' (comilla sencilla), " (comilla doble), \ (barra invertida) y los NULL son automáticamente marcados con una barra invertida. Si además magic_quotes_sybase vale on, la comilla sencilla es marcada con otra comilla sencilla en lugar de la barra invertida. • magic_quotes_runtime boolean – Si se habilita magic_quotes_runtime, muchas de las funciones que devuelven datos de algún tipo de fuente externa incluyendo bases de datos y archivos de texto devolverán las comillas marcadas con una barra invertida. Si también está activo magic_quotes_sybase, la comilla simple es marcada con una comilla simple en lugar de la barra invertida. 10
Administración PHP Configuración: Directivas generales • max_execution_time integer – Fija el tiempo máximo en segundos que se le permite usar a un script antes de ser finalizado por el intérprete. Evita que scripts mal escritos puedan bloquear el servidor. • memory_limit integer – Fija el tamaño máximo de memoria en bytes que se permite reclamar a un script. Evita que script mal escritos utilizen toda la memoria disponible de un servidor. • short_open_tag boolean – Indica si se debe permitir el formato corto () de la etiqueta de apertura de PHP. Si desea utilizar PHP en combinación con XML, deberá desactivar esta opción. Si está desactivada, deberá utilizar el formato largo de la etiqueta de apertura (). 11
Administración PHP Configuración: Directivas generales • upload_tmp_dir string – El directorio temporal utilizado para almacenar archivos cuando se envían al servidor. Debe tener permiso de escritura para el usuario bajo el que corra PHP. • user_dir string – El nombre base del directorio utilizado bajo el directorio inicial de un usuario para los archivos PHP. Por ejemplo: paginas_html. • warn_plus_overloading boolean – Si está activada, esta opción hace que PHP muestre un aviso cuando el operador suma (+) se utiliza en cadenas. Permite encontrar fácilmente scripts que necesitan ser reescritos utilizando el concatenador de cadenas (.). 12
Administración PHP Configuración: Directivas de correo • SMTP string – Nombre DNS o dirección IP del servidor de SMTP que PHP bajo Windows deberá usar para enviar correos con la función mail(). • sendmail_from string – La dirección del remitente ("De:") para los correos enviados desde PHP bajo Windows. • sendmail_path string – Localización del programa sendmail. Generalmente /usr/sbin/sendmail o /usr/lib/sendmail. – Los sistemas que no usan sendmail deberán fijar esta directiva al nombre del programa alternativo que ofrezca su sistema de correo. Por ejemplo, los usuarios de Qmail pueden fijarlo a /var/qmail/bin/sendmail 13
Administración PHP Configuración: Directivas de modo seguro • safe_mode boolean – Para activar el modo seguro de PHP (muy poco recomendable). • safe_mode_exec_dir string – Si PHP se utiliza en modo seguro, la función system() y el resto de funciones que ejecutan programas del sistema se niegan a ejecutar programas que no estén en este directorio. 14
Administración PHP Configuración: Directivas de MySQL • mysql.allow_persistent boolean – Permitir o no conexiones MySQL persistentes. • mysql.default_host string – El servidor por defecto para utilizar cuando se conecte al servidor de bases de datos si no se especifica otro distinto. • mysql.default_user string – El nombre de usuario por defecto para utilizar cuando se conecta al servidor de base de datos si no se especifica otro. • mysql.default_password string – La clave por defecto para utilizar cuando se conecta al servidor de base de datos si no se especifica otro. • mysql.max_persistent integer – El número máximo de conexiones persistentes de MySQL por proceso. • mysql.max_links integer – El número máximo de conexiones de MySQL por proceso, incluyendo las persistentes. 15
Administración PHP Configuración: Directivas de PHP5 • zend.ze1_compatibility_mode boolean – Habilita compatibilidad con Zend Engine 1 (PHP 4.x) • error_reporting string – E_STRICT: información en tiempo de ejecución, habilita sugerencias para cambiar el código. (deshabilitar en producción) • auto_globals_jit boolean – Cuando está habilitado, las variables SERVER y ENV se crean cuando son usadas por primera vez (Just In Time) y no cuando el script se inicia. Si estas variables no se usan en el script, se gana en rendimiento. • mail.force_extra_parameters string – Fuerza la adición del parámetro especificado en el binario sendmail. • register_long_arrays boolean – Registrar las variables "deprecated" predefinidas $HTTP_*_VARS. • session.hash_function integer – Algoritmo hash para generar el session ID. – 0 = MD5 (128 bits) / 1 = SHA-1 (160 bits). 16
Administración PHP Configuración: Directivas de PHP5 • mysqli.max_links • mysqli.default_port • mysqli.default_socket • mysqli.default_host • mysqli.default_user • mysqli.default_pw • mysqli.reconnect – Directivas para la libreria MySQL Improved (versión 4.1) • soap.wsdl_cache_enabled boolean – Habilita o deshabilita el WSDL caching. • soap.wsdl_cache_dir string – Directorio dónde se almacenaran los archivos de caché de la extensión SOAP. • soap.wsdl_cache_ttl int – Número de segundos que los archivos de caché serán usados antes que los originales. 17
Administración PHP Configuración desde Apache • Cuando se utiliza PHP como módulo Apache, también puede cambiar los ajustes de configuración utilizando directivas en los archivos de configuración de Apache y en los .htaccess. • Hay unas pocas directivas de Apache que le permiten cambiar los ajustes de configuración de PHP: – php_value nombre valor • Fija el valor de la variable especificada. – php_flag nombre on|off • Fija una opción de configuración de tipo Boolean. – php_admin_value nombre valor • Fija el valor de la variable especificada. Los ajustes de configuración de tipo "Admin" sólo se pueden fijar desde los archivos principales de configuración del Apache, y no desde los .htaccess. – php_admin_flag nombre on|off • Fija una opción de configuración de tipo Boolean. 18
Administración PHP Configuración: Directivas monitoraje • display_errors boolean – Determina si los errores se visualizan en pantalla como parte de la salida en HTML o no. • log_errors boolean – Si los mensajes de error de los script deben ser registrados o no en el registro del servidor. • track_errors boolean – Si está habilitada, el último mensaje de error estará siempre presente en la variable global $php_errormsg 19
Administración PHP Configuración: Directivas monitoraje • error_log string – Nombre del fichero para registrar los errores de un script. Si se utiliza el valor especial syslog, los errores se envían al registro de errores del sistema. En UNIX se refiere a syslog(3) y en Windows al registro de eventos. • error_reporting integer – Fija el nivel de informe de errores. El parámetro es un entero que representa un campo de bits. Sume los valores de los niveles de informe de error que desea. – (continua) 20
Administración PHP Configuración: Directivas monitoraje La directiva error_reporting especifica el tipo de errores notificados por PHP. Tipo de error Descripción E_ALL Todos los errores y avisos E_ERROR Errores fatales detectados en tiempo de ejecución E_WARNING Advertencias (errores no fatales) detectados en tiempo de ejecución. E_PARSE Errores de sintaxis detectados en tiempo de compilación. Avisos detectados en tiempo de ejecución (pueden deberse a errores involuntarios o a errores intencionados, E_NOTICE por ejemplo, utilizar una variable no inicializada, pero utilizarla teniendo en cuenta que se inicializará automáticamente a una cadena vacía) Avisos detectados en tiempo de ejecución, al activarlos PHP sugiere cambios en el código para que una E_STRICT mejor interoperabilidad y compatibilidad en el futuro. E_CORE_ERROR Errores fatales detectados durante el arranque inicial de PHP. E_CORE_WARNING Advertencias (errores no fatales) detectados durante el arranque inicial de PHP. E_COMPILE_ERROR Erores fatales detectados en tiempo de compilación. E_COMPILE_WARNING Advertencias (errores no fatales) detectados en tiempo de compilación. E_USER_ERROR Mensajes de error generados por el usuario. E_USER_WARNING Advertencias generadas por el usuario. E_USER_NOTICE Avisos generados por el usuario. Para detectar el mayor número posible de errores durante el desarrollo de las páginas PHP es conveniente que la directiva error_reporting tome el valor E_ALL, aunque muchos servidores no suelen mostrar los avisos, ya que pueden deberse a errores intencionados. error_reporting = E_ALL Se muestran todos los errores. error_reporting = E_ALL & ~E_NOTICE Se muestran todos los errores, menos los avisos. 21
Administración PHP Configuración: Verificar • Para obtener los detalles de la configuración crearemos el siguiente script: • ... 22
Administración PHP Archivo php.ini ejemplo 23
Administración PHP Monitoraje: Tratamiento de errores •Error handling – Método por el cual el programador puede sobrescribir la función que interceptará y tratará los avisos y errores de programación. – Esta técnica permite: • Crear un registro de errores contra una base de datos. • Enviar un correo al administrador en caso de fallo grave. • ... 24
Administración PHP Monitoraje: Tratamiento de errores
Administración PHP Monitoraje: Tratamiento de errores // se prepara el error $err = "\n"; $err .= "\t".$dt."\n"; $err .= "\t".$errno."\n"; $err .= "\t".$errortype[$errno]."\n"; $err .= "\t".$errmsg."\n"; $err .= "\t".$filename."\n"; $err .= "\t".$linenum."\n"; $err .= "\n\n"; // para testear // echo $err; // guardar en el log de errores error_log($err, 3, "/usr/local/php4/error.log"); // si se trata de un error crítico se envía un correo al usuario if ($errno == E_USER_ERROR) mail("phpdev@example.com","Critical User Error",$err); } 26
Administración PHP Monitoraje: Tratamiento de errores function distance ($vect1, $vect2) { if (!is_array($vect1) || !is_array($vect2)) { trigger_error("Incorrect parameters, arrays expected", E_USER_ERROR); return NULL; } if (count($vect1) != count($vect2)) { trigger_error("Vectors need to be of the same size", E_USER_ERROR); return NULL; } for ($i=0; $i
Administración PHP Monitoraje: Tratamiento de errores $old_error_handler = set_error_handler("userErrorHandler"); // constante no definida, genera un aviso $t = I_AM_NOT_DEFINED; // define algun “vector” $a = array(2,3,"foo"); $b = array(5.5, 4.3, -1.6); $c = array (1,-3); // genera un error de usuario $t1 = distance($c,$b)."\n"; // genera otro error de usuario $t2 = distance($b,"i am not an array")."\n"; // genera un aviso $t3 = distance($a,$b)."\n"; ?> 28
Administración PHP Seguridad ● Introducción ● Variables globales ● Nombres de ficheros ● Subida de ficheros ● Bibliotecas ● Formularios 29
Administración PHP Seguridad: Introducción ● Primera recomendación: ● Disponer siempre de versiones actualizadas de Apache y PHP ● Aspectos de PHP que pueden dar lugar a vulnerabilidades: ● Variables globales ● Nombres de ficheros ● Subida de ficheros ● Bibliotecas ● Datos enviados desde formularios 30
Administración PHP Seguridad: Variables globales ● Cuando register_globals está activado en el fichero php.ini, PHP crea automáticamente variables globales a partir de los datos de los formularios y de las cookies. ● Esto puede dar lugar a problemas como en el ejemplo siguiente: • 31
Administración PHP Seguridad: Variables globales ● Una llamada a este script de la forma: •pagina.php?superuser=1 ■permitiría obtener privilegios de superusuario ● Para resolver este problema existen tres soluciones: • Deshabilitar register_globals en el fichero php.ini • Inicializar las variables • Establecer el orden de las variables en PHP 32
Administración PHP Seguridad: Variables globales ● Deshabilitar register_globals en el fichero php.ini • La directiva register_globals del fichero php.ini establece si se admite o no la creación automática de variables globales. • A partir de PHP 4.2.0 el valor por defecto de esta directiva es off, que es el valor recomendable. 33
Administración PHP Seguridad: Variables globales ● Inicializar las variables: • El problema anterior se soluciona dando un valor inicial a la variable $superuser: • 34
Administración PHP Seguridad: Variables globales ● Inicializar las variables: • Es recomendable inicializar todas las variables antes de usarlas. Se puede usar la directiva error_reporting=E_ALL en php.ini para que muestre un aviso cuando se use una variable que no haya sido previamente inicializada. • En un entorno de producción debe evitarse la aparición de mensajes de aviso o error. Para ello se utilizan las siguientes directivas en php.ini: • display_errors = off • log_errors = on • error_log = /var/log/php_errors.log • Los errores irán al fichero especificado en lugar de mostrarse en la pantalla. 35
Administración PHP Seguridad: Variables globales ● Establecer el orden de las variables en PHP: • PHP crea automáticamente variables globales a partir del entorno (E), las cookies (C), la información del servidor (S) y los parámetros GET (G) y POST (P) • La directiva variables_order controla el orden de estas variables. El valor por defecto es “EGPCS” • Permitir la creación de variables globales desde parámetros GET y POST y desde cookies es potencialmente peligroso. Un posible valor para variables_order que evita esto es “ES” • En tal caso para acceder a los parámetros de los formularios y a las cookies se deben utilizar los arrays globales $_REQUEST, $_GET, $_POST y $_COOKIES 36
Administración PHP Seguridad: Variables globales ● Establecer el orden de las variables en PHP • Si se modifican las directivas register_globals y/o variables_order es preciso revisar los scripts existentes para adaptarlos a las nuevas circunstancias. • Una forma puede ser la siguiente: • $edad = $_REQUEST[‘edad’]; • ... 37
Administración PHP Seguridad: Nombres de ficheros ● Es relativamente fácil construir un nombre de fichero que se refiera a algo distinto a lo que se pretende ● Sea el siguiente código: • include (“/usr/local/lib/bienvenida/$username”); ● Este código pretende mostrar un mensaje de bienvenida personalizado para el usuario. Aparentemente no es peligroso, pero ¿qué ocurriría si el usuario introduce como nombre la cadena “../../../../etc/passwd”? • Se mostraría el fichero de passwords del sistema. 38
Administración PHP Seguridad: Nombres de ficheros ● Además hay que tener en cuenta que las funciones de manejo de ficheros como include() o require() admiten nombres de ficheros remotos, lo que podría provocar la ejecución de código maligno cargado de otro servidor. Sea, por ejemplo, el código ● include ($libdir . “/conecta.php”); ● ● Si un atacante modifica el valor de la variable $libdir a, pongamos por caso, “http://atacante/”, y coloca en la raíz del mismo un fichero de nombre conecta.php, su código sería ejecutado ● Se puede desactivar la funcionalidad de acceso a ficheros remotos con la siguiente directiva en php.ini: • allow_url_fopen = off 39
Administración PHP Seguridad: Nombres de ficheros ● Para chequear nombres de ficheros se utilizan las funciones realpath() y basename(). La primera convierte direcciones relativas en absolutas y la segunda toma una ruta y devuelve la parte correspondiente al nombre del fichero. Ejemplo: • $file = $_POST[‘username’]; • $file2 = basename (realpath($file)); • if ($file2 != $file) • die (“$file no es un username válido”); • include (“/usr/local/lib/bienvenida/$file”); 40
Administración PHP Seguridad: Nombres de ficheros ● Otra defensa contra los nombres de ficheros incorrectos es la directiva de php.ini open_basedir: ● open_basedir = /alguna/ruta ● ● PHP limitará las operaciones sobre ficheros al directorio especificado y sus subdirectorios: • include (“/alguna/ruta/lib.inc”); // permitido • include (“/otra/ruta/lib.inc”); // da error 41
Administración PHP Seguridad: Subida de ficheros ● La subida de ficheros permite a un usuario enviar cualquier fichero al servidor, lo cual encierra un gran peligro ya que un atacante puede subir un código maligno y luego ejecutarlo, causando más daño que cuando se incluye el código desde un servidor remoto ● Como recomendación general, debe evitarse utilizar el nombre enviado por el navegador (podría ser, por ejemplo, /etc/passwd). Es conveniente generar un nombre único para el fichero subido 42
Administración PHP Seguridad: Subida de ficheros ● Otro peligro es el tamaño de los ficheros. Aunque se limite el tamaño máximo en el formulario, los ficheros se reciben automáticamente y luego se comprueba su tamaño. ● Es posible que un usuario intente provocar un ataque de denegación de servicio enviando varios ficheros de gran tamaño a la vez y llenando el sistema de ficheros utilizado por PHP para almacenarlos. ● Para evitar esto se puede utilizar la directiva post_max_size de php.ini. El valor por defecto suele ser más elevado de lo necesario. 43
Administración PHP Seguridad: Bibliotecas ● Es conveniente almacenar los ficheros de biblioteca fuera de la raíz de la web para evitar que puedan ser accedidos por su URL. ● En tal caso debe hacerse saber a PHP la ubicación de los ficheros indicando la ruta completa en los include() y require() o bien mediante la directiva include_path en php.ini • include_path = “.:/usr/local/php:/usr/local/lib/myapp” ● Esto es particularmente importante cuando en el código de la biblioteca aparecen passwords, como es el caso de las funciones de conexión con bases de datos 44
Administración PHP Seguridad: Formularios ● Es recomendable validar todos los datos provenientes de formularios para asegurarse de que los valores recibidos son los esperados. ● En general, cualquier información proveniente del exterior debe contemplarse como posiblemente contaminada y debe ser verificada antes de ser utilizada. ● Sea el siguiente ejemplo: • print (“Nombre: “ . $nombre); • print (“Comentario: “ . $comentario); 45
Administración PHP Seguridad: Formularios ● Si el autor del comentario introdujo algún código HTML en el texto del mismo, el código será interpretado y sus efectos podrían ser graves ● Para evitar esto se puede utilizar la función htmlspecialchars(), que impide que se interpreten los caracteres especiales de HTML (, &) ● El código quedaría de la siguiente manera: • print (“Nombre: “ . $nombre); • print (“Comentario: “ . htmlspecialchars($comentario)); 46
Administración PHP Seguridad: Resumen ● De todo lo anterior podemos concluir las dos recomendaciones siguientes: ● Configurar adecuadamente PHP a través del fichero php.ini ● Seguir unas buenas prácticas en la programación. ● Hay que tener en cuenta que cualquier cambio en la configuración de PHP afectará a los scripts de todos los usuarios y posiblemente a algunas herramientas, lo cual debe ser tenido en cuenta y estudiarse sus consecuencias antes de proceder a realizarlos. 47
Administración PHP Consideraciones al programador •Safe mode •Sessiones •Variables globales •phpinfo() •Tiempo de ejecución máximo •Máximo tamaño de UPLOAD •Permisos de upload •¿Porqué no se deben guardar archivos en la BBDD? 48
Administración PHP Consideraciones al programador •Safe mode: – El Modo Seguro de PHP es un intento para resolver el problema de la seguridad en un servidor compartido. – Tratar de resolver este problema a nivel de PHP es arquitectónicamente incorrecto. – Ya que las alternativas en un servidor web y a niveles de sistemas operativos no son tan realistas puede ser una alternativa por ahora. – Restricciones: • Funciones restringidas (chdir, exec, system, passthru...) • PHP verifica si el dueño del script actual coincide con el dueño del fichero a ser operado por una función de fichero. • Tiempo de ejecución limitado estrictamente. • Consultar manual: http://es.php.net/features.safe-mode – En resumen, no es demasiado recomendable utilizarlo. 49
Administración PHP Consideraciones al programador •Sesiones: – Permiten almacenar datos al programador entre petición y petición. – ¿Dónde se almacenan? • Por defecto PHP está configurado para crear archivos temporales en /tmp y uno por sessión. • En el caso de un servidor con gran carga y peticiones concurrentes: – “Miles” de pequeños archivos de sessión en un sólo directorio. – Agotar el espacio en disco. • Se pueden configurar el almacenamiento de las sesiones contra una BBDD (solo a nivel de programación). 50
Administración PHP Consideraciones al programador •Variables globales: – Por razones de seguridad conviene desactivarlas. – Muchos programadores las usan de forma indiscriminada. •phpinfo(): – Conviene que el programador conozca el uso de la función phpinfo() para conocer la configuración exacta del servidor. •Tiempo de ejecución máximo: – El programador debe tener en cuenta el tiempo máximo de ejecución configurado. Se puede alterar desde los scripts con la función set_time_limit(). – Además se debe saber que Apache también dispone de la directiva timeout. 51
Administración PHP Consideraciones al programador •Máximo tamaño de UPLOAD: – Se configura con las directivas de PHP post_max_size y upload_max_filesize. •Permisos de upload: – ¿Se podrá escribir en el directorio deseado? •¿Porqué no se deben guardar archivos en la BBDD? – En la mayoría de bbdd las tablas se almacenan como archivos. – El sistema de ficheros puede no soportar archivos de más de 2Gb. – El rendimiento de la BBDD se ve perjudicado. 52
Administración PHP Recursos •Links recomendados: – Documentación oficial: • http://www.php.net • •Bibliografia recomendada: – – Sams Teach Yourself PHP, MySQL® and Apache All in One – By Julie C. Meloni – Publisher: Sams Publishing – Pub Date: December 18, 2003 – ISBN: 0-672-32620-5 – Pages: 624 – – PHP5 and MySQL Bible – By Tim Converse, Joyce Park – Publisher: Wiley Publishing, Inc. – Pub Date: 2004 – ISBN: 0-7645-5746-7 – Pages: 1083 – – PHP Cookbook – By David Sklar, Adam Trachtenberg – Publisher: O'Reilly – Pub Date: November 2002 – ISBN: 1-56592-681-1 – Pages: 632 – 53
También puede leer