分享学习心得,记录学习笔记
文章:44   访问:119495
今天是:
2020年02月19日 星期三
  >   文章列表   >   文章详情
  1. /**
  2. * 修改配置文件,仅支持修改config目录下的配置文件
  3. * @param string $confFileName 配置文件吗,不带扩展名,如database
  4. * @param array $newConfig 包含新配置信息的数组,该数组的键必须是原配置文件中有的,原来不存在的项不生效
  5. */
  6. function config_set($confFileName = "",$newConfig = [])
  7. {
  8. $configPath = APP_ROOT.DS.'config'.DS.$confFileName.'.php';
  9. $strConfigFile = file_get_contents($configPath);
  10. // 读取原配置文件
  11. // 最后一个']'的位置
  12. $indexEnd = strrpos($strConfigFile,']');
  13. // return 的位置
  14. $indexReturn = strpos($strConfigFile,'return');
  15. // 第一个'['的位置
  16. $indexStart = $indexReturn+strpos(substr($strConfigFile,$indexReturn),'[');
  17. $fileHead = substr($strConfigFile,0,$indexStart+1);
  18. $fileFoot = substr($strConfigFile,$indexEnd);
  19. // 中间部分以换行符拆分为数组
  20. $strCont = substr($strConfigFile,$indexStart+1,($indexEnd-$indexStart-1));
  21. // 创建副本
  22. $tempConfFile = APP_ROOT.DS.'config'.DS.'temp_conf_'.time().'.tmp';
  23. $fp = fopen($tempConfFile,'w');
  24. fwrite($fp,$strCont);
  25. fclose($fp);
  26. // 从副本中分析文件内容
  27. $fileopen = fopen($tempConfFile,'r');
  28. $newConfFileData = [];
  29. while(!feof($fileopen)){
  30. $eachline = fgets($fileopen);
  31. if ('/'===substr(trim($eachline),0,1)){
  32. $newConfFileData[] = $eachline;
  33. }else{
  34. // 取''中的内容
  35. $index_key_start = strpos($eachline,"'");
  36. if (false!==$index_key_start){
  37. $index_key_end = strpos($eachline,"'",$index_key_start+1);
  38. $itemkey = substr($eachline,$index_key_start+1,$index_key_end-$index_key_start-1);
  39. if (!empty($newConfig[$itemkey])){
  40. $newConfFileData[] = substr($eachline,0,$index_key_start)."'".$itemkey."' => '".$newConfig[$itemkey]."',\r\n";
  41. }else{
  42. $newConfFileData[] = $eachline;
  43. }
  44. }
  45. }
  46. }
  47. fclose($fileopen);
  48. unlink($tempConfFile);
  49. // 分析完成,删除副本文件
  50. // 创建新文件
  51. $newConfFile = APP_ROOT.DS.'config'.DS.'temp_conf_'.time().'.conf';
  52. $fp = fopen($newConfFile,'w');
  53. fwrite($fp,$fileHead."\r\n".implode('',$newConfFileData).$fileFoot);
  54. fclose($fp);
  55. if (file_exists($newConfFile)&&file_exists($configPath)){
  56. unlink($configPath);
  57. rename($newConfFile,$configPath);
  58. }else{
  59. exit("生成配置文件识别");
  60. }
  61. }
用户头像
天蓝色的彼岸

牛*

2019-04-07 21:03:43
# 1

友情链接 doywb

2018-2019 Copyright© 米灵尔 小熊 豫ICP备15007436号-1

豫公网安备 41152302000146号