核心 php.ini 指令说明

此列表包含您可以设置以配置 PHP 设置的核心 php.ini 指令。扩展处理的指令在相应的扩展文档页面中列出并详细说明;例如,有关会话指令的信息可以在 会话页面 中找到。

注意:

此处列出的默认值是在未加载 php.ini 时使用的;生产和开发 php.ini 的值可能会有所不同。

语言选项

语言和杂项配置选项
名称 默认值 可更改 变更日志
short_open_tag "1" INI_PERDIR  
precision "14" INI_ALL  
serialize_precision "-1" INI_ALL 在 PHP 7.1.0 之前,默认值为 17。
disable_functions "" **INI_SYSTEM** 仅此一项  
disable_classes "" php.ini 仅此一项  
exit_on_timeout "" INI_ALL  
expose_php "1" php.ini 仅此一项  
hard_timeout "2" INI_SYSTEM 从 PHP 7.1.0 开始可用。
zend.exception_ignore_args "0" INI_ALL 从 PHP 7.4.0 开始可用
zend.multibyte "0" INI_ALL  
zend.script_encoding NULL INI_ALL  
zend.detect_unicode NULL INI_ALL  
zend.signal_check "0" INI_SYSTEM  
zend.assertions "1" **INI_ALL** 带有限制  
zend.exception_string_param_max_len "15" INI_ALL 从 PHP 8.0.0 开始可用。

以下是对配置指令的简要说明。

short_open_tag bool

告诉 PHP 是否允许 PHP 开启标签的简短形式 (<? ?>)。如果您想将 PHP 与 XML 结合使用,您可以禁用此选项以使用 <?xml ?> 内联。否则,您可以使用 PHP 打印它,例如:<?php echo '<?xml version="1.0"?>'; ?>。此外,如果禁用,您必须使用 PHP 开启标签的长形式 (<?php ?>)。

注意:

此指令不影响简写形式 <?=,它始终可用。

precision int
浮点数显示的有效位数。-1 表示将使用改进的算法来对这些数字进行舍入。
serialize_precision int
序列化浮点数时存储的有效位数。-1 表示将使用改进的算法来对这些数字进行舍入。
expose_php bool

向世界公开 PHP 已安装在服务器上,这包括 HTTP 标头中的 PHP 版本(例如,X-Powered-By: PHP/5.3.7)。

disable_functions string
此指令允许禁用某些函数。它接收一个以逗号分隔的函数名称列表。从 PHP 8.0.0 开始,禁用函数会删除其定义,允许用户空间重新定义它。在 PHP 8.0.0 之前,禁用函数只会阻止调用该函数。 只能使用此指令禁用 内部函数用户定义函数 不会受到影响。 此指令必须在 php.ini 中设置。它不能在 httpd.conf 中设置。
disable_classes string

此指令允许禁用某些类。它接收一个以逗号分隔的类名列表。禁用类只会阻止实例化该类。

只能使用此指令禁用内部类。用户定义的类不会受到影响。

此指令必须在 php.ini 中设置。它不能在 httpd.conf 中设置。
zend.assertions int
当设置为 1 时,将生成断言代码并执行(开发模式)。当设置为 0 时,将生成断言代码,但它将在运行时跳过(不会执行)。当设置为 -1 时,不会生成断言代码,使断言零成本(生产模式)。

注意:

如果进程在生产模式下启动,则 zend.assertions 无法在运行时更改,因为断言代码没有生成。

如果进程在开发模式下启动,则 zend.assertions 无法在运行时设置为 -1

zend.exception_string_param_max_len int
字符串化堆栈跟踪中字符串函数参数的最大长度。必须介于 "0""1000000" 之间。
hard_timeout int

max_execution_time 中设置的超时时间已到时,PHP 运行时将优雅地拆除资源。如果在此过程中出现卡住的情况,硬超时将按设置的秒数计时。当达到硬超时时,PHP 将不正常退出。当设置为 0 时,硬超时将永远不会激活。

当 PHP 从硬超时停止时,它将看起来像这样

