Php ini_set ini_get可操作配置参数列表

本文介绍了如何使用PHP内置函数ini_set和ini_get来设置和获取PHP运行环境参数,并提供了详细的参数列表,包括默认值和可修改范围,帮助开发者更好地管理PHP环境。

为了使自己的程序在不同的平台中拥有更好的兼容性,很多时候我们都要获取当前Php的运行环境参数。比如我们常用到的:获取 magic_quotes_gpc状态,来决定当表单提交时我们是否转义(addslashes)数据;设定max_execution_time来延长 程序的执行时间;设定error_reporting使自己的项目在开发与运营阶段切换;设定memory_limit加大内存等等…

ini_set(string varname, string newvalue ) : 设定环境配置的参数

ini_get(string varname) : 获取环境配置的参数

参数列表如下
NameDefaultChangeable
com.allow_dcom"0"PHP_INI_SYSTEM
com.autoregister_typelib"0"PHP_INI_SYSTEM
com.autoregister_verbose"0"PHP_INI_SYSTEM
com.autoregister_casesensitive"1"PHP_INI_SYSTEM
com.typelib_file""PHP_INI_SYSTEM
crack.default_dictionaryNULLPHP_INI_SYSTEM
exif.encode_unicode"ISO-8859-15"PHP_INI_ALL
exif.decode_unicode_motorola"UCS-2BE"PHP_INI_ALL
exif.decode_unicode_intel"UCS-2LE"PHP_INI_ALL
exif.encode_jis""PHP_INI_ALL
exif.decode_jis_motorola"JIS"PHP_INI_ALL
exif.decode_jis_intel"JIS"PHP_INI_ALL
fbsql.allow_persistent"1"PHP_INI_SYSTEM
fbsql.generate_warnings"0"PHP_INI_SYSTEM
fbsql.autocommit"1"PHP_INI_SYSTEM
fbsql.max_persistent"-1"PHP_INI_SYSTEM
fbsql.max_links"128"PHP_INI_SYSTEM
fbsql.max_connections"128"PHP_INI_SYSTEM
fbsql.max_results"128"PHP_INI_SYSTEM
fbsql.batchSize"1000"PHP_INI_SYSTEM
fbsql.default_hostNULLPHP_INI_SYSTEM
fbsql.default_user"_SYSTEM"PHP_INI_SYSTEM
fbsql.default_password""PHP_INI_SYSTEM
fbsql.default_database""PHP_INI_SYSTEM
fbsql.default_database_password""PHP_INI_SYSTEM
hwapi.allow_persistent"0"PHP_INI_SYSTEM
hyperwave.allow_persistent"0"PHP_INI_SYSTEM
hyperwave.default_port"418"PHP_INI_ALL
iconv.input_encodingICONV_INPUT_ENCODINGPHP_INI_ALL
iconv.output_encodingICONV_OUTPUT_ENCODINGPHP_INI_ALL
iconv.internal_encodingICONV_INTERNAL_ENCODINGPHP_INI_ALL
ifx.allow_persistent"1"PHP_INI_SYSTEM
ifx.max_persistent"-1"PHP_INI_SYSTEM
ifx.max_links"-1"PHP_INI_SYSTEM
ifx.default_hostNULLPHP_INI_SYSTEM
ifx.default_userNULLPHP_INI_SYSTEM
ifx.default_passwordNULLPHP_INI_SYSTEM
ifx.blobinfile"1"PHP_INI_ALL
ifx.textasvarchar"0"PHP_INI_ALL
ifx.byteasvarchar"0"PHP_INI_ALL
ifx.charasvarchar"0"PHP_INI_ALL
ifx.nullformat"0"PHP_INI_ALL
ingres.allow_persistent"1"PHP_INI_SYSTEM
ingres.max_persistent"-1"PHP_INI_SYSTEM
ingres.max_links"-1"PHP_INI_SYSTEM
ingres.default_databaseNULLPHP_INI_ALL
ingres.default_userNULLPHP_INI_ALL
ingres.default_passwordNULLPHP_INI_ALL
ibase.allow_persistent"1"PHP_INI_SYSTEM
ibase.max_persistent"-1"PHP_INI_SYSTEM
ibase.max_links"-1"PHP_INI_SYSTEM
ibase.default_userNULLPHP_INI_ALL
ibase.default_passwordNULLPHP_INI_ALL
ibase.timestampformat"%m/%d/%Y%H:%M:%S"PHP_INI_ALL
ibase.dateformat"%m/%d/%Y"PHP_INI_ALL
ibase.timeformat"%H:%M:%S"PHP_INI_ALL
java.class.pathNULLPHP_INI_ALL
java.homeNULLPHP_INI_ALL
java.library.pathNULLPHP_INI_ALL
java.libraryJAVALIBPHP_INI_ALL
java.libraryNULLPHP_INI_ALL
ldap.max_links"-1"PHP_INI_SYSTEM
mbstring.detect_orderNULLPHP_INI_ALL
mbstring.http_inputNULLPHP_INI_ALL
mbstring.http_outputNULLPHP_INI_ALL
mbstring.internal_encodingNULLPHP_INI_ALL
mbstring.substitute_characterNULLPHP_INI_ALL
mbstring.func_overload"0"PHP_INI_SYSTEM
mcrypt.algorithms_dirNULLPHP_INI_ALL
mcrypt.modes_dirNULLPHP_INI_ALL
mime_magic.magicfile"/usr/share/misc/magic.mime"PHP_INI_SYSTEM
mssql.allow_persistent"1"PHP_INI_SYSTEM
mssql.max_persistent"-1"PHP_INI_SYSTEM
mssql.max_links"-1"PHP_INI_SYSTEM
mssql.max_procs"25"PHP_INI_ALL
mssql.min_error_severity"10"PHP_INI_ALL
mssql.min_message_severity"10"PHP_INI_ALL
mssql.compatability_mode"0"PHP_INI_ALL
mssql.connect_timeout"5"PHP_INI_ALL
mssql.timeout"60"PHP_INI_ALL
mssql.textsize"-1"PHP_INI_ALL
mssql.textlimit"-1"PHP_INI_ALL
mssql.batchsize"0"PHP_INI_ALL
mssql.datetimeconvert"1"PHP_INI_ALL
mssql.secure_connection"0"PHP_INI_SYSTEM
mysql.allow_persistent"1"PHP_INI_SYSTEM
mysql.max_persistent"-1"PHP_INI_SYSTEM
mysql.max_links"-1"PHP_INI_SYSTEM
mysql.default_hostNULLPHP_INI_ALL
mysql.default_userNULLPHP_INI_ALL
mysql.default_passwordNULLPHP_INI_ALL
mysql.default_portNULLPHP_INI_ALL
mysql.default_socketNULLPHP_INI_ALL
ncurses.value"42"PHP_INI_ALL
ncurses.string"foobar"PHP_INI_ALL
odbc.allow_persistent"1"PHP_INI_SYSTEM
odbc.max_persistent"-1"PHP_INI_SYSTEM
odbc.max_links"-1"PHP_INI_SYSTEM
odbc.default_dbNULLPHP_INI_ALL
odbc.default_userNULLPHP_INI_ALL
odbc.default_pwNULLPHP_INI_ALL
odbc.defaultlrl"4096"PHP_INI_ALL
odbc.defaultbinmode"1"PHP_INI_ALL
odbc.check_persistent"1"PHP_INI_SYSTEM
pfpro.defaulthost"test.signio.com" 
pfpro.defaulthost"test-payflow.verisign.com" 
pfpro.defaultport"443"PHP_INI_ALL
pfpro.defaulttimeout"30"PHP_INI_ALL
pfpro.proxyaddress""PHP_INI_ALL
pfpro.proxyport""PHP_INI_ALL
pfpro.proxylogon""PHP_INI_ALL
pfpro.proxypassword""PHP_INI_ALL
pgsql.allow_persistent"1"PHP_INI_SYSTEM
pgsql.max_persistent"-1"PHP_INI_SYSTEM
pgsql.max_links"-1"PHP_INI_SYSTEM
pgsql.auto_reset_persistent"0"PHP_INI_SYSTEM
pgsql.ignore_notice"0"PHP_INI_ALL
pgsql.log_notice"0"PHP_INI_ALL
session.save_path"/tmp"PHP_INI_ALL
session.name"PHPSESSID"PHP_INI_ALL
session.save_handler"files"PHP_INI_ALL
session.auto_start"0"PHP_INI_ALL
session.gc_probability"1"PHP_INI_ALL
session.gc_divisor"100"PHP_INI_ALL
session.gc_maxlifetime"1440"PHP_INI_ALL
session.serialize_handler"php"PHP_INI_ALL
session.cookie_lifetime"0"PHP_INI_ALL
session.cookie_path"/"PHP_INI_ALL
session.cookie_domain""PHP_INI_ALL
session.cookie_secure""PHP_INI_ALL
session.use_cookies"1"PHP_INI_ALL
session.use_only_cookies"0"PHP_INI_ALL
session.referer_check""PHP_INI_ALL
session.entropy_file""PHP_INI_ALL
session.entropy_length"0"PHP_INI_ALL
session.cache_limiter"nocache"PHP_INI_ALL
session.cache_expire"180"PHP_INI_ALL
session.use_trans_sid"0"PHP_INI_SYSTEM
PHP_INI_PERDIR
session.encode_sources"globals,track"PHP_INI_ALL
assert.active"1"PHP_INI_ALL
assert.bail"0"PHP_INI_ALL
assert.warning"1"PHP_INI_ALL
assert.callbackNULLPHP_INI_ALL
assert.quiet_eval"0"PHP_INI_ALL
safe_mode_protected_env_varsSAFE_MODE_PROTECTED_ENV_VARSPHP_INI_SYSTEM
safe_mode_allowed_env_varsSAFE_MODE_ALLOWED_ENV_VARSPHP_INI_SYSTEM
url_rewriter.tags"a=href,area=href,
frame=src,
form=fakeentry"
PHP_INI_ALL
sybct.allow_persistent"1"PHP_INI_SYSTEM
sybct.max_persistent"-1"PHP_INI_SYSTEM
sybct.max_links"-1"PHP_INI_SYSTEM
sybct.min_server_severity"10"PHP_INI_ALL
sybct.min_client_severity"10"PHP_INI_ALL
sybct.hostnameNULLPHP_INI_ALL
vpopmail.directory""PHP_INI_ALL
zlib.output_compression"0"PHP_INI_SYSTEM
PHP_INI_PERDIR
zlib.output_compression_level"-1"PHP_INI_ALL
define_syslog_variables"0"PHP_INI_ALL
highlight.bgHL_BG_COLORPHP_INI_ALL
highlight.commentHL_COMMENT_COLORPHP_INI_ALL
highlight.defaultHL_DEFAULT_COLORPHP_INI_ALL
highlight.htmlHL_HTML_COLORPHP_INI_ALL
highlight.keywordHL_KEYWORD_COLORPHP_INI_ALL
highlight.stringHL_StrING_COLORPHP_INI_ALL
allow_call_time_pass_reference"1"PHP_INI_SYSTEM
PHP_INI_PERDIR
asp_tags"0"PHP_INI_SYSTEM
PHP_INI_PERDIR
display_errors"1"PHP_INI_ALL
display_startup_errors"0"PHP_INI_ALL
enable_dl"1"PHP_INI_SYSTEM
expose_php"1"PHP_INI_SYSTEM
html_errors"1"PHP_INI_ALL
xmlrpc_errors"0"PHP_INI_SYSTEM
xmlrpc_error_number"0"PHP_INI_ALL
ignore_user_abort"0"PHP_INI_ALL
implicit_flush"0"PHP_INI_ALL
log_errors"0"PHP_INI_ALL
log_errors_max_len"1024"PHP_INI_ALL
ignore_repeated_errors"0"PHP_INI_ALL
ignore_repeated_source"0"PHP_INI_ALL
magic_quotes_gpc"1"PHP_INI_PERDIR
PHP_INI_SYSTEM
magic_quotes_runtime"0"PHP_INI_ALL
magic_quotes_sybase"0"PHP_INI_ALL
output_buffering"0"PHP_INI_PERDIR
PHP_INI_SYSTEM
output_handlerNULLPHP_INI_PERDIR
PHP_INI_SYSTEM
register_argc_argv"1"PHP_INI_PERDIR
PHP_INI_SYSTEM
register_globals"0"PHP_INI_PERDIR
PHP_INI_SYSTEM
safe_mode"1"PHP_INI_SYSTEM
safe_mode"0"PHP_INI_SYSTEM
safe_mode_include_dirNULLPHP_INI_SYSTEM
safe_mode_gid"0"PHP_INI_SYSTEM
short_open_tagDEFAULT_SHORT_OPEN_TAGPHP_INI_SYSTEM
PHP_INI_PERDIR
sql.safe_mode"0"PHP_INI_SYSTEM
track_errors"0"PHP_INI_ALL
y2k_compliance"0"PHP_INI_ALL
unserialize_callback_funcNULLPHP_INI_ALL
arg_separator.output"&"PHP_INI_ALL
arg_separator.input"&"PHP_INI_SYSTEM
PHP_INI_PERDIR
auto_append_fileNULLPHP_INI_SYSTEM
PHP_INI_PERDIR
auto_prepend_fileNULLPHP_INI_SYSTEM
PHP_INI_PERDIR
doc_rootNULLPHP_INI_SYSTEM
default_charsetSAPI_DEFAULT_CHARSETPHP_INI_ALL
default_mimetypeSAPI_DEFAULT_MIMETYPEPHP_INI_ALL
error_logNULLPHP_INI_ALL
extension_dirPHP_EXTENSION_DIRPHP_INI_SYSTEM
gpc_order"GPC"PHP_INI_ALL
include_pathPHP_INCLUDE_PAthPHP_INI_ALL
max_execution_time"30"PHP_INI_ALL
open_basedirNULLPHP_INI_SYSTEM
safe_mode_exec_dir"1"PHP_INI_SYSTEM
upload_max_filesize"2M"PHP_INI_SYSTEM
PHP_INI_PERDIR
file_uploads"1"PHP_INI_SYSTEM
post_max_size"8M"PHP_INI_SYSTEM
PHP_INI_PERDIR
upload_tmp_dirNULLPHP_INI_SYSTEM
user_dirNULLPHP_INI_SYSTEM
variables_orderNULLPHP_INI_ALL
error_append_stringNULLPHP_INI_ALL
error_prepend_stringNULLPHP_INI_ALL
SMTP"localhost"PHP_INI_ALL
smtp_port25PHP_INI_ALL
browscapNULLPHP_INI_SYSTEM
error_reportingNULLPHP_INI_ALL
memory_limit"8M"PHP_INI_ALL
precision"14"PHP_INI_ALL
sendmail_fromNULLPHP_INI_ALL
sendmail_pathDEFAULT_SENDMAIL_PAthPHP_INI_SYSTEM
disable_classes""php.ini only
disable_functions""php.ini only
allow_url_fopen"1"PHP_INI_ALL
always_populate_raw_post_data"0"PHP_INI_SYSTEM
PHP_INI_PERDIR
xbithack"0"PHP_INI_ALL
engine"1"PHP_INI_ALL
last_modified"0"PHP_INI_ALL
child_terminate"0"PHP_INI_ALL
async_send"0"PHP_INI_ALL

