我写的一个统计访问状况的代码,发现有并发问题,请专家们进来看看! 你可以用memcached,新浪有个免费的开源系统memched db,既能保证速度,又能定时保存入库。他们的博客,播客等系统都是这么做的。 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 恩 如果就问题本身而言呢既然file_put_contents这个函数新增了把锁,我想ZEND肯定是考虑到了并发问题,那么为什么没能解决问题呢? 如果用文件形式,最好加锁。bool flock ( int handle, int operation [, int &wouldblock] )PHP 支持以咨询方式(也就是说所有访问程序必须使用同一方式锁定, 否则它不会工作)锁定全部文件的一种轻便方法。 注: 在 Windows 下 flock() 将会强制执行。 flock() 操作的 handle 必须是一个已经打开的文件指针。operation 可以是以下值之一: 要取得共享锁定(读取程序),将 operation 设为 LOCK_SH(PHP 4.0.1 以前的版本设置为 1)。 要取得独占锁定(写入程序),将 operation 设为 LOCK_EX(PHP 4.0.1 以前的版本中设置为 2)。 要释放锁定(无论共享或独占),将 operation 设为 LOCK_UN(PHP 4.0.1 以前的版本中设置为 3)。 如果你不希望 flock() 在锁定时堵塞,则给 operation 加上 LOCK_NB(PHP 4.0.1 以前的版本中设置为 4)。 flock() 允许你执行一个简单的可以在任何平台中使用的读取/写入模型(包括大部分的 Unix 派生版和甚至是 Windows)。如果锁定会堵塞的话(EWOULDBLOCK 错误码情况下),请将可选的第三个参数设置为 TRUE。锁定操作也可以被 fclose() 释放(代码执行完毕时也会自动调用)。 如果成功则返回 TRUE,失败则返回 FALSE。 没锁文件,WINDOW下并发访问,出问题正常, 在写入的时候加了锁,你仔细看一下代码服务器是linux系统 我也觉得用db好点, 用memcache可以提高读写速度,发生频率应该下降清零是整个文件为空吗?还是统计数据成了0?加点log,看一下出问题前是读还是写的时候出了问题还可以把锁去了,看看问题发生频率是高了还是低了 求教关于brophp框架中r_select()的用法 改造discuz 问题 火狐不支持自动提交 IE可以(不好意思没分了) php动态树型菜单 php中获取当前时间的函数,请举个例子好吗? 数据库初始化父类继承的问题 学习大A的loopo.cn中的AJAX中的一段... 如何得到post数据的客户端IP 和端口?急!!!! php的COPY函数问题 这个程序为什么不能把一个指定的WORD文档显示在当前的浏览器窗口中? 帮忙看看这个那里有错 ---(可以免费发短信息) 奇怪的编码问题 php 模拟客户端IP的问题
如果就问题本身而言呢
既然file_put_contents这个函数新增了把锁,我想ZEND肯定是考虑到了并发问题,那么为什么没能解决问题呢?
bool flock ( int handle, int operation [, int &wouldblock] )
PHP 支持以咨询方式(也就是说所有访问程序必须使用同一方式锁定, 否则它不会工作)锁定全部文件的一种轻便方法。 注: 在 Windows 下 flock() 将会强制执行。 flock() 操作的 handle 必须是一个已经打开的文件指针。operation 可以是以下值之一: 要取得共享锁定(读取程序),将 operation 设为 LOCK_SH(PHP 4.0.1 以前的版本设置为 1)。 要取得独占锁定(写入程序),将 operation 设为 LOCK_EX(PHP 4.0.1 以前的版本中设置为 2)。 要释放锁定(无论共享或独占),将 operation 设为 LOCK_UN(PHP 4.0.1 以前的版本中设置为 3)。 如果你不希望 flock() 在锁定时堵塞,则给 operation 加上 LOCK_NB(PHP 4.0.1 以前的版本中设置为 4)。
flock() 允许你执行一个简单的可以在任何平台中使用的读取/写入模型(包括大部分的 Unix 派生版和甚至是 Windows)。如果锁定会堵塞的话(EWOULDBLOCK 错误码情况下),请将可选的第三个参数设置为 TRUE。锁定操作也可以被 fclose() 释放(代码执行完毕时也会自动调用)。 如果成功则返回 TRUE,失败则返回 FALSE。
服务器是linux系统
用memcache可以提高读写速度,发生频率应该下降清零是整个文件为空吗?还是统计数据成了0?
加点log,看一下出问题前是读还是写的时候出了问题还可以把锁去了,看看问题发生频率是高了还是低了