https://haydenjames.io/understanding-php-memory_limit/ explains the memory_limit setting nicely.
Esta lista incluye las directivas del núcleo de php.ini que se pueden establecer para la configuración de PHP. Las directivas manejadas por extensiones están enumeradas y detalladas en las respectivas páginas de la documentación de cada extensión. La información sobre las directivas de sesión, por ejemplo, se puede encontrar en la página de sesiones.
Nota:
Las opciones predeterminadas enumeradas aquí se usan cuando php.ini no está cargado; los valores para el php.ini de producción y desarrollo podrían variar.
Nombre | Por defecto | Cambiable | Historial de cambios |
---|---|---|---|
short_open_tag | "1" | PHP_INI_PERDIR | |
precision | "14" | PHP_INI_ALL | |
serialize_precision | "-1" | PHP_INI_ALL | Antes de PHP 7.1.0, el valor predeterminado era 17. |
disable_functions | "" | Sólo en PHP_INI_SYSTEM | |
disable_classes | "" | Sólo en php.ini | |
exit_on_timeout | "" | INI_ALL | Disponible desde PHP 5.3.0. |
expose_php | "1" | Sólo en php.ini | |
hard_timeout | "2" | PHP_INI_SYSTEM | Disponible desde PHP 7.1.0. |
zend.exception_ignore_args | "0" | PHP_INI_ALL | Disponible desde PHP 7.4.0 |
zend.multibyte | "0" | PHP_INI_ALL | |
zend.script_encoding | NULL | PHP_INI_ALL | |
zend.detect-unicode | NULL | PHP_INI_ALL | |
zend.signal_check | "0" | PHP_INI_SYSTEM | |
zend.assertions | "1" | PHP_INI_ALL con restricciones |
He aquí una breve explicación de las directivas de configuración.
short_open_tag
bool
Indica a PHP si debería permitirse la forma abreviada de las etiquetas de apertura
de PHP (<? ?>
). Si se quiere utilizar PHP
junto con XML, se puede desactivar esta opción para poder
usar <?xml ?>
en línea. Si no, puede
imprimirse con PHP, por ejemplo: <?php echo '<?xml
version="1.0"?>'; ?>
. Además, si está desactivada, se debe usar
siempre la forma no abreviada de la etiqueta de apertura de PHP (<?php ?>
).
Nota:
Esta directiva no afecta a la abreviatura
<?=
, siempre está disponible.
precision
int
-1
significa que se utilizará el algoritmo mejorado
para redondear dichos números.
serialize_precision
int
-1
significa que se utilizará el algoritmo mejorado
para redondear dichos números.
expose_php
bool
Expone al mundo que PHP está instalado en el servidor, lo que incluye la versión de PHP en la cabecera HTTP (p.ej., X-Powered-By: PHP/5.3.7).
disable_functions
string
Esta directiva permite desactivar ciertas funciones por razones de seguridad. Requiere una lista con los nombres de las funciones delimitados por comas.
Solamente las funciones internas pueden ser desactivadas usando esta directiva. Las funciones definidas por el usuario no se ven afectadas.
Esta directiva debe ser establecida en el fichero php.ini. Por ejemplo, no puede establecerse en httpd.conf.
disable_classes
string
zend.assertions
int
1
, se generará y se ejecutará código
de afirmaciones (modo desarrollo). Si se establece a 0
,
el código de afirmaciones se generará aunque será saltado (no ejecutado)
durante la ejecución. Cuando se establece a -1
, el código de afirmaciones no
se generará, haciendo que las afirmaciones tengan un coste de cero (modo producción).
Nota:
Si un proceso se inicia en modo de producción, zend.assertions no podrá ser cambiado durante la ejecución, ya que no se generó el código para las afirmaciones.
Si un proceso se inicia en modo desarrollo, zend.assertions no podrá ser establecido a
-1
durante la ejecución.
hard_timeout
int
Cuando se alcanza el tiempo de espera establecido en max_execution_time, PHP en tiempo de ejecución reducirá los recursos fluidamente. Si algo se atasca mientras esto sucede, el duro tiempo de espera se marca durante la cantidad establecida en segundos. Cuando se alcanza el duro tiempo de espera, PHP terminará absolutamente todo. Cuando se establece a 0, el duro tiempo de espera nunca se activará.
Cuando PHP se detenga desde el duro tiempo de espera, se verá así:
Fatal error: Maximum execution time of 30+2 seconds exceeded (terminated) in Unknown on line 0
zend.exception_ignore_args
bool
Excluye argumentos del stack trace generados a partir de excepciones.
zend.multibyte
bool
Permite analizar los ficheros fuentes con codificación multibyte. Se requiere habilitar zend.multibyte para utilizar codificaciones de caracteres como SJIS, BIG5, etc que contienen caracteres especiales en datos de cadenas multibyte. Las codificaciones compatibles con ISO-8859-1 como UTF-8, EUC, etc no requieren esta opción.
Enabling zend.multibyte requires the mbstring extension to be available.
zend.script_encoding
string
Este valor será usado a menos que una directiva declare(encoding=...) aparezca al principio del script. Cuando se emplea una codificación incompatible con ISO-8859-1, se deben utilizar zend.multibyte y zend.script_encoding.
Los string literales se transliterarán de zend.script_enconding a mbstring.internal_encoding, como si mb_convert_encoding() hubiera sido llamada.
zend.detect_unicode
bool
Comprobar la marca BOM (Byte Order Mark) y verificar si el fichero contiene caracteres multibyte válidos. Esta detección se realiza antes de procesar __halt_compiler(). Disponible solamente en modo Zend Multibyte.
zend.signal_check
bool
Para verficar gestores de señales reemplazados en el apagado.
exit_on_timeout
bool
Esta es una directiva mod_php-only de Apache1 que fuerza a un subproceso de Apache a salir si expiró el tiempo de ejecución de PHP. Este tiempo de espera provoca una llamada interna a longjmp() en Apache1, que puede dejar algunas extensiones en un estado de incoherencia. Al terminar el proceso, será limpiado cualquier bloqueo pendiente o la memoria.
Nombre | Por defecto | Cambiable | Historial de cambios |
---|---|---|---|
memory_limit | "128M" | PHP_INI_ALL |
He aquí una breve explicación de las directivas de configuración.
memory_limit
int
Establece el máximo de memoria en bytes que un script puede consumir.
Ayuda a prevenir que scripts mal programados consuman toda la memoria
disponible en el servidor. Observe que para no tener límite de memoria,
se ha de establecer esta directiva a -1
.
Véase también: max_execution_time.
Nombre | Por defecto | Cambiable | Historial de cambios |
---|---|---|---|
realpath_cache_size | "16K" | PHP_INI_SYSTEM | Antes de PHP 7.0.16 y 7.1.2, el valor predeterminado era "16K" |
realpath_cache_ttl | "120" | PHP_INI_SYSTEM |
Nota:
El uso de open_basedir deshabilitará la caché de realpath.
He aquí una breve explicación de las directivas de configuración.
realpath_cache_size
int
Determina el tamaño de la caché de realpath que va a ser usada por PHP. Este valor debe ser incrementado en sistemas donde PHP abra muchos ficheros, para reflejar la cantidad de operaciones realizadas con ficheros.
El tamaño representa el número total de bytes de los strings de rutas almacenadas, más el tamaño de los datos asociados con la entrada de la caché. Esto significa que para poder almacenar rutas mayores en la caché, el tamaño de esta debe ser mayor. Este valor no controla directamente el número de rutas distintas que pueden ser almacenadas en caché.
El tamaño requerido para los datos de entrada de la caché depende del sistema.
realpath_cache_ttl
int
Tiempo (en segundos) durante el cual almacenar en caché información de realpath para un determinado fichero o directorio. Para sistemas que raramente cambian ficheros, considere incrementar este valor.
Nombre | Por defecto | Cambiable | Historial de cambios |
---|---|---|---|
arg_separator.output | "&" | PHP_INI_ALL | |
arg_separator.input | "&" | PHP_INI_PERDIR | |
variables_order | "EGPCS" | PHP_INI_PERDIR | |
request_order | "" | PHP_INI_PERDIR | Disponible desde PHP 5.3.0 |
auto_globals_jit | "1" | PHP_INI_PERDIR | |
register_argc_argv | "1" | PHP_INI_PERDIR | |
enable_post_data_reading | "1" | PHP_INI_PERDIR | |
post_max_size | "8M" | PHP_INI_PERDIR | |
auto_prepend_file | NULL | PHP_INI_PERDIR | |
auto_append_file | NULL | PHP_INI_PERDIR | |
default_mimetype | "text/html" | PHP_INI_ALL | |
default_charset | "UTF-8" | PHP_INI_ALL | |
input_encoding | "" | PHP_INI_ALL | |
output_encoding | "" | PHP_INI_ALL |
He aquí una breve explicación de las directivas de configuración.
arg_separator.output
string
El separador usado en PHP para distinguir argumentos en las URLs generadas.
arg_separator.input
string
Lista de separadores empleados por PHP para convertir datos de URLs en variables.
Nota:
Cada carácter de esta directiva es considerado un separador.
variables_order
string
Establece el orden de interpretación de variables EGPCS (E
ntorno,
G
et, P
ost,
C
ookie, y S
ervidor).
Por ejemplo, si variables_order
es "SP"
, PHP creará las
superglobals $_SERVER y
$_POST, pero no creará
$_ENV, $_GET, y
$_COOKIE. Si se establece a "", las variables
superglobals no estarán disponibles.
En ambas CGI y FastCGI,
$_SERVER también
es rellenada con los valores de entorno; S
siempre es equivalente a ES
independientemente de la
posición de E
en esta directiva.
Nota:
El contenido y el orden de $_REQUEST también se ve afectado por esta directiva.
request_order
string
Esta directiva describe el orden en que PHP registra las variables GET, POST y Cookie en el array _REQUEST. El registro se hace de izquierda a derecha; los nuevos valores reemplazan los valores más antiguos.
Si esta directiva no está definida, variables_order se usa para el contenido de $_REQUEST.
Observe que la distribución predeterminada de los ficheros php.ini
no contienen 'C'
para cookies, por motivos de seguridad.
auto_globals_jit
bool
Cuando está activada, las variables SERVER y EVN son creadas la primera vez que se necesitan ("Just In Time") en lugar de hacerlo cuando el script se inicia. Si estas variables no son usadas en un script, el tener esta directiva activada resultará en una mejora del rendimiento.
El uso de las variables SERVER y ENV se comprueba durante el tiempo de compilación, por lo que utilizarlas a través de, por ejemplo, variables variables no causará su inicialización.
register_argc_argv
bool
enable_post_data_reading
bool
post_max_size
int
post_max_size
.
Cuando se usa un integer, el
valor del mismo es medido en bytes. También se puede usar la notación reducida, tal como se describe
en esta FAQ.
Si el tamaño de los datos de POST es mayor que post_max_size, las
superglobales
$_POST y $_FILES estarán vacías.
Esto se puede rastrear de varias maneras, por ejemplo, pasando la variable
$_GET al script que procesa los datos,
esto es, <form action="edit.php?procesado=1">
,
y luego comprobar si la variable $_GET['procesado'] existe.
Nota:
PHP acepta abreviaturas para valores de byte, incluyendo K (kilo), M (mega) y G (giga). PHP hará las conversión automaticamente si utiliza cualesquiera de estas abreviaturas. Tenga cuidado de no execeder el límite de los enteros con signo de 32 bits (si está usando veriones de 32 bits), puesto que hará que el script falle.
Versión | Descripción |
---|---|
5.3.4 |
post_max_size = 0 no deshabilitará el límite cuando el tipo
de contenido sea application/x-www-form-urlencoded o no esté registrado en PHP.
|
5.3.2 , 5.2.12 |
Permitir un tamaño de post ilimitado estableciendo post_max_size a 0.
|
auto_prepend_file
string
Especifica el nombre del fichero que será analizado automáticamente antes del fichero principal. El fichero es incluido como si fuera llamado con la función require, por lo que se usa include_path.
El valor especial none
desactiva esta directiva.
auto_append_file
string
Especifica el nombre del fichero que será analizado automaticamente después del fichero principal. El fichero es incluido como si fuera llamado con la función require, por que se utiliza include_path.
El valor especial none
desactiva el esta directiva.
Nota: Si el script finaliza con exit(), está funcionalidad no será llevada a cabo.
default_mimetype
string
Por omisión, PHP generará un tipo de medio empleando la cabecera Content-Type. Para deshabilitarlo, simplemente se ha de establecer a vacía.
El tipo de medio predeterminado interno de PHP está establecido a text/html.
default_charset
string
"UTF-8" es el valor predeterminado empleándose su valor
como la codificación de caracterse predeterminada para
htmlentities(),
html_entity_decode() y
htmlspecialchars() si se
omite el parámetro encoding
. El valor de
default_charset
también se empleará para establecer el
conjunto de caracteres predeterminado para las funciones de
iconv si las opciones de configuración
iconv.input_encoding
,
iconv.output_encoding
y
iconv.internal_encoding
están desestablecidas, y para
las funciones de mbstring si las opciones de configuración
mbstring.http_input
mbstring.http_output
mbstring.internal_encoding
están desestablecidas.
Todas las versiones de PHP utilizarán este valor como el conjunto de caracteres dentro de la cabecera Content-Type predeterminada enviada por PHP si la cabecera no ha sido sobrescrita por una llamada a header().
No se recomienda establecer default_charset
a un valor vacío.
input_encoding
string
Este ajuste se usa para módulos multibyte comos mbstring e iconv. El valor predeterminado es vacío.
output_encoding
string
Este ajuste se usa para módulos multibyte comos mbstring e iconv. El valor predeterminado es vacío.
internal_encoding
string
Este ajuste se usa para módulos multibyte comos mbstring e iconv. El valor predeterminado es vacío. Si está vacío, se usará default_charset.
always_populate_raw_post_data
mixed
Esta característica fue declarada OBSOLETA en PHP 5.6.0 y ELILMINADA a partir de PHP 7.0.0.
Si se establece a true
, PHP rellenará siempre
$HTTP_RAW_POST_DATA que contiene los datos POST sin tratar.
De lo contrario, la variable se rellena solamente cuando el tipo MIME de los
datos es irreconocible.
El método preferido para acceder a los datos POST sin tratar es
php://input, ya que
$HTTP_RAW_POST_DATA está obsoleta a partir de
PHP 5.6.0. Al establecer always_populate_raw_post_data
a -1
se optará por el nuevo comportamiento que será
implementado en una futura versión de, donde
$HTTP_RAW_POST_DATA nunca está definida.
Independientemente del ajuste, $HTTP_RAW_POST_DATA no
está disponible con enctype="multipart/form-data"
.
Véase también: magic_quotes_gpc, magic_quotes_runtime, y magic_quotes_sybase.
Nombre | Por defecto | Cambiable | Historial de cambios |
---|---|---|---|
include_path | ".;/path/to/php/pear" | PHP_INI_ALL | |
open_basedir | NULL | PHP_INI_ALL | |
doc_root | NULL | PHP_INI_SYSTEM | |
user_dir | NULL | PHP_INI_SYSTEM | |
user_ini.cache_ttl | "300" | PHP_INI_SYSTEM | |
user_ini.filename | ".user.ini" | PHP_INI_SYSTEM | |
extension_dir | "/path/to/php" | PHP_INI_SYSTEM | |
extension | NULL | Solamente en php.ini | |
zend_extension | NULL | Solamente en php.ini | |
cgi.check_shebang_line | "1" | PHP_INI_SYSTEM | Disponible desde PHP 5.2.0. |
cgi.discard_path | "0" | PHP_INI_SYSTEM | Disponible desde PHP 5.3.0. |
cgi.fix_pathinfo | "1" | PHP_INI_SYSTEM | |
cgi.force_redirect | "1" | PHP_INI_SYSTEM | |
cgi.nph | "0" | PHP_INI_SYSTEM | |
cgi.redirect_status_env | NULL | PHP_INI_SYSTEM | |
cgi.rfc2616_headers | "0" | PHP_INI_ALL | |
fastcgi.impersonate | "0" | PHP_INI_SYSTEM | |
fastcgi.logging | "1" | PHP_INI_SYSTEM |
He aquí una breve explicación de las directivas de configuración.
include_path
string
Especifica la lista de directorios donde las funciones require, include, fopen(), file(), readfile() y file_get_contents() buscarán ficheros. El formato es como la variable de entorno PATH del sistema: una lista de directorios separados por dos puntos en Unix o separados por punto y coma en Windows.
PHP considera cada entrada de la ruta de inclusión por separado cuando está buscando ficheros a incluir. Primero buscará en la primera ruta, y si no lo encuentra ahí, buscará en la siguiente, hasta que encuentre el fichero incluido, o devuelva una advertencia o un error. Se puede modificar o establecer una ruta de incluición propia en tiempo de ejecucción usando set_include_path().
Ejemplo #1 include_path en Unix
include_path=".:/php/includes"
Ejemplo #2 include_path en Windows
include_path=".;c:\php\includes"
El uso de .
en la ruta de inclusión permite el uso de
inclusiones relativas, ya que significa el directorio actual. Sin embargo,
es más eficiente usar explícitamente
include './fichero'
que hacer que PHP compruebe siempre
el directorio actual para cada inclusión.
Nota:
Las variables
ENV
también son accesibles en ficheros .ini. Por lo tanto, es posible hacer referencia al directorio raíz utilizando${LOGIN}
y${USER}
.Las variables de entorno podrían variar entre APIs de servidores, ya que sus entornos pueden ser diferentes.
Ejemplo #3 include_path en Unix usando la variable de entorno ${USER}
include_path = ".:${USER}/pear/php"
open_basedir
string
El límite de los ficheros a los que PHP puede acceder en el árbol de directorios especificado, incluyendo el fichero en sí. Esta directiva NO se ve afectada si el Modo Seguro está activado (On) o desactivado (Off).
Cuando un script intenta acceder al sistema de ficheros, por ejemplo, usando include, o fopen(), se comprueba la ubicación del fichero. Cuando el fichero está fuera del árbol de directorio especificado, PHP rechazará acceder a él. Todos los enlaces simbólicos se resuelven, por lo que no es posible evitar esta restricción con un enlace simbólico. Si el fichero no existe, el enlace simbólico no podría ser resuelto, por lo que el nombre de fichero se compara con (uno resuelto) open_basedir.
open_basedir puede afectar no sólo a las funciones del sistema de ficheros; por ejemplo,
si MySQL
está configurado para usar los controladores de mysqlnd
,
LOAD DATA INFILE
se verá afectado por open_basedir.
Mucha de la funcionalidad ampliada de PHP usa open_basedir
de esta manera.
El valor especial .
indica que el directorio de trabajo del script será usado como directorio base.
Esto es, sin embargo, un poco peligroso, ya que el directorio de trabajo
del script puede ser fácilmente cambiado con la función chdir().
En httpd.conf, se puede desactivar open_basedir
(p.ej. para algunos servidores virtuales)
de la misma manera que
cualquier otra directiva de configuración con "php_admin_value open_basedir
none
".
Bajo Windows, los directorios se han de separar con punto y coma. En cualquier otro sistema, se ha de hacer con dos puntos. Como módulo de Apache, las rutas de open_basedir de los directorios superiores se heredan automáticamente.
La restricción especificada en open_basedir es un nombre de directorio, no un prefijo.
El valor predeterminado permite abrir cualquier fichero.
Nota:
open_basedir puede usarse en tiempo de ejecución. Esto significa que si open_basedir está establecido como
/www/
en php.ini, un script puede reforzar la configuración a/www/tmp/
en tiempo de ejecución con ini_set(). Cuando se enumeran varios directorios, se puede usar la constantePATH_SEPARATOR
como separador, independientemente del sistema operativo.
Nota:
El uso de open_basedir establece realpath_cache_size en
0
y por lo tanto deshabilita la caché de realpath.
open_basedir
es solo una red de seguridad adicional, que de ninguna manera es
exhaustiva y, por lo tanto, no se puede confiar en ella cuando se necesita seguridad.
doc_root
string
El "directorio raíz" de PHP en el servidor. Solamente usada si no está vacía. Si PHP no se compiló con FORCE_REDIRECT, debería establecerse doc_root si se está usando PHP como CGI bajo cualquier tipo de servidor (que no sea IIS). La alternativa es usar la configuación de cgi.force_redirect de más abajo.
user_ini.cache_ttl
int
user_ini.filename
string
user_dir
string
El nombre base del directorio usado en un directorio principal de usuario para ficheros PHP, por ejemplo public_html .
extension_dir
string
En qué directorio debería buscar PHP extensiones que se pueden cargar dinámicamente. Véase también: enable_dl, y dl().
extension
string
Qué extensiones se cargarán dinámicamente cuando se inicie PHP.
zend_extension
string
El nombre de la extensión Zend cargable dinámicamente (por ejemplo XDebug) cuando se inicie PHP.
cgi.check_shebang_line
bool
Controla si PHP en modo CGI comprueba líneas que empiezan
por #!
(shebang) en el inicio del script que se está ejecutando.
Esta línea podría ser necesaria si el script admite su ejecución tanto como un script
independiente como mediante el modo CGI de PHP.
El modo CGI de PHP omite esta línea e ignora su contenido si
esta directiva si está activada.
cgi.discard_path
bool
Si está habilitado, el binario de CGI de PHP puede ser colocado sin riesgo fuera del árbol web, no siendo posible así eludir la seguridad de .htaccess.
cgi.fix_pathinfo
bool
Proporciona soporte real de PATH_INFO
/
PATH_TRANSLATED
para CGI.
El comportamiento anterior de PHP era establecer PATH_TRANSLATED
a SCRIPT_FILENAME
, por lo que no comprendía lo que era
PATH_INFO
. Para más información sobre
PATH_INFO
, véanse las especificaciones de CGI.
Si se establece el valor de esta directiva a 1
, el modo
CGI de PHP corregirá sus rutas conforme a las especificaciones. Si
se establece a cero, funcionará como anteriormente. Esta directiva está activada
de forma predeterminada. Debería corregir sus scripts para que utilicen
SCRIPT_FILENAME
en lugar de
PATH_TRANSLATED
.
cgi.force_redirect
bool
cgi.force_redirect es necesario para proporcionar seguridad al ejecutar PHP como CGI bajo la mayoría de servidores web. Si no se define, PHP activa esta directiva de forma predeterminada. Puede desactivarla bajo su propia responsabilidad.
Nota:
Para usuarios de Windows: Al usar IIS, esta ocpción debe estar desactivada. Para OmniHTTPD o Xitami se aplica lo mismo.
cgi.nph
bool
Si cgi.nph está habilitado, forzará a que cgi siempre envíe Status: 200 en cada petidión.
cgi.redirect_status_env
string
Si cgi.force_redirect está activada, y no se están usando servidores web Apache o Netscape (iPlanet), podría ser necesario establecer el nombre de una variable de entorno que PHP buscará para saber que se puede continuar con la ejecucción.
Nota:
Establecer esta variable podría causar problemas de seguridad, no la cambie a no ser que sepa lo que está haciendo.
cgi.rfc2616_headers
int
Le indica a PHP qué tipo de encabezados usar cuando envía el código de respuesta HTTP. Si está establecida a 0, PHP envía una cabecera "Status:" » RFC 3875 la cual es admitida por Apache y otros servidores web. Cuando esta opción está establecida a 1, PHP enviará encabezados compatibles con la » RFC 2616.
Si esta opción está habiltada, y está ejecutándose PHP en un entorno CGI (p.ej. PHP-FPM) no se deberían usar las cabeceras de respuesta de estado HTTP estilo estándar RFC 2616, se debería usar en su lugar sus equivalentes RFC 3875, p.ej., en lugar de header("HTTP/1.0 404 Not found"); se debería usar header("Status: 404 Not Found");
Déjelo establecido a 0 a menos que sepa lo que está haciendo.
fastcgi.impersonate
string
FastCGI bajo IIS (en SO basados en WINNT) admite la capacidad de imitar tokens de seguridad del cliente que llama. Esto permite a IIS definir el contexto de seguridad en el que la petición se ejecuta. mod_fastgci bajo Apache actualmente no admite esta característica (17/03/2002). Establézcalo a 1 si usa IIS. El valor predeterminado es cero.
fastcgi.logging
bool
Activa la identificación de la SAPI cuando se usa FastCGI. El valor predeterminado es habilitar la identificación.
Nombre | Por defecto | Cambiable | Historial de cambios |
---|---|---|---|
file_uploads | "1" | PHP_INI_SYSTEM | |
upload_tmp_dir | NULL | PHP_INI_SYSTEM | |
max_input_nesting_level | 64 | PHP_INI_PERDIR | |
max_input_vars | 1000 | PHP_INI_PERDIR | |
upload_max_filesize | "2M" | PHP_INI_PERDIR | |
max_file_uploads | 20 | PHP_INI_SYSTEM |
He aquí una breve explicación de las directivas de configuración.
file_uploads
bool
Si permitir o no la subida de ficheros mediante HTTP. Véanse también las directivas upload_max_filesize, upload_tmp_dir, y post_max_size.
upload_tmp_dir
string
El directorio temporal usado para almacenar ficheros durante el proceso de subida. Es necesario tener permisos de escritura para el usuario que está ejecutando PHP. Si no está especificado, PHP usará el predeterminado del sistema.
Si el directorio especificado no tiene permisos de escritura, PHP recurrirá al directorio temporal predeterminado del sistema. Si la directiva open_basedir está activada, al directorio predeterminado del sistema se le ha de permitir la subida de ficheros para que funcione.
upload_max_filesize
int
El tamaño máximo de un fichero subido.
Cuando se usa un integer, el valor del mismo es medido en bytes. También se puede usar la notación reducida, tal como se describe en esta FAQ.max_file_uploads
int
El número máximo de ficheros a subir permitidos de forma simultánea. Los campos de subida de ficheros dejados en blanco en el momento del envío no cuentan en este límite.
Nombre | Por defecto | Cambiable | Historial de cambios |
---|---|---|---|
sql.safe_mode | "0" | PHP_INI_SYSTEM | Eliminado en PHP 7.2.0 |
He aquí una breve explicación de las directivas de configuración.
sql.safe_mode
bool
Si está activado, las funciones de conexión a bases de datos que especifiquen valores predeterminados emplearán dichos valores en lugar cualquier argumento proporcionado por el usuario. Para los detalles de los valores predeterminados, veáse la documentación de las funciones de conexión relevantes.
Esta característica ha sido ELIMINADA en PHP 7.2.0.
Nombre | Por defecto | Cambiable | Historial de cambios |
---|---|---|---|
windows.show_crt_warning | "0" | PHP_INI_ALL |
He aquí una breve explicación de las directivas de configuración.
windows_show_crt_warning
bool
Esta directiva muestra las advertencias CRT de Windows cuando está establecida.
https://haydenjames.io/understanding-php-memory_limit/ explains the memory_limit setting nicely.
Note regarding the upload_tmp_dir setting and UNC Paths:
When using PHP on Windows OS and IIS FastCGI, if you need to use a UNC path to a folder on a network drive for the upload_tmp_dir setting then you must use three \ characters at the front of the UNC path.
Windows and PHP use the first slash as an escape character, so if you only use two slashes then it passes a UNC path with just one backslash. That is not valid for UNC paths and you many experience problems when uploading files, such as errors saying that "PHP is missing a temporary folder".
Correct:
upload_tmp_dir = "\\\path\to\your\folder"
Incorrect:
upload_tmp_dir = "\\path\to\your\folder"
This might help in case someone happens to maintain old applications with a charset other than utf-8.
According to the docs, you can override the default charset if you use `header()`.
Suppose php.ini sets the default_charset to "UTF-8", but you need a legacy charset, like ISO-8859-1.
Still,
<?php header('Content-Type: text/html; Charset=ISO-8859-1'); ?>
would not override the charset, just add it as well and the result
was a response header like (note the two charsets):
Content-Type:"text/html; Charset=ISO-8859-1;charset=UTF-8"
I found it strange the default one as `charset` with a lowercase `c`
as opposed to my custom charset with an uppercase `C`.
What solved was to _override_ the charset using all lowercase letters
as well for the word “charset”:
<?php header('content-type: text/html; charset=ISO-8859-1'); ?>
Then, the double charset from the response headers disappeared, and only the single, custom charset remained.
Be careful while using auto_prepend_file.
When the custom exception handler, set by set_exception_handler(), handles an uncaught exception, it interrupts the execution of every script.
If the script with the unhandled exception has been automatically prepended or included by an automatically prepended script, however, the main script will continue running anyway.
This could cause several issues: when we think that throwing an exception would automatically interrupt the current application, a whole chunk of code is going to run anyway.
I had a problem with 'open_basedir =' string in php.ini. This string was writtren in VirtualHost Directory directive of Apache2 and successfully rewrote the same php.ini setting! It happened with VestaCP, but I think, it's a common way. Goog luck!
It appears that if you use both the 'include_path' directives and 'open_basedir', that file searches will hit the include path *first*, before local files. But if 'open_basedir' is not in use, then local files are found first. For example, suppose you have code in '/var/www/myfile.php' which does:
<?php
require_once('config.php');
?>
Further, assume that there is a local file '/var/www/config.php', and there is also a file '/var/local/php/config.php'.
Next, if your php.ini has:
include_path = /var/local/php/
Normally, this would look for '/var/www/config.php' first, and if not found, then it would try '/var/local/php/config.php'.
But if you also have this in php.ini:
open_basedir = /var/www/:/var/local/php/
Then the require would reverse the order of the search, and load '/var/local/php/config.php', even when the local 'config.php' file exists.
Furthermore, if include_path contains directories not in open_basedir, you can end up with a fatal error. For example, change the directive to:
open_basedir = /var/www/:/var/local/includes/php/
Now the require will first find '/var/local/php/config.php' from the include_path, try to include it, but be unable to because of the open_basedir restrictions.
"If the size of post data is greater than post_max_size..."
It seems that a more elegant way is comparison between post_max_size and $_SERVER['CONTENT_LENGTH']. Please note that the latter includes not only size of uploaded file plus post data but also multipart sequences. Leo
If you use Microsoft IIS Windows and want to use open_basedir restrictions with multiple dirs you have to set them into single quotes in the main config xml file of IIS (C:\Windows\System32\inetsrv\config\applicationHost.config). Works fine in IIS 10.
Multiple files with single quotes and ; for windows:
"C:\php\php-cgi.exe|-d open_basedir='C:\Windows\Temp\;D:\mywebsite1\'"
Only one dir works fine without single quotes:
"C:\php\php-cgi.exe|-d open_basedir=D:\mywebsite1\"
In my main config xml file of IIS there are 2 nodes to set per website and the definitions have to be equal:
configuration\Location\system.webServer\handlers\add
configuration\system.webServer\fastCgi