请写一段PHP代码,确保多个进程同时写入同一个文件成功

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了请写一段PHP代码,确保多个进程同时写入同一个文件成功相关的知识,希望对你有一定的参考价值。

首先php是支持进程的而不支持多线程(这个先搞清楚了),如果是对于文件操作,其实你只需要给文件加锁就能解决,不需要其它操作,PHP的flock已经帮你搞定了。
用flock在写文件前先锁上,等写完后解锁,这样就实现了多线程同时读写一个文件避免冲突。大概就是下面这个流程
/*
*flock(file,lock,block)
*file 必需,规定要锁定或释放的已打开的文件
*lock 必需。规定要使用哪种锁定类型。
*block 可选。若设置为 1 或 true,则当进行锁定时阻挡其他进程。
*lock
*LOCK_SH 要取得共享锁定(读取的程序)
*LOCK_EX 要取得独占锁定(写入的程序)
*LOCK_UN 要释放锁定(无论共享或独占)
*LOCK_NB 如果不希望 flock() 在锁定时堵塞
/*
if (flock($file,LOCK_EX))

fwrite($file,'write more words');
flock($file,LOCK_UN);

else

//处理错误逻辑

fclose($file);
)
参考技术A $file = fopen("test.txt","w+");

// 排它性的锁定 先锁上,写完,打开。
if (flock($file,LOCK_EX))
  
  fwrite($file,"Write something");
  // release lock
  flock($file,LOCK_UN);
  
else
  
  echo "Error locking file!";
  

fclose($file);

参考技术B 多进程写文件
function write_file($filename, $content)

$lock = $filename . '.lck';
$write_length = 0;
while(true)
if( file_exists($lock) )
usleep(100);
else
touch($lock);
$write_length = file_put_contents($filename, $content, FILE_APPEND);
break;


if( file_exists($lock) )
unlink($lock);

return $write_length;

写一个能创建多级目录的PHP函数

1.写一个能创建多级目录的PHP函数

技术分享

2.写一段PHP代码,确保多个进程写入文件成功

技术分享

3.写一个PHP函数,尽可能高效地从一个标准的url里取出文件的扩展名,例如:http://www.sina.com.cn/abc/de/fg.php?id=1需要取出php或者.php

方法一:

技术分享

方法二:

技术分享

 4.写一个PHP函数,能够遍历一个文件夹下的所有文件和子文件夹

技术分享

5.简述论坛中无限分类的实现原理

create table category(

  cat_id smallint unsigned not null auto_increment primary key comment ‘类别ID‘,

  cat_name varchar(30) not null default ‘‘ comment ‘类别名称‘,

  parent_id smallint unsigned not null default 0 comment ‘类别父ID‘

)engine=MyISAM charset=utf8;

编写一个函数,递归遍历实现无限分类

技术分享

6.写一个PHP函数,算出两个文件的相对路径,如$a = ‘/a/b/c/d/e.php‘;$b = ‘/a/b/12/34/c.php‘;计算出$b相对于$a的相对路径

技术分享

7.写一个PHP函数去除HTML标签

方法一:使用PHP内建函数strip_tags()去除HTML标签

方法二:自定义函数

技术分享

8.写一个函数验证电子邮件的格式是否正确(使用正则)

preg_match(‘/^[\\w\\-\\.][email protected][\\w\\-]+(\\.\\w+)+$/‘,$email);

9.PHP中判断一个字符是否是合法的日期格式

技术分享

10.编写PHP函数取得上一月的最有一天

技术分享

 11.请使用PHP设计一个函数,对学生英语考试得分从高到低排序,输入时所有学生的学号和考试得分,返回排好序的考试得分和对应学生的学号。考试满分为100,得分可能会有小数,由于考试评分要求,小数位只会是0或0.5

技术分享

 

以上是关于请写一段PHP代码,确保多个进程同时写入同一个文件成功的主要内容,如果未能解决你的问题,请参考以下文章

JavaScript学习(八十)—请写一段JS程序提取URL中的各个get参数(参数名和参数个数不确定),将其按key-value形式返回到一个json结构中

mysql如何查询一个字段里面相同的两条数据。如库名为s,表名为task,字段名为rank。请写一段这样的sql语句

PHP使用flock实现文件加锁来防止多进程同时写入文件

多个线程同时写入多个文件 - 它正被另一个进程使用

当多个进程尝试同时写入然后从文件中读取时,如何防止竞争条件

多线程文件写同一个文件写不进去