https://haydenjames.io/understanding-php-memory_limit/ 很好地解释了memorylimit设置。
注意 以下为:
此处列出的默认值用于以下情况 php.ini公司 未加载; 生产和发展的价值 php.ini公司 可能会有所不同。
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
短开标记
注意 以下为:
该指令不影响速记
<?= ,始终可用。
精度
-1
序列化精度
-1
曝光_马力
disable_functions(禁用函数)
禁用类
zend.断言
1
0
-1
注意 以下为:
如果流程以生产模式启动, zend.断言 无法在运行时更改,因为没有生成断言的代码。
如果在开发模式下启动过程, zend.断言 无法设置为
-1 在运行时。
zend.exception_string参数最大值
"0"
"1000000"
硬超时
致命错误:第0行未知中超过(终止)30+2秒的最大执行时间
zend.exception_ignore_args
zend.多字节
zend.script_编码
zend.detect_unicode
zend.signal_check(信号检查)
退出超时
|
内存限制
|
|
||
|
注意 以下为:
使用 open_base目录 将 使残废 realpath缓存。
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
参数分离器输出
参数分隔符输入
注意 以下为:
此指令中的每个字符都被视为分隔符!
variables_order(变量_顺序)
注意 以下为:
的内容和顺序 $请求 也是 受此指令的影响。
请求订单
自动全局jit
寄存器argc_argv
启用post_data_reading
最大后尺寸
最大后尺寸
<form action=“edit.php?processed=1”>
注意 以下为:
PHP允许字节值的快捷方式,包括K(千)、M(兆) 和G(千兆)。 如果您 使用其中任何一种。 注意不要超过32位有符号整数 限制(如果您使用32位版本),因为它会导致您的脚本 失败。
|
|
|
自动重复文件
自动添加文件
注意 以下为: 如果脚本终止于 退出() , 自动附加遗嘱 不 发生。
默认时间类型
默认字符集
输入编码(_E)
输出编码
内部编码
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
|||
|
包含路径(_P)
include_path=“.:/php/includes”
include_path=“.;c:\php\includes”
注意 以下为:
ENV公司 变量也可以在.ini文件中访问。 因此,可以使用以下命令引用主目录
${登录} 和
${用户} .
环境变量在服务器API之间可能会有所不同,因为这些环境 可能会有所不同。
include_path=“.:${USER}/pear/php”
open_base目录
注意 以下为:
open_basedir可以在运行时拧紧。 这意味着 如果open_basedir设置为
/网址:www/ 在里面 php.ini公司 脚本可以将配置严格到
/网址:www/tmp/ 在运行时使用 ini_set() 。列出多个目录时 可以使用
路径_分离器 作为分隔符的常量 无论操作系统如何。
注意 以下为:
使用open_basedir将设置 实路径缓存大小 到
0 因此 使残废 realpath缓存。
doc_root
用户_ ini.cache_ttl
用户输入文件名
用户目录(_D)
扩展目录
延伸
zend_扩展
cgi.check_shebang_line公司
cgi.discard_p路径
cgi.fix_pathinfo文件
cgi.力直接
注意 以下为:
Windows用户:使用IIS时,此选项 必须 对于OmniHTTPD或Xitami,同样适用。
cgi.nph
cgi.重定向状态
注意 以下为:
设置此变量 可以 导致安全问题, 先知道你在做什么 .
cgi.rfc2616_标题
fastcgi.模拟
fastcgi.测井
|
|||
|
|||
|
|||
|
|||
|
|||
|
|
sql.safe_模式
|
windows.show_crt_警告
使用auto_prepend_file时要小心。
当set_exception_handler()设置的自定义异常处理程序处理未捕获的异常时,它会中断每个脚本的执行。
但是,如果带有未处理异常的脚本已自动添加前缀或包含在自动添加前缀的脚本中,则主脚本仍将继续运行。
这可能会导致几个问题:当我们认为抛出异常会自动中断当前应用程序时,整个代码块都会运行。
关于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”
当upload_max_filesize指令设置为小于文件大小时,PHP不会捕获文件大小。 例如,我想向用户发送一条消息,告诉用户该文件已超出某个应用程序允许的上载大小,但是upload_max_filesize指令不允许这样做。如果我不想允许上载大于2MB的文件,但upload_max_filesice指令设置为10M, 如果用户发送15MB文件,则不会显示消息,因为$_FILES['arquivo']['size']等于0。 要显示消息,我必须增加upload_max_filesize,但是,这表示存在安全缺陷。 另外,我应该将upload_max_filesize增加多少到无穷大?
我不知道用户要上传的文件的大小。
例子:
$file=$_FILES['file'];
开关($file){
案例($file['size']>(2097152):
echo“此文件超过2MB!”;
断裂;
例如,在upload_max_filesize设置为10M的情况下,如果用户上传一个15M的文件,PHP什么也不做(不显示消息),因为$arquivo['size']是int(0)。
如果不是这样,同样的事情也会发生。
也许我不知道如何编码,但我试过几种方法。
这可能有助于防止有人使用utf-8以外的字符集维护旧应用程序。
根据文档,如果使用`header()`,则可以覆盖默认字符集。
假设php.ini将default_charset设置为“UTF-8”,但您需要一个遗留字符集,如ISO-8859-1。
尽管如此,
<? php标头 ( '内容类型:text/html; 字符集=ISO-8859-1' ); ?>
不会覆盖字符集,只需添加它和结果
是这样的响应头(注意两个字符集):
内容类型:“text/html;Charset=ISO-8859-1;Charset=UTF-8”
我觉得很奇怪,默认的字符集是小写的`c`
而不是使用大写字母“C”的自定义字符集。
解决的办法是使用所有小写字母覆盖字符集
对于单词“charset”:
<? php标头 ( '内容类型:text/html; charset=ISO-8859-1' ); ?>
然后,响应头中的双字符集消失了,只剩下单个自定义字符集。
“如果发布数据的大小大于post_max_size…”
似乎一种更优雅的方式是在post_max_size和$_SERVER['CONTENT_LENGTH']之间进行比较。 请注意,后者不仅包括上传文件的大小和发布数据,还包括多部分序列。 狮子座
如果您同时使用“include_path”指令和“open_basedir”,则文件搜索将在本地文件之前先到达include路径*。 但如果未使用“open_basedir”,则首先会找到本地文件。 例如,假设您在“/var/www/myfile.php”中有代码,它可以:
<? php(电话)
要求一次(_O)( '配置.php' );
?>
此外,假设有一个本地文件“/var/www/config.php”,还有一个文件“/war/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的限制,无法包含它。
我在php.ini中遇到了“open_basedir=”字符串问题。 此字符串是在Apache2的VirtualHost Directory指令中写入的,并成功重写了相同的php.ini设置! 这发生在维斯塔普身上,但我认为,这是一种常见的方式。 祝你好运!
如果使用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文件中,每个网站有两个要设置的节点,定义必须相等:
配置\位置\系统.webServer\处理程序\add
configuration\system.webServer\fastCgi