所以我有一个名为cache的文件,它使用多维数组存储网站的流量分析。
cache.php
$traffic_array=array("date_ip_uniqueNU"=>array("pageviews"=>34,"time_enteredOnsite"=>"12:00"),"date_ip_uniqueNU"=>array("pageviews"=>34,"time_enteredOnsite"=>"12:00"));//ect ect
现在,我需要以某种方式附加到上面的数组。
我只需要读取整个文件,在foreach循环中重新构建数组,然后重新编写整个文件,如下所示:
include('cache.php');
foreach($traffic_array as $mainKey){
$rebuild_contents.="array("something"=>array("pageviews"=>".$mainKey['pageviews'].","time_enteredOnsite"=>".$mainKey['time_enteredOnsite'].");"//so I'm just building a string containing all the code to re-write the file.
}
//then write to the file
$file="cache.php";
$content_to_put"\<? \$traffic_array=\"$rebuild_content\";"
file_put_contents($file,$content_to_put);
//NOTE: I just quickly wrote this up now, so expect syntax errors.
所以你看到我上面做了什么 - 只需将数组内容重建为一个字符串,然后将该字符串写入缓存文件。
但是,我确信有一个更好的方法,所以有人可以帮助我吗?
谢谢!的xD
编辑:同样是上述方法的一个问题,如果这个过程多次发生,那么在相同的毫秒时间内会发生一些事情 - 对吗?答案 0 :(得分:1)
这似乎不是一种很好的缓存方式,只是因为你不得不提出这个问题。添加新条目应该很容易。
我的建议是:
使用名为cache的数据库表,并根据需要添加新行或检索,更改和只写一行。
或
使用不包含PHP代码的文件,但使用其他类似CSV的文件,您可以轻松附加到该文件而不必担心关闭分号等,您也可以使用内置的PHP快速阅读它库函数如fgetcsv()在需要时。
答案 1 :(得分:1)
非常,嗯,奇怪的缓存方法。 假设您希望更改文件中的某些PHP代码。
file_put_contents能够将数据附加到文件末尾,使用标志FILE_APPEND(details)调用此方法。 你可以改变定义数组的方法,如下所示:
$traffic_array[new key 1] = array(new data 1);
$traffic_array[new key 2] = array(new data 2);
...
然后你只需将内容添加到文件末尾,就像这样
file_put_contents($file, '$traffic_array[your new key] = array(data for adding);', FILE_APPEND);
但是如果你不能改变定义数组traffic_array的方法,那么file_put_contents不适合你。将fopen()
与标记'r +'一起使用,使用fseek()
将指针移动到正确的位置以便将新数据放在文件中,fwrite()
用于仅写入新数据,并使用fclose()
}。
// Content of file: <?php $a = array('k' => array(), 'k2' => array());\n
$f = fopen('file', 'r+');
fseek($f, -3, SEEK_END); // place the pointer after last value of array, before ");\n"; cont from end
fwrite($f, ", 'k3' => array('f'=>'a'));\n"); // put new data, also add overwrited data ");\n"
fclose($f);
//now content of file: <?php $a = array('k' => array(), 'k2' => array(), 'k3' => array('f'=>'a'));\n
更改输入文件可能会导致很大的问题。
同样是上述方法的一个问题,如果这个过程多次发生,那么在相同的毫秒时间 - 某些东西会搞砸,对吗?
是的,请阅读文件锁定。