Simple class that supports reading sections, single values, and arrays from INI files.
from phpbuilder.com varel
<?
// filename: class.inifile.php
// author: victor m varela (victor@netims.com)
// comment: *.ini file reader for PHP
// license: LGPL
// date: mié oct 25 10:20:10 CEST 2000
//
// vie oct 27 12:25:48 CEST 2000
// 1.01 recognize some bool values (true, false, yes, no, on, off)
//
// vie oct 27 16:00:36 CEST 2000
// 1.02 bugfix: false value was returning default value
//
// lun oct 30 11:55:38 CET 2000
// 1.03 cached engine added
//
// dom dic 3 04:04:36 CET 2000
// 1.04 bug with "=" symbol fixed
// David P. Schwartz (davids@desertigloo.com)
//
// valid formats:
//
// [my-section]
// # single values
// var1 = value1
// var2=value 2
// var3 = 'value 3'
// ; if we use values between ' or ", they are not trimmed
// var4=" value 4"
//
// ; setting an array
// var_array1 = this is var_array1[0]
// var_array1 = this is var_array1[1]
// var_array1 = this is var_array1[2]
//
// sample_var = this is a = symbol
//
// cached values
$iniCachedValues = array();
$iniCachedSections = array();
$iniCachedFilenames = array();
class IniFile {
// private: do not use;
var $filename;
// constructor
function IniFile ($filename)
{
global $iniCachedValues, $iniCachedSections, $iniCachedFilenames;
$section = "";
$this->filename = $filename;
if (file_exists($filename) and ! isset($iniCachedFilenames[$filename])) {
$iniCachedFilenames[$filename] = $filename;
$lines = file($filename);
for ($i = 0; $i < count($lines); $i++) {
$lines[$i] = trim($lines[$i]);
if ($lines[$i][0] == ';' || $lines[$i][0] == '#') {
// it's a commment
continue;
} elseif (ereg("^/[(.*)/]", $lines[$i], $regs)) {
// new section
$section = strtolower(trim($regs[1]));
$iniCachedSections[$filename][] = trim($regs[1]);
} elseif (preg_match("'^(.*?)[/s]*=[/s]*(.*)'", $lines[$i], $regs)) {
// setting variable
$variable = strtolower(trim($regs[1]));
$value = trim($regs[2]);
if (ereg("^[/"'](.*)[/"']$", $value, $regs)) {
$value = $regs[1];
}
$lower_value = strtolower($value);
if (in_array($lower_value, array('true', 'yes', 'on'))) {
$value = 1;
}
elseif (in_array($lower_value, array('false', 'no', 'off'))) {
$value = 0;
}
if (! isset($iniCachedValues[$filename][$section][$variable])) {
// new variable
$iniCachedValues[$filename][$section][$variable] = $value;
}
elseif (gettype($iniCachedValues[$filename][$section][$variable]) == "array") {
// append new element to array
$iniCachedValues[$filename][$section][$variable][] = $value;
}
else {
// two values for a single variable, convert to array
$ovalue = $iniCachedValues[$filename][$section][$variable];
$iniCachedValues[$filename][$section][$variable] = array($ovalue,$value);
}
}
}
}
}
// returns file name
function fileName () { return $this->filename; }
// returns all sections
function readSections () {
global $iniCachedSections;
echo serialize($iniCachedSections);
return $iniCachedSections[$this->filename];
}
// returns all (variable,value) pairs for a section
function readSection ($section) {
global $iniCachedValues;
return $iniCachedValues[$this->filename][strtolower($section)];
}
// returns a value
function value($section, $variable, $default)
{
global $iniCachedValues;
$section = strtolower($section);
$variable = strtolower($variable);
if (isset($iniCachedValues[$this->filename][$section][$variable])) {
return $iniCachedValues[$this->filename][$section][$variable];
}
else {
return $default;
}
}
}
?>
相关推荐
Laravel Docker Compose 手写指南:Ubuntu 18.04 下的生产级容器化实践
容器化是现代 PHP 应用实现环境一致性与可复现部署的核心技术路径。其本质是将应用运行时依赖(PHP 版本、扩展、Web 服务器、数据库、缓存)封装为声明式配置,通过 Docker Compose 编排服务间网络、卷挂载与启动顺序。该技术显著降低‘在我机器上能跑’类协作成本,提升 CI/CD 稳定性与本地调试 fidelity。典型应用场景包括 Laravel 全栈开发环境搭建、多团队协同标准化、以及向 Kubernetes 平滑演进的前置准备。本文聚焦 Ubuntu 18.04 系统下从零手写 docke
dolphinscheduler-3.4.0
dolphinscheduler集群部署
AI编程助手深度对比:Codex与Claude Code的核心差异与选型指南
如果你正在寻找一个能真正理解你代码意图、帮你完成复杂编程任务的AI助手,最近一定被两个名字刷屏了:Codex和Claude Code。它们都顶着“编程神器”的光环,但当你真正想选一个来用的时候,却发现信息满天飞,却没人告诉你到底该怎么选。 有人说Codex是深思熟虑的“老学究”,写出的代码稳健但慢;有人说Claude Code是反应迅速的“快枪手”,互动性强但需要你时刻盯着。这些碎片化的评价,反而让你更纠结了:我到底需要一个什么样的助手?是追求一次成型、减少返工,还是享受实时协作、快速迭代的感觉? 这篇文章
Python+MySQL+Nginx全栈开发实战指南
Web开发中,Python作为高效脚本语言与MySQL关系型数据库的结合,配合Nginx高性能Web服务器,构成了经典的技术栈组合。Python通过Django/Flask等框架实现快速开发,MySQL提供可靠的数据存储与事务支持,Nginx则处理高并发请求与负载均衡。这种组合特别适合数据处理密集型应用、快速迭代项目和高并发Web服务场景。在实际工程中,通过SQLAlchemy连接池优化数据库性能,利用uWSGI+Nginx部署方案提升服务稳定性,已成为开发者的常见实践。文章还涉及电商平台架构设计、缓存策略
Ubuntu 16.04部署WordPress的LAMP栈契约与兼容性治理
LAMP(Linux-Apache-MySQL-PHP)是Web应用最经典的技术栈,其核心在于各组件间的隐式协作契约而非简单安装。Apache的MPM模型选择、模块加载顺序与虚拟主机权限配置,直接决定WordPress固定链接、缓存和安全机制能否生效;MySQL 5.7的严格SQL模式与认证插件变更,常导致老插件安装失败或连接异常;PHP 7.0在Ubuntu 16.04中的OPcache行为、mysqlnd驱动依赖及运行时权限限制,构成性能与安全的关键断层。理解这些底层原理,才能在长期支持发行版上为快速迭
WordPress从Apache迁移到Nginx的架构级实践指南
Web服务器是现代PHP应用的流量入口与性能基石,其底层模型深刻影响并发处理能力、内存占用和扩展性。Apache采用阻塞式进程/线程模型,而Nginx基于事件驱动异步I/O,二者在PHP执行方式(mod_php vs PHP-FPM)、请求路由逻辑(.htaccess vs location/try_files)及SSL终止机制上存在本质差异。这种迁移不仅是配置替换,更是运行时架构的重构,直接关系到WordPress站点的抗压能力、资源效率与长期可维护性。典型应用场景包括高并发访问优化、CDN/反向代理集成
企业级设备任意文件读取漏洞深度剖析与实战复现
目录遍历(Directory Traversal)是一种经典的Web安全漏洞,其原理在于应用程序未对用户输入的文件路径参数进行充分校验,攻击者通过构造包含`../`等序列的恶意参数,使后端程序跳出预设的安全目录,从而读取服务器上的任意文件。这类漏洞的技术价值在于其强大的信息收集能力,往往成为内网渗透的突破口,危害性在特定场景下不亚于远程代码执行。在企业安防、物联网设备等领域的Web管理平台中,由于开发早期更注重功能实现,安全边界校验不足,此类问题尤为常见。本文以锐明Crocus系统的`DeviceFileR
Debian 11 手动部署 LAMP 栈:Apache+MariaDB+PHP 深度配置指南
LAMP(Linux、Apache、MySQL/MariaDB、PHP)是Web服务最经典的基础技术栈,其核心在于分层解耦与生产就绪的稳定性设计。Apache作为成熟HTTP服务器提供模块化请求处理能力,MariaDB作为MySQL兼容的开源数据库保障数据持久性与事务安全,PHP则以低门槛和丰富扩展支撑快速业务交付。在Debian 11(bullseye)这一LTS发行版中,手动逐层安装而非依赖tasksel或lamp-server^元包,可精准控制版本演进、规避配置覆盖风险、实现MPM模型调优(如even
QT跨平台开发框架安装与配置全指南
QT作为跨平台C++ GUI开发框架,通过其强大的信号槽机制和元对象系统实现高效界面开发。其核心价值在于一次编写多平台部署的能力,大幅降低Windows、Linux和macOS多平台适配成本。开发者在工业控制、嵌入式系统和金融交易等领域广泛应用QT框架时,首先需要完成正确的环境安装与配置。本文以QT 5.15.2为例,详细解析Windows平台MSVC编译环境配置、Linux下gcc工具链集成以及macOS的Xcode环境准备等关键技术要点,特别针对国内开发者提供了清华镜像源加速方案。通过正确配置QTDIR
KARL与Ning平台对比:学术协作平台选型与迁移实战指南
学术协作平台是数字人文、高校课题组和跨机构研究的核心基础设施,其本质是支持结构化内容管理、细粒度权限控制与可审计知识生产的专用系统。相比通用社交平台,学术场景更强调数据主权、字段级权限、元数据可扩展性及长期归档合规性。KARL作为开源学术协同操作系统,以空间-模块-实例三级架构、PostgreSQL+Solr技术栈和YAML/JSONB内容建模,天然适配TEI标注、IIIF图像关联、校勘意见溯源等专业需求;而Ning作为早期SaaS社区平台,受限于扁平化Page模型、闭源托管与缺失的字段权限,难以满足GDP
PHP-FPM进程池优化:多池隔离与资源调度实战指南
PHP-FPM进程池是PHP应用与Linux内核资源调度的关键枢纽,其本质并非简单并发控制,而是涉及内存管理、进程生命周期、文件权限隔离及I/O协同的系统级配置。理解pm动态模式、request_terminate_timeout超时机制与php_admin_value池级覆盖原理,能有效规避502错误、fork风暴和内存泄漏等典型故障。在Ubuntu等传统LAMP环境中,通过多池架构实现业务SLA分级保障(如www/api/admin分离)、基于RSS内存测算的max_children精准调优、以及Red
WordPress 500错误排查:从NGINX、PHP到MySQL的全链路诊断
500 Internal Server Error 是 Web 应用最典型的服务器端错误,本质是后端执行流程在某环节中断后返回的 HTTP 状态码。其底层原理涉及请求生命周期中的多层协作:Web 服务器(如 NGINX)接收请求并转发,应用服务器(如 PHP-FPM)解析执行脚本,框架(如 WordPress)加载逻辑,最终与数据库(MySQL)交互。技术价值在于它不掩盖问题,而是精准暴露执行链中的薄弱点——可能是 PHP 语法错误、内存耗尽、MySQL 连接失败或 NGINX 配置失当。典型应用场景包括
Python测试框架pytest实战:从基础到自动化测试框架搭建
在软件工程实践中,单元测试和自动化测试是保障代码质量、提升开发效率的核心环节。其基本原理是通过预设的断言来验证代码行为是否符合预期,从而在代码迭代中快速发现回归错误。Python作为主流开发语言,其生态中提供了多种测试工具,其中pytest凭借其简洁的语法、强大的断言机制和灵活的插件体系,显著提升了编写和维护测试代码的效率与体验。pytest的核心技术价值在于其‘约定优于配置’的设计哲学,通过智能测试发现、清晰的失败报告以及Fixture依赖注入系统,降低了测试代码的复杂度。它尤其适用于需要高可读性、易维护
Ubuntu 16.04 Nginx部署决策指南:apt安装与源码编译深度对比
Nginx作为主流Web服务器与反向代理,其部署方式直接影响系统安全性、性能扩展性与合规能力。在长期支持已终止的Ubuntu 16.04环境下,单纯依赖apt安装虽快捷,却面临OpenSSL 1.0.0停更、HTTP/2默认禁用、Brotli压缩缺失及动态模块不可扩展等硬性限制;而源码编译则提供模块可控、TLS协议栈可升级、CPU指令集优化等关键能力,支撑等保2.0三级、金融级高可用及边缘嵌入式场景。本文基于真实政务、教育与金融项目经验,解析两种路径的技术原理、安全代价与适用边界,帮助运维与DevOps工程
2024年C++ Qt开发实战指南:从入门到精通构建跨平台桌面应用
在桌面应用开发领域,跨平台原生GUI框架是连接核心业务逻辑与用户交互的关键技术。其原理在于通过统一的API抽象底层操作系统差异,实现“一次编写,多处编译运行”。这种技术方案的价值在于为C++等高性能语言提供了高效、原生的界面开发能力,避免了Web技术栈的性能开销和语言桥接的复杂性。在工业控制、专业软件、嵌入式系统等对性能和资源控制有严格要求的应用场景中,原生跨平台框架是首选方案。本文聚焦于Qt框架,深入解析其信号槽、模型视图等核心机制,并通过一个完整的便签本项目实战,系统讲解如何利用Qt进行现代C++桌面应
Nginx架构及配置详解
概述 Nginx采用C进行编写,是俄罗斯程序员开发的一款轻量级的可构建Web 服务器/反向代理服务器及电子邮件(IMAP/POP3)代理服务器的软件, Nginx服务器是一个高性能的HTTP和反向代理web服务器,同时也可提供了IMAP/POP3/SMTP服务。nginx常用作跑静态和做负载反向代理,动态php交给apache处理,因后者比较稳定,jsp交给tomcat、resin或jboss。n......
Ubuntu 12.10部署ownCloud 5:LAMP架构与AppArmor权限陷阱解析
私有云存储系统依赖于Web服务器、PHP运行时与数据库的深度协同。LAMP架构中,Apache的mod_php模块提供完整的PATH环境与进程上下文,是ownCloud 5调用ImageMagick、FFmpeg等系统工具的前提;而AppArmor作为Ubuntu默认强制访问控制机制,可能拦截flock()等关键系统调用,导致文件锁失败与初始化卡顿。理解操作系统安全模块与Web服务运行模型的交互逻辑,是保障私有云数据一致性与服务可用性的技术基础。本文以ownCloud 5在Ubuntu 12.10上的真实部
【16】linux命令/工具,systemd,文件操作,动静态库,信号,socket
apt install python3-pip --fix-missing(断开vpn,cp /etc/apt/sources.list /etc/apt/sources.list.bak,python3 -m pip install --upgrade pip,apt-get update,pip install 包名 -i http://pypi.douban.com/simple/ --trusted-host pypi.douban.com)设置时间,联网,apt-get install vim。
404



被折叠的 条评论
为什么被折叠?