Fatal error: Maximum execution time of 30+2 seconds exceeded (terminated) in Unknown on line 0

zend.exception_ignore_args bool

从异常生成的堆栈跟踪中排除参数。

zend.multibyte bool

启用以多字节编码解析源文件。启用 zend.multibyte 是使用包含多字节字符串数据中特殊字符的字符编码(如 SJIS、BIG5 等)所必需的。UTF-8、EUC 等 ISO-8859-1 兼容编码不需要此选项。

启用 zend.multibyte 要求 mbstring 扩展可用。

zend.script_encoding string

除非在脚本顶部出现 declare(encoding=...) 指令,否则将使用此值。当使用 ISO-8859-1 不兼容编码时,必须使用 zend.multibyte 和 zend.script_encoding。

文字字符串将从 zend.script_encoding 转换为 mbstring.internal_encoding,就像调用了 mb_convert_encoding() 一样。

zend.detect_unicode bool

检查 BOM(字节顺序标记)并查看文件是否包含有效的多字节字符。此检测在处理 __halt_compiler() 之前执行。仅在 Zend 多字节模式下可用。

zend.signal_check bool

检查关闭时是否替换了信号处理程序。

exit_on_timeout bool

这是一个 Apache1 mod_php 仅有的指令,如果 PHP 执行超时,它会强制 Apache 子进程退出。这种超时会导致 Apache1 中出现内部 longjmp() 调用,这会使某些扩展处于不一致状态。通过终止进程,任何未决的锁或内存都将被清理。

资源限制

资源限制
名称 默认值 可更改 变更日志
memory_limit "128M" INI_ALL  

以下是对配置指令的简要说明。

memory_limit int

这将设置脚本允许分配的最大内存量(以字节为单位)。这有助于防止编写不好的脚本占用服务器上所有可用的内存。请注意,要取消内存限制,请将此指令设置为 -1

当使用 int 时,值为字节。也可以使用 此常见问题解答 中描述的简写符号。

另见:max_execution_time

性能调优

性能调优
名称 默认值 可更改 变更日志
realpath_cache_size "4M" INI_SYSTEM 在 PHP 7.0.16 和 7.1.2 之前,默认值为 "16K"
realpath_cache_ttl "120" INI_SYSTEM  

注意:

使用 open_basedir禁用 realpath 缓存。

以下是对配置指令的简要说明。

realpath_cache_size int

确定 PHP 使用的 realpath 缓存的大小。在 PHP 打开许多文件的系统上,应增加此值以反映所执行的文件操作的数量。

该大小表示存储在路径字符串中的总字节数,加上与缓存条目关联的数据的大小。这意味着为了在缓存中存储更长的路径,缓存大小必须更大。此值不直接控制可以缓存的不同路径的数量。

缓存条目数据所需的大小是系统相关的。

realpath_cache_ttl int

缓存给定文件或目录的 realpath 信息的持续时间(以秒为单位)。对于文件很少更改的系统,请考虑增加该值。

数据处理

数据处理配置选项
名称 默认值 可更改 变更日志
arg_separator.output "&" INI_ALL  
arg_separator.input "&" INI_PERDIR  
variables_order "EGPCS" INI_PERDIR  
request_order "" INI_PERDIR  
auto_globals_jit "1" INI_PERDIR  
register_argc_argv "1" INI_PERDIR  
enable_post_data_reading "1" INI_PERDIR  
post_max_size "8M" INI_PERDIR  
auto_prepend_file NULL INI_PERDIR  
auto_append_file NULL INI_PERDIR  
default_mimetype "text/html" INI_ALL  
default_charset "UTF-8" INI_ALL  
input_encoding "" INI_ALL  
output_encoding "" INI_ALL  
internal_encoding "" INI_ALL  

以下是对配置指令的简要说明。

arg_separator.output string

PHP 生成的 URL 中用于分隔参数的分隔符。

arg_separator.input string

PHP 用于将输入 URL 解析为变量的分隔符列表。

注意:

此指令中的每个字符都被视为分隔符!

