重写文件问题

michelle0618 2005-03-30 05:55:10
我在一个文件中定义了一些常量。在后台可以修改这些常量。
但是,为何我在后台修改的时候,只要我在原来的基础上增加一个长度,那么就会从文件末尾删除相应的长度,这是为何呢?


大概逻辑如下
$const_file=FILE_PATH."/$filename";//常量文件

$const=inputFile($const_file);

$GAME_INDEX_INTRO=getConstValue("GAME_INDEX_INTRO",$const);//首页介绍

/*(原市政府)提示信息*/
$GOV_INTRO=getConstValue("GOV_INTRO",$const);
$RE_GAME_INDEX_INTRO=$_REQUEST["GAME_INDEX_INTRO"];//首页介绍
/*(原市政府)提示信息*/
$RE_GOV_INTRO=$_REQUEST["GOV_INTRO"];

/*首页介绍*/
outputFile(putConstValue("GAME_INDEX_INTRO",$GAME_INDEX_INTRO,$RE_GAME_INDEX_INTRO,$const),$const_file);
/*(原市政府)提示信息*/
$const=inputFile($const_file);
outputFile(putConstValue("GOV_INTRO",$GOV_INTRO,$RE_GOV_INTRO,$const),$const_file);

function inputFile($file){
$handle=fopen($file,"r");
$content=fread($handle,filesize($file));
fclose($handle);
return($content);
}
function outputFile($content,$file){
$handle=fopen($file,"w+");
fwrite($handle,$content);
fclose($handle);
}
function getConstValue($const_name,$content){
$const_name="define(\"".$const_name."\",";
$start=strpos($content,$const_name)+strlen($const_name);
$end=strpos($content,");",$start);
$ret=substr($content,$start,($end-$start));
$ret=str_replace("\"","",$ret);
$ret=str_replace("\\r","",$ret);
$ret=str_replace("\\n","",$ret);
$ret=str_replace("<br/>","",$ret);
return($ret);
}
function putConstValue($const_name,$old,$new,$content){
$const_name="define(\"".$const_name."\",";
$start=strpos($content,$const_name)+strlen($const_name);
$end=strpos($content,");",$start);
$head=substr($content,0,$start);
$tail=substr($content,$end);
$const=substr($content,$start,($end-$start));
$const=str_replace($old,$new,$const);
$content=$head.$const.$tail;
return($content);
}

这是为什么呢?请高手帮忙!!!
...全文
215 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
michelle0618 2005-03-31
  • 打赏
  • 举报
回复
晕!解决了。不是其他问题。
而是fopen($file,"w+");的时候竟然没有把内容删除完。
在function outputFile($content,$file){
unlink($file);
$handle=fopen($file,"w+");
fwrite($handle,$content);
fclose($handle);
}
里面加上unlink($file);就好了。
让我郁闷了半天。原来是PHP函数问题。
还是谢谢大家:)
michelle0618 2005-03-31
  • 打赏
  • 举报
回复
to:xuzuning(唠叨)
不对啊,如果我把$tail=substr($content,$end);// 改成$tail=substr($content,-$end);那写进文件的就不对了。就乱了
xuzuning 2005-03-31
  • 打赏
  • 举报
回复
你的putConstValue函数有误!

function putConstValue($const_name,$old,$new,$content){
$const_name="define(\"".$const_name."\",";
$start=strpos($content,$const_name)+strlen($const_name);
$end=strpos($content,");",$start);//这是取得尾部需要保存的内容开始的位置
$head=substr($content,0,$start);//取得全面需要保存的内容
$tail=substr($content,$end);//取得尾部需要保存的内容。但是这里用错了参数,应写做$tail=substr($content,-$end);
$const=substr($content,$start,($end-$start));
$const=str_replace($old,$new,$const);
$content=$head.$const.$tail;
return($content);
}
michelle0618 2005-03-31
  • 打赏
  • 举报
回复
可为什么会每修改的内容长度比以前大。而在文件的末尾就减去相应的长度呢?
比如
<?
define("PALACE_NAME5","酒馆");//原市政府
define("PALACE_NAME6","金库");//原银行
.
.
.
define("GOV_LOGO","http://career.wap2008.com/images/gov.png");//原市政府LOGO
define("BANK_LOGO","http://career.wap2008.com/images/bank.png");//原银行LOGO