可操作范围见下表:

操作范围
ConstantValueMeaning
PHP_INI_USER1Entry can be set in user scripts
PHP_INI_PERDIR2Entry can be set in php.ini, .htaccess or httpd.conf
PHP_INI_SYSTEM4Entry can be set in php.ini or httpd.conf
PHP_INI_ALL7Entry can be set anywhere

Tags: php, php扫盲

<think>我们正在解决的是:使用PHPExcel时ini_set函数没有效果的解决方案。 根据引用[4]中提到,在程序中设置ini_set('max_execution_time',0)可以修改最大执行时间,但用户反馈ini_set没有效果。 可能的原因及解决方案: 1. 安全模式(safe_mode)限制:在安全模式下,ini_set可能被禁用。但注意,PHP5.4以后安全模式已被移除。如果环境是较新的PHP版本,则不是这个问题。 2. 权限不足:某些ini设置(如memory_limit)可能被设置为PHP_INI_SYSTEM,只能在php.ini或httpd.conf中修改,无法通过ini_set修改。 3. 设置时机:ini_set必须在PHPExcel消耗大量资源之前调用。 4. 配置被覆盖:框架或CMS可能有自己的配置机制,覆盖了ini_set的设置。 5. 函数被禁用:在php.ini中禁用了ini_set函数(通过disable_functions)。 解决方案: 1. 检查ini_set是否被禁用:使用phpinfo()查看disable_functions列表。 2. 尝试在更早的位置调用ini_set(例如在入口文件或控制器最开始部分)。 3. 如果ini_set无效,则考虑直接修改php.ini或使用.htaccess(对于Apache)或用户.ini(对于PHP>=5.3)进行设置。 4. 使用其他方式绕过,例如分块处理数据减少内存占用和执行时间。 具体步骤: 步骤1:检查disable_functions 在代码中输出phpinfo(),查看disable_functions中是否包含ini_set。 步骤2:确认设置位置 将ini_set放在脚本的最开始,确保在加载任何大型库或数据之前。 步骤3:使用.htaccess或用户.ini(如果允许) 对于Apache服务器,在项目根目录的.htaccess文件中添加: php_value memory_limit 512M php_value max_execution_time 300 对于Nginx服务器,不支持.htaccess,需要修改服务器配置或使用php-fpm的配置(例如在pool.d目录下的www.conf中设置php_admin_value)。 步骤4:分块处理数据 如果无法修改配置,则优化代码,减少内存占用。例如分批查询数据并写入Excel,及时释放内存。 步骤5:使用PHPExcel的缓存机制 参考之前的优化,设置PHPExcel使用磁盘缓存。 步骤6:尝试设置其他内存限制函数 如果ini_set('memory_limit')无效,可以尝试使用`ini_set('memory_limit', '-1')`或者使用shell命令(如果允许)启动一个新的进程。 但注意:在共享主机上可能没有权限修改php.ini或.htaccess,这种情况下只能通过优化代码来解决。 代码优化示例: 在ThinkPHP5中,可以尝试在控制器的初始化方法中设置ini_set,确保最早执行。 同时,参考引用[1]中提到的,如果遇到open_basedir问题,需要修改PHPExcel的文件处理方式。但这里我们主要解决ini_set无效的问题。 如果以上都无法解决,最后的办法是联系主机提供商,请求修改php.ini配置。 生成相关问题: 相关问题: 1. 在共享主机环境中如何解决PHPExcel导出大文件的内存限制问题? 2. 如何使用PHPExcel的磁盘缓存功能来减少内存占用? 3. 除了ini_set,还有哪些方法可以临时提高PHP脚本的内存限制? 4. 如何检测当前PHP环境的disable_functions设置? 5. 在ThinkPHP5框架中,哪个位置是最早可以设置ini_set的地方? 注意:回答中引用的段落末尾自然地添加引用标识。 </think>以下是针对 PHPExcel 中 `ini_set()` 函数无效问题的完整解决方案,结合系统权限、代码配置和替代方案三个维度: --- ### 一、系统权限问题(最常见原因) #### 1. 检查 `disable_functions` 限制 在 PHP 文件中添加以下代码检测禁用函数列表: ```php <?php phpinfo(); // 搜索 "disable_functions" 项是否包含 "ini_set" ``` 如果 `ini_set` 被禁用,需联系服务器管理员移除限制或改用其他方案[^1]。 #### 2. 绕过 `open_basedir` 限制 修改 PHPExcel 文件处理类(**万网等虚拟主机适用**): ```diff // 文件:Classes/PHPExcel/Shared/File.php - $openBaseDir = ini_get('open_basedir'); + $openBaseDir = ''; // 强制清空限制 if ($openBaseDir) { // ...原有代码 } ``` --- ### 二、代码层解决方案 #### 1. 优先使用框架配置(ThinkPHP5) 在应用配置文件 `config.php` 中设置: ```php return [ 'memory_limit' => '1024M', // 内存限制 'max_execution_time' => 600, // 超时时间(秒) ]; ``` #### 2. 强制 CLI 模式执行(绕过 web 限制) 创建命令行任务导出: ```bash # 创建命令 php think make:command ExportExcel ``` ```php // 文件:application/command/ExportExcel.php protected function configure(){ $this->setName('export')->setDescription('Excel导出'); } protected function execute(Input $input, Output $output){ ini_set('memory_limit', '1024M'); // CLI模式通常无限制 // PHPExcel导出代码... } ``` 执行命令:`php think export` --- ### 三、替代优化方案 #### 1. 使用 `set_time_limit()` 替代 ```php // 优先放在脚本最顶部 set_time_limit(600); // 单位:秒 // 内存设置改用分段处理 $chunkSize = 500; // 分块处理数据 foreach(array_chunk($data, $chunkSize) as $chunk) { // 逐块写入PHPExcel } ``` #### 2. CSV 替代方案(绕过 PHPExcel 限制) ```php header('Content-Type: text/csv'); $fp = fopen('php://output', 'w'); // 逐行写入(内存占用<10MB) while ($row = fetchFromDatabase()) { fputcsv($fp, $row); // 每1000行刷新缓冲区 if(0 === ($lineCount % 1000)) ob_flush(); } fclose($fp); ``` #### 3. 队列异步导出 ```php // 使用Redis队列 Queue::push(function ($job) { set_time_limit(0); // 队列任务无时间限制 $excel = new PHPExcel(); // ...生成文件 $job->delete(); }); ``` --- ### ️ 关键注意事项 1. **权限优先级链** `服务器配置 > php.ini > .htaccess > ini_set()` 当 `ini_set()` 失效时,必须向上层配置查找原因[^4] 2. **虚拟主机特殊限制** ```mermaid graph LR A[共享主机] --> B[禁用ini_set] A --> C[限制open_basedir] A --> D[内存限制<256M] ``` 3. **终极解决方案公式** $$ \text{解决方案} = \begin{cases} \text{CSV导出} & \text{若数据量}>10\text{万行} \\ \text{命令行导出} & \text{若需完整Excel格式} \\ \text{队列任务} & \text{超大数据集} \end{cases} $$ ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值