variables_order string

设置 EGPCS (Environment, Get, Post, Cookie 和 Server) 变量解析的顺序。例如,如果 variables_order 设置为 "SP",那么 PHP 将创建 超全局变量 $_SERVER$_POST,但不会创建 $_ENV$_GET$_COOKIE。设置为 "" 表示不会设置任何 超全局变量

警告

在 CGI 和 FastCGI SAPIs 中,$_SERVER 也由环境中的值填充;无论 E 在此指令中的其他位置放置在哪里,S 始终等效于 ES

注意:

$_REQUEST 的内容和顺序也会受到此指令的影响。

request_order string

此指令描述 PHP 将 GET、POST 和 Cookie 变量注册到 _REQUEST 数组的顺序。注册是从左到右进行的,较新的值会覆盖较旧的值。

如果未设置此指令,则使用 variables_order 作为 $_REQUEST 的内容。

请注意,默认的 php.ini 文件不包含用于 cookie 的 'C',这是出于安全考虑。

auto_globals_jit bool

启用后,SERVER、REQUEST 和 ENV 变量将在首次使用时创建(即时),而不是在脚本启动时创建。如果这些变量在脚本中未使用,则启用此指令将提高性能。

警告

在编译时会检查 SERVER、REQUEST 和 ENV 变量的使用情况,因此通过例如 变量变量 使用它们不会导致它们初始化。

register_argc_argv bool
告诉 PHP 是否声明 argv 和 argc 变量(它们将包含 GET 信息)。 另请参阅 命令行
enable_post_data_reading bool
禁用此选项会导致 $_POST$_FILES 被填充。然后,读取 postdata 的唯一方法是通过 php://input 流包装器。这对于代理请求或以内存高效的方式处理 POST 数据很有用。
post_max_size int
设置允许的 POST 数据的最大大小。此设置也会影响文件上传。要上传大文件,此值必须大于 upload_max_filesize 一般来说,memory_limit 应该大于 post_max_size 当使用 int 时,该值以字节为单位。也可以使用 此常见问题解答 中所述的简写符号。 如果 POST 数据的大小大于 post_max_size,则 $_POST$_FILES 超全局变量 为空。可以通过多种方式跟踪此问题,例如,将 $_GET 变量传递到处理数据的脚本,例如 <form action="edit.php?processed=1">,然后检查 $_GET['processed'] 是否已设置。

注意:

PHP 允许使用字节值的快捷方式,包括 K(千字节)、M(兆字节)和 G(吉字节)。如果您使用这些快捷方式,PHP 会自动进行转换。请注意,不要超过 32 位有符号整数限制(如果您使用的是 32 位版本),因为这会导致您的脚本失败。

post_max_size 的变更日志
版本 说明
5.3.4 当内容类型为 application/x-www-form-urlencoded 或未在 PHP 中注册时,post_max_size = 0 不会禁用限制。
5.3.2 , 5.2.12 通过将 post_max_size 设置为 0 来允许无限的 POST 大小。

auto_prepend_file string

指定在主文件之前自动解析的文件的名称。该文件就像使用 require 函数调用一样被包含,因此使用 include_path

特殊值 none 禁用自动预置。

auto_append_file string

指定在主文件之后自动解析的文件的名称。该文件就像使用 require 函数调用一样被包含,因此使用 include_path

特殊值 none 禁用自动追加。

注意: 如果脚本使用 exit() 终止,则不会发生自动追加。

default_mimetype string

默认情况下,PHP 将使用 Content-Type 标头输出媒体类型。要禁用此功能,只需将其设置为空即可。

PHP 的内置默认媒体类型设置为 text/html。

default_charset string

"UTF-8" 是默认值,其值用作 htmlentities()html_entity_decode()htmlspecialchars() 的默认字符编码,前提是省略了 encoding 参数。 default_charset 的值也将用于设置 iconv 函数的默认字符集,前提是 iconv.input_encodingiconv.output_encodingiconv.internal_encoding 配置选项未设置,以及用于 mbstring 函数,前提是 mbstring.http_input mbstring.http_output mbstring.internal_encoding 配置选项未设置。