?>
我在后台对define("PALACE_NAME5","酒馆");//原市政府 里面的内容 “酒馆”根据如上的代码修改为“酒馆1”那么最后的文件就成了
<?
define("PALACE_NAME5","酒馆");//原市政府
define("PALACE_NAME6","金库");//原银行
.
.
.
define("GOV_LOGO","http://career.wap2008.com/images/gov.png");//原市政府LOGO
define("BANK_LOGO","http://career.wap2008.com/images/bank.png");//原银行LOGO


末尾的“?〉”就没了,这是为什么呢?
cokeyang 2005-03-30
  • 打赏
  • 举报
回复
mode 说明
'r' 只读方式打开,将文件指针指向文件头。
'r+' 读写方式打开,将文件指针指向文件头。
'w' 写入方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'w+' 读写方式打开,将文件指针指向文件头并将文件大小截为零。如果文件不存在则尝试创建之。
'a' 写入方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
'a+' 读写方式打开,将文件指针指向文件末尾。如果文件不存在则尝试创建之。
michelle0618 2005-03-30
  • 打赏
  • 举报
回复
to:myvicy(在线解决:你的问题我来解决(因为我不会骗人,所以我最)
我用的是fopen($file,"w+");呢
因为我调用的是这个函数来重写
function outputFile($content,$file){
$handle=fopen($file,"w+");
fwrite($handle,$content);
fclose($handle);
}里面用的是“W+”呢。
myvicy 2005-03-30
  • 打赏
  • 举报
回复
$the_file=fopen($file,"w+");
在你要重写的地方这样打开文件
内容概要:本文介绍了基于蝴蝶优化算法(Butterfly Optimization Algorithm, BOA)解决电力系统中最优无功功率分配问题的研究,采用IEEE30节点标准测试系统进行仿真验证。通过Matlab编程实现该智能优化算法,对无功电源出力、变压器变比及并联补偿设备等控制变量进行优化调节,以降低网损、改善电压质量、提高系统运行效率为目标,构建多目标优化模型并求解。文中详细阐述了算法原理、数学建模过程、约束条件处理及仿真结果分析,展示了BOA在电力系统无功优化领域的有效性和收敛性能。; 适合人群:电气工程及相关专业背景,具备一定电力系统分析基础和Matlab编程能力的高校研究生、科研人员及从事电力系统优化运行的工程技术人员。; 使用场景及目标:①应用于电力系统运行与控制中的无功优化调度,提升电网经济性与稳定性;②作为智能优化算法在电力系统中应用的教学案例,帮助理解BOA算法的设计思想与实现流程;③为微电网、主动配电网等复杂系统的无功电压协调控制提供技术参考。; 阅读建议:建议读者结合IEEE30节点系统数据文件与Matlab代码进行实操演练,重点关注目标函数构建、约束条件处理及算法参数设置部分,通过调整算法参数观察优化效果变化,深入掌握蝴蝶优化算法的调参规律与工程应用技巧。
内容概要:本文介绍了基于Python的课程达成度分析系统的设计与实现,旨在通过自动化、智能化手段提升高校教学质量评价的科学性与效率。系统整合多源异构教学数据(如成绩、作业、课堂行为等),利用Python强大的数据处理库(如pandas、NumPy、SQLAlchemy)进行数据采集、清洗与融合,并构建标准化的课程目标达成度评价模型。系统采用分层架构,涵盖数据层、业务逻辑层、前端呈现层、安全控制模块及拓展维护层,支持多维度数据分析、异常监测、群体对比与可视化报告生成,形成“评价—反馈—改进”的教学闭环,助力教育信息化与数据驱动决策。文中还提供了关键模块的代码示例,如数据合并、标准化处理与加权计算等。; 适合人群:具备一定Python编程与数据分析基础,从事教育信息化研究、教学质量管理或教育技术开发的高校教师、研究人员及软件开发者。; 使用场景及目标:①实现课程目标达成度的自动化计算与动态监控;②支持多班级、多课程的教学质量横向对比与异常预警;③为专业认证、教学评估和持续改进提供数据支撑;④推动高校教学评价从经验型向数据驱动型转变。; 阅读建议:此资源以实际项目为导向,结合模型设计与代码实践,建议读者结合完整代码与GUI实现深入学习,并根据所在院校的数据结构进行适配开发,重点关注数据标准化、权重配置与可视化交互设计。

21,891

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