【问题标题】:with php fopen() flock() file() Why does it work like this用php fopen()flock()file()为什么会这样
【发布时间】:2015-06-19 02:00:43
【问题描述】:

所以 如果我用 a+ 像打开一个文件

fopen($filepath,'a+');
file($filepath);

然后我使用 file($filepath) 获取文件内容就可以了

但是为什么我什么时候 我用flock锁定了文件我也可以使用file()函数获取内容 为什么 ?

$fp = fopen($filepath, "a+");
while (1) {
  $f =flock($fp,LOCK_EX);
  if($f){
    fwrite($fp,'abc');
    echo "ok loked \n";
    sleep(1);
    $te =file($filepath);
    if(strlen($te[0])==10){
      echo "this is cont ".$te[0]."\n";
      echo "ok this the end \n";
      ftruncate($fp,0);
      fflush($fp);  
    }
    flock($fp, LOCK_UN);
    break;
  }
} 
fclose($fp);
  1. 他们的关系如何?

  2. 当flock文件file()函数使用fopen资源时?

  3. 文件是独立函数还是使用fopen?

【问题讨论】:

  • 旁注:如果这不是伪代码,则echo "ok loked "\n"; 中有语法错误。它抛弃了语法高亮。
  • @Fred-ii- 现在可以使用了
  • 对不起,但我发现很难相信echo "ok loked "\n"; 会引发解析错误。将错误报告添加到您的打开 PHP 标记之后的文件顶部,例如 <?php error_reporting(E_ALL); ini_set('display_errors', 1);,然后是其余代码,您会明白我的意思。
  • 啊,你已经编辑了echo "ok loked \n";
  • 是的,flock 函数呢?

标签: php file fopen flock


【解决方案1】:

flock 是每个进程。因此,如果同一个进程(包括所有线程)多次尝试集群,它总是会成功。

阅读文档末尾的警告: https://www.php.net/manual/en/function.flock.php

【讨论】:

    【解决方案2】:

    fopenfile 是两个不同的函数。

    fopen fopen 函数的作用完全不同——它打开一个文件 描述符,用作读取或写入文件的流。它 是一个低级函数,是 C fopen 的简单包装器 函数,简单地调用 fopen 只会打开一个 流。

    file — 将整个文件读入一个数组

    【讨论】:

    猜你喜欢
    • 2013-07-22
    • 2015-12-23
    • 2018-10-15
    • 2012-07-08
    • 2011-06-03
    • 2018-06-08
    • 2014-12-21
    • 1970-01-01
    相关资源
    最近更新 更多