所有版本的 PHP 都将使用此值作为 PHP 发送的默认 Content-Type 标头中的字符集,前提是该标头没有被对 header() 的调用覆盖。

default_charset 设置为空值是不推荐的。

input_encoding string

此设置用于多字节模块,如 mbstring 和 iconv。默认值为 empty。

output_encoding string

此设置用于多字节模块,如 mbstring 和 iconv。默认值为 empty。

internal_encoding string

此设置用于多字节模块,如 mbstring 和 iconv。默认值为 empty。如果为空,则使用 default_charset

路径和目录

路径和目录配置选项
名称 默认值 可更改 变更日志
include_path ".;/path/to/php/pear" INI_ALL  
open_basedir NULL INI_ALL  
doc_root NULL INI_SYSTEM  
user_dir NULL INI_SYSTEM  
user_ini.cache_ttl "300" INI_SYSTEM  
user_ini.filename ".user.ini" INI_SYSTEM  
extension_dir "/path/to/php" INI_SYSTEM  
extension NULL php.ini 仅此一项  
zend_extension NULL php.ini 仅此一项  
cgi.check_shebang_line "1" INI_SYSTEM  
cgi.discard_path "0" INI_SYSTEM  
cgi.fix_pathinfo "1" INI_SYSTEM  
cgi.force_redirect "1" INI_SYSTEM  
cgi.nph "0" INI_SYSTEM  
cgi.redirect_status_env NULL INI_SYSTEM  
cgi.rfc2616_headers "0" INI_ALL  
fastcgi.impersonate "0" INI_SYSTEM  
fastcgi.logging "1" INI_SYSTEM  

以下是对配置指令的简要说明。

include_path string

指定 requireincludefopen()file()readfile()file_get_contents() 函数查找文件的目录列表。格式类似于系统的 PATH 环境变量:在 Unix 中用冒号分隔,在 Windows 中用分号分隔的目录列表。

PHP 在查找要包含的文件时会单独考虑 include path 中的每个条目。它将检查第一个路径,如果找不到,则检查下一个路径,直到找到要包含的文件,或者返回 E_WARNINGE_ERROR。您可以使用 set_include_path() 在运行时修改或设置您的 include path。

示例 #1 Unix include_path

include_path=".:/php/includes"

示例 #2 Windows include_path

include_path=".;c:\php\includes"

在 include path 中使用 . 允许相对包含,因为它表示当前目录。但是,明确使用 include './file' 比让 PHP 始终检查每个包含的当前目录效率更高。

注意:

ENV 变量也可以在 .ini 文件中访问。因此可以使用 ${LOGIN}${USER} 来引用主目录。

环境变量可能在不同的服务器 API 之间有所不同,因为这些环境可能不同。

示例 #3 使用 ${USER} 环境变量的 Unix include_path

include_path = ".:${USER}/pear/php"

open_basedir string

将 PHP 可以访问的文件限制为指定的目录树,包括文件本身。

当脚本尝试访问文件系统时,例如使用 includefopen(),会检查文件的路径。当文件位于指定的目录树之外时,PHP 将拒绝访问它。所有符号链接都会被解析,因此无法使用符号链接来绕过此限制。如果文件不存在,则符号链接无法解析,并且文件名将与(已解析的)open_basedir 进行比较。

open_basedir 影响的不仅仅是文件系统函数;例如,如果 MySQL 配置为使用 mysqlnd 驱动程序,则 LOAD DATA INFILE 会受到 open_basedir 的影响。PHP 的许多扩展功能都以这种方式使用 open_basedir

特殊值 . 表示脚本的工作目录将用作基目录。但是,这有点危险,因为脚本的工作目录可以使用 chdir() 轻松更改。

httpd.conf 中,open_basedir 可以关闭(例如,对于某些虚拟主机)与其他任何配置指令相同的方式,使用“php_admin_value open_basedir none”。

在 Windows 上,用分号分隔目录。在所有其他系统上,用冒号分隔目录。作为 Apache 模块,现在会自动继承来自父目录的 open_basedir 路径。

使用 open_basedir 指定的限制是目录名,而不是前缀。

默认情况下允许打开所有文件。

注意:

open_basedir 可以在运行时收紧。这意味着如果在 php.ini 中将 open_basedir 设置为 /www/,则脚本可以使用 ini_set() 在运行时将配置收紧到 /www/tmp/。在列出多个目录时,无论操作系统是什么,都可以使用 PATH_SEPARATOR 常量作为分隔符。

注意:

使用 open_basedir 将 realpath_cache_size 设置为 0,从而禁用 realpath 缓存。

注意

open_basedir 只是一个额外的安全网,它绝不全面,因此在需要安全时不能依赖它。

doc_root string

PHP 在服务器上的“根目录”。仅在非空时使用。如果 PHP 未编译 FORCE_REDIRECT,则应该在任何 Web 服务器(IIS 除外)下以 CGI 运行 PHP 时设置 doc_root。另一种方法是使用下面的 cgi.force_redirect 配置。

user_ini.cache_ttl int

user_ini.filename string

user_dir string

用户主目录中用于 PHP 文件的目录的基名,例如 public_html

extension_dir string

PHP 应该在哪个目录中查找可动态加载的扩展。建议指定绝对路径。另请参见:enable_dldl()

extension string

PHP 启动时要加载哪些可动态加载的扩展。

zend_extension string

PHP 启动时要加载的可动态加载的 Zend 扩展(例如 XDebug)的名称。

cgi.check_shebang_line bool

控制 CGI PHP 是否检查运行脚本顶部的以 #!(shebang)开头的行。如果脚本支持作为独立脚本和通过 PHP CGI 运行,则可能需要此行。如果启用此指令,PHP 在 CGI 模式下会跳过此行并忽略其内容。

cgi.discard_path bool

如果启用此选项,则 PHP CGI 二进制文件可以安全地放置在 Web 树之外,并且用户将无法绕过 .htaccess 安全性。

cgi.fix_pathinfo bool

CGI 提供真实 PATH_INFO/ PATH_TRANSLATED 支持。PHP 之前的行为是将 PATH_TRANSLATED 设置为 SCRIPT_FILENAME,并且不理解 PATH_INFO 是什么。有关 PATH_INFO 的更多信息,请参阅 CGI 规范。将此设置为 1 将导致 PHP CGI 修复其路径以符合规范。设置为零会导致 PHP 像以前一样工作。默认情况下它处于启用状态。您应该修复脚本以使用 SCRIPT_FILENAME 而不是 PATH_TRANSLATED

cgi.force_redirect bool

cgi.force_redirect 对于在大多数 Web 服务器下以 CGI 运行 PHP 来说是必要的。如果未定义,PHP 默认情况下会启用它。您可以自担风险将其关闭。

注意:

Windows 用户:使用 IIS 时,此选项必须关闭。对于 OmniHTTPD 或 Xitami,同样适用。

cgi.nph bool

如果启用 cgi.nph,它将强制 cgi 在每次请求时都发送 Status: 200。

cgi.redirect_status_env string

如果启用了 cgi.force_redirect,并且您没有在 Apache 或 Netscape (iPlanet) Web 服务器下运行,则可能需要设置一个环境变量名,PHP 将查找该变量以了解它可以继续执行。

注意:

设置此变量可能会导致安全问题,请首先了解您在做什么

cgi.rfc2616_headers int

告诉 PHP 在发送 HTTP 响应代码时使用哪种类型的标题。如果它设置为 0,则 PHP 会发送一个 » RFC 3875 "Status:" 标头,该标头受 Apache 和其他 Web 服务器支持。当此选项设置为 1 时,PHP 将发送符合 » RFC 2616 的标题。

如果启用了此选项,并且您在 CGI 环境(例如 PHP-FPM)中运行 PHP,则不应使用标准 RFC 2616 样式的 HTTP 状态响应标头,而应使用其 RFC 3875 等效项,例如,您不应使用 header("HTTP/1.0 404 Not found");,而应使用 header("Status: 404 Not Found");。

除非您知道自己在做什么,否则请将其保留为 0。

fastcgi.impersonate string

IIS(在基于 WINNT 的操作系统上)下的 FastCGI 支持模拟调用客户端的安全令牌的能力。这允许 IIS 定义请求运行的安全上下文。Apache 下的 mod_fastcgi 目前不支持此功能 (03/17/2002) 如果在 IIS 下运行,则设置为 1。默认为零。

fastcgi.logging bool

在使用 FastCGI 时启用 SAPI 日志记录。默认情况下启用日志记录。

文件上传

文件上传配置选项
名称 默认值 可更改 变更日志
file_uploads "1" INI_SYSTEM  
upload_tmp_dir NULL INI_SYSTEM  
max_input_nesting_level 64 INI_PERDIR  
max_input_vars 1000 INI_PERDIR  
upload_max_filesize "2M" INI_PERDIR  
max_file_uploads 20 INI_PERDIR  

以下是对配置指令的简要说明。

file_uploads bool

是否允许 HTTP 文件上传。另请参见 upload_max_filesizeupload_tmp_dirpost_max_size 指令。

upload_tmp_dir string

用于存储文件上传时的文件的临时目录。必须可由运行 PHP 的用户写入。如果未指定,PHP 将使用系统的默认值。

如果这里指定的目录不可写,则 PHP 将回退到系统默认的临时目录。如果 open_basedir 处于启用状态,则系统默认目录必须允许上传才能成功。

upload_max_filesize int

上传文件的最大大小。

post_max_size 必须大于此值。

当使用 int 时,值为字节。也可以使用 此常见问题解答 中描述的简写符号。
max_file_uploads int

允许同时上传的文件的最大数量。提交时留空的上传字段不计入此限制。

通用 SQL

通用 SQL 配置选项
名称 默认值 可更改 变更日志
sql.safe_mode "0" INI_SYSTEM 从 PHP 7.2.0 开始删除

以下是对配置指令的简要说明。

sql.safe_mode bool

如果启用,则指定默认值的数据库连接函数将使用这些值来代替任何用户提供的参数。有关默认值的详细信息,请参阅相关连接函数的文档。

警告

此功能从 PHP 7.2.0 开始已被删除

Windows 特定

Windows 特定配置选项
名称 默认值 可更改 变更日志
windows.show_crt_warning "0" INI_ALL  

以下是对配置指令的简要说明。

windows.show_crt_warning bool

启用此指令将显示 Windows CRT 警告。

添加注释

用户贡献的注释 9 个注释

10
luisdev
4 年前
https://haydenjames.io/understanding-php-memory_limit/ 很好地解释了 memory_limit 设置。
5
Simone Pellegatta
3 年前
使用 auto_prepend_file 时要小心。

当由 set_exception_handler() 设置的自定义异常处理程序处理未捕获的异常时,它会中断每个脚本的执行。

但是,如果具有未处理异常的脚本是通过自动预先添加或包含的脚本自动预先添加或包含的,则主脚本将继续运行。

这可能会导致几个问题:当我们认为抛出异常会自动中断当前应用程序时,仍然会运行一大块代码。
3
diamondeagle at webmail dot co dot za
4 年前
关于 upload_tmp_dir 设置和 UNC 路径的说明

在 Windows OS 和 IIS FastCGI 上使用 PHP 时,如果您需要使用 UNC 路径指向网络驱动器上的文件夹作为 upload_tmp_dir 设置,则必须在 UNC 路径的前面使用三个 \ 字符。

Windows 和 PHP 使用第一个斜杠作为转义字符,因此如果您只使用两个斜杠,它将传递一个只有一个反斜杠的 UNC 路径。这对于 UNC 路径无效,您在上传文件时可能会遇到问题,例如出现“PHP 缺少临时文件夹”之类的错误。

正确
upload_tmp_dir = "\\\path\to\your\folder"

错误
upload_tmp_dir = "\\path\to\your\folder"
0
gcb@
2 个月前
如果目录不存在或用户没有访问权限,您会收到一个误导性的错误。

open_basedir 限制生效。文件(/tmp/php_session) 不在允许的路径范围内:/tmp/php_session
-1
andre dot wetter at myelco dot ch
3 年前
如果您使用 Microsoft IIS Windows 并想使用 open_basedir 限制多个目录,您必须在 IIS 的主配置 xml 文件 (C:\Windows\System32\inetsrv\config\applicationHost.config) 中将它们设置到单引号内。在 IIS 10 中正常工作。

使用单引号和;在 Windows 中的多文件
"C:\php\php-cgi.exe|-d open_basedir='C:\Windows\Temp\;D:\mywebsite1\'"

只有一个目录可以正常工作,无需单引号
"C:\php\php-cgi.exe|-d open_basedir=D:\mywebsite1\"

在我的 IIS 主配置 xml 文件中,每个网站有 2 个节点要设置,并且定义必须相同
configuration\Location\system.webServer\handlers\add
configuration\system.webServer\fastCgi
-1
fernandobasso dot br at gmail dot com
7 年前
如果有人碰巧维护着字符集不是 utf-8 的旧应用程序,这可能会有所帮助。

根据文档,如果您使用 `header()`,您可以覆盖默认的字符集。

假设 php.ini 将 default_charset 设置为“UTF-8”,但您需要一个旧的字符集,例如 ISO-8859-1。

不过,

<?php header('Content-Type: text/html; Charset=ISO-8859-1'); ?>

不会覆盖字符集,只会添加它,结果是
一个像这样的响应标头(注意两个字符集)

Content-Type:"text/html; Charset=ISO-8859-1;charset=UTF-8"

我发现默认的 `charset` 使用小写 `c` 很奇怪
与我的自定义字符集使用大写 `C` 相反。

解决方法是使用全小写字母 _覆盖_ 字符集
同样适用于“charset”一词

<?php header('content-type: text/html; charset=ISO-8859-1'); ?>

然后,响应标头中的双字符集消失了,只剩下单个自定义字符集。
-1
leo at korfu dot cz
18 年前
"如果 POST 数据的大小超过 post_max_size..."

似乎更优雅的方法是在 post_max_size 和 $_SERVER['CONTENT_LENGTH'] 之间进行比较。请注意,后者不仅包含上传文件的大小加上 POST 数据的大小,还包含多部分序列。Leo
-4
dougal at gunters dot org
8 年前
似乎,如果您同时使用 'include_path' 指令和 'open_basedir',文件搜索将首先命中 'include_path',然后再命中本地文件。但如果 'open_basedir' 未使用,则会首先找到本地文件。例如,假设您在 '/var/www/myfile.php' 中有代码,它执行以下操作

<?php
require_once('config.php');
?>

此外,假设存在一个本地文件 '/var/www/config.php',并且还存在一个文件 '/var/local/php/config.php'。

接下来,如果您的 php.ini 有

include_path = /var/local/php/

通常,这将首先查找 '/var/www/config.php',如果找不到,则会尝试 '/var/local/php/config.php'。

但是,如果您在 php.ini 中也有以下内容

open_basedir = /var/www/:/var/local/php/

那么 require 将反转搜索顺序,并加载 '/var/local/php/config.php',即使本地 'config.php' 文件存在。

此外,如果 include_path 包含不在 open_basedir 中的目录,您最终可能会遇到致命错误。例如,将指令更改为

open_basedir = /var/www/:/var/local/includes/php/

现在 require 将首先从 include_path 中找到 '/var/local/php/config.php',尝试包含它,但由于 open_basedir 限制而无法包含。
-4
Anton Bannikov
4 年前
我在 php.ini 中遇到了 'open_basedir =' 字符串的问题。该字符串被写入 Apache2 的 VirtualHost Directory 指令中,并成功地重写了相同的 php.ini 设置!这发生在 VestaCP 上,但我认为,这是一种常见的方式。祝你好运!
To Top