fopen什么时候会失败?

2023-12-26

在我的 PHP 代码中,我打开一个文件并向其中附加文本。我使用这段代码:

$ourFileHandle = fopen($ourFileName, 'a') or die("can't open file");

当加载 PHP 页面时会发生这种情况。现在如果两个人同时加载 PHP 页面会发生什么?这段代码对其中一个人有效吗?对于另一个人,它会执行吗?die()?一般来说什么时候可以fopen fail?

Thanks.


TL;DR - 只需使用数据库

这不是一个简单的话题。对于多个并发请求,您正在做的事情肯定不会按预期工作,因为大多数系统将允许所有请求打开文件,并且可能有多个脚本能够同时写入文件,您很可能最终会这样如果您这样做,文件中会出现垃圾。

解决此问题的可能解决方案多种多样,但我将在此介绍我认为最可行的三个。

  1. 使用数据库。无论您尝试做什么,这几乎肯定是最佳解决方案。 RDBMS 将毫不犹豫地处理所有这些并发问题,如果这样做,您将永远不会遇到任何并发问题。

  2. 使用以下命令请求文件上的独占锁flock()。该函数使用advisory锁定以防止多个并发进程同时访问该文件。这将满足您对多个 PHP 进程的需求,但如果其他外部程序不支持 PHP 使用的相同类型的咨询锁定系统,则它可能无法与其他外部程序一起工作。
    flock()“阻塞”直到获得文件的锁。这意味着它将损害请求并发性 - 一次只有一个请求能够写入文件。此外,它不保证锁将按照请求的顺序提供,因此您可能会遇到这样一种情况:一个请求永远无法获得文件的锁,而其他后来到达的请求却得到满足。

  3. 使用后台进程来处理文件访问,并让您的脚本与该进程进行通信。这有点像滚动你自己的 1) 版本,它不适合胆小的人,但如果做得正确,它可以发挥巨大的作用。
    使用此模型,可以使用某种形式的进程间通信将需要写入文件的数据中继到后台(持久)进程。然后,该后台进程管理对文件的写入,确保消息完整且按正确的顺序写入。通常(当使用 PHP 时)此类 IPC 将通过套接字实现。这是一个重要的解决方案,但可能是最强大的解决方案。


从更普遍的角度来看,fopen()通常由于权限问题或低级操作系统问题而失败。操作系统还可以提供“真正的”锁定机制,以防止其他程序打开该文件。然而,真正的“原因清单”fopen()可能会失败”很难提供,因为有太多的可能性。

显然,如果您尝试以读取模式打开文件并且该文件不存在,则会失败。但是,上面的代码是以写入模式打开文件 - 这不会一定如果文件不存在则失败 - 如果目录路径存在并且调用进程有权写入该目录,则将创建该文件。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

fopen什么时候会失败? 的相关文章

  • 为什么这评估为 true

    为什么这评估结果为真
  • 点击 %40 变为 %2540

    当单击包含 符号的链接时 该网址给我 40 这就是我想要的 但是一旦我点击它 一秒钟后它就在我点击后变成了 2540 单击是在电子邮件内 然后定向到网站 其中 40 更改为 2540 我怎样才能让它停止变化 它现在得到这样的参数 email
  • 通过 Sparkpost 发送 iCal 邀请

    我正在尝试使用 SparkPost 通过电子邮件以附件形式发送日历邀请 但收到电子邮件后邀请不会打开 我使用两个文件 calendarinvite php 来创建邀请 使用 Sendemail php 来发送电子邮件 calendarinv
  • Laravel Auth:attempt() 不会持久登录

    我在网上找到了许多有类似问题的资源 但似乎没有一个解决方案可以解决我的问题 当我使用以下代码登录用户时 一切看起来都很好 email Input get email password Input get password if Auth a
  • Symfony2:为什么请求传递到受 Symfony2 中 AppCache 影响的 Kernel.Terminate EventListener

    在我的 Symfony2 2 应用程序中 我使用 onKernelTerminate EventListener 以便我可以在渲染响应后进行一些 繁重 处理 以便用户收到更快的响应时间 在我的控制器中 我在请求上设置了一个属性 以便当事件侦
  • [APUE]fork后父进程和子进程是否共享相同的文件偏移量?

    在 APUE 第 8 3 节中fork function 关于父子进程之间的文件共享 它说 It is important that the parent and the child share the same file offset 在
  • 如何检测字符串中的非 ASCII 字符?

    如果我有一个 PHP 字符串 如何以有效的方式确定它是否至少包含一个非 ASCII 字符 我所说的非 ASCII 字符是指不属于该表的任何字符 http www asciitable com http www asciitable com
  • 如何关闭未关闭的 HTML 标签?

    每当我们从数据库或类似来源获取一些经过编辑的用户输入内容时 我们可能会检索仅包含开始标记但不包含结束标记的部分 这可能会妨碍网站当前的布局 有客户端或服务器端的方法来解决这个问题吗 找到了一个很好的答案 使用 PHP 5 并使用 DOMDo
  • CodeIgniter 控制器 - JSON - AJAX

    我正在尝试通过 AJAX 使用 CodeIgniter 发送表单构建 并尝试使用 JSON 获取响应 但是 我只在打开开发人员选项卡时看到响应 我什至不确定这是否实际上是响应 因为它显示了两个 json 数据 它所显示的只是加载旋转器 然后
  • 从类似 cronjob 的语法创建“下次运行时间”日期

    在我正在创建的应用程序中 用户可以安排重复任务 生成间隔模式的简单值是 Minute 0 59 90 each minute Hour 0 23 90 each hour Day of month 1 31 90 each day of m
  • 未传递“client_reference_id”参数

    我使用 Stripe Checkout Stripe 版本 2016 07 06 我想通过参数 client reference id 恢复个性化数据 但在 JSON 中 当我有金额或电子邮件时 我找不到它 我是在测试环境中 你能帮我吗 先
  • 如何在多次尝试后延迟登录尝试 (PHP)

    我正在开发一个用 PHP 构建的相当大的网站 该网站可能会有很多用户 我正在寻找一种方法来保护登录屏幕免受自动尝试的影响 我已经在注册表中添加了验证码检查 但还想进一步强化网站 据我所知 StackOverflow 上也有类似的问题 而且我
  • 使用 Instagram Basic Display API 时出现“无效平台应用程序”错误

    我正在尝试使用 Instagram Basic 显示 API 但是当我发布授权代码以获取访问令牌时 我不断收到以下错误 error type OAuthException 代码 400 error message 平台应用无效 我正在遵循此
  • 在 Yii 的标准中如何获得计数 (*)

    我正在尝试构建一个具有以下内容的查询group by属性 我正在尝试得到id和count它一直告诉我count is invalid列名 我怎样才能得到count来自group by询问 工作有别名 伊伊 1 1 11 其他不及格 crit
  • Codeigniter - 出现 404 Not Found 错误

    我们在 godaddy 有两个托管套餐 我们的实时网站使用以下 htaccess 文件运行良好 无需在 url 中使用 index php 即可访问网站 RewriteEngine On RewriteCond REQUEST FILENA
  • 反向引用在 PHP 中不起作用

    最近我一直在研究 更多的是在实践中说实话 正则表达式 我注意到他的力量 我提出的这个要求 link https stackoverflow com questions 30380397 take the text up to a speci
  • Stream_context_set_params 不适用于 ssh2.sftp 包装器

    我想使用类似的功能here http www php net manual en function stream notification callback php 请检查以下代码 function notify notification
  • PHP递归遍历对象树[关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • 如何使用 php 将 *.xlsb 转换为数组或 *.csv

    我正在尝试转换 xlsb文件到php array or csv文件 或至少 xls 我尝试使用PHPExcel 但看起来它无法识别该文件中的内容 我注意到 你可以重命名 xlsb文件到 zip文件 然后使用命令行解压缩unzip zip 之
  • 使用 PHP 将 latin1_swedish_ci 转换为 utf8

    我有一个数据库 里面充满了类似的值 Dhaka 应该是 Dhaka 因为我在创建数据库时没有指定排序规则 现在我想修复它 我无法从最初获取数据的地方再次获取数据 所以我在想是否可以在 php 脚本中获取数据并将其转换为正确的字符 我已将数据

随机推荐

  • 如何创建文件名中包含特殊字符的文本文件

    演示我的问题 打开一个新的 Excel 工作簿并将这些符号 设计师协会 保存到单元格 A1 insert the following VBA code somewhere in the editor Alt F11 execute it l
  • 带有触摸惯性的WPF列表框下拉整个窗口

    我有一个为触摸显示器构建的全屏 WPF 应用程序 并且我有一些Listboxs 在主屏幕上 当我轻弹 列表框 时 它滚动得很好 但是当它到达列表末尾时 entire应用程序从屏幕顶部下拉 我可以以某种方式停止这种行为吗 还有其他人看过这个吗
  • Solr 3.6 出现一些延迟后,文档得到了反映

    使用 Solr 3 6 进行 ASP net 应用程序 我们正在使用 SolrNet 库 我们有一个用 asp net 编写的自定义程序 用于使用 SolrNet 将文档增量添加到 Solr 这监视将文档插入 Solr 的进度 问题是 应用
  • 光线投射在 Unity 2D 游戏中查找对象上的鼠标点击

    我正在尝试删除鼠标单击的对象 我正在使用新的 Unity3D 4 3 制作 2D 游戏 这是我正在使用的代码 void Update if Input GetMouseButtonDown 0 Ray ray Camera main Scr
  • PHP proc_open 不起作用 - 给我“数组中缺少句柄限定符”

    警告 proc open 第 102 行 C updatedots php 中的数组中缺少句柄限定符 我正在尝试打开记事本并在 2 秒后将其关闭 这是我的代码 descriptorspec array 0 gt array pipe gt
  • Rails 3.1 应用程序集成了 webdav 和身份验证?

    我想为 Rails 3 1 应用程序启用 WebDav 其中我使用 Devise 进行身份验证 使用 CanCan 进行授权 到目前为止 我打开了 WebDav 并且工作正常 是否可以使用 Devise 登录 用户与 dav4rack 来启
  • 在行为方面,如何仅运行一个场景?

    我有一个 行为 功能 对其进行了大量测试 我只需要运行一个特定的场景来满足开发需求 我该怎么做 最好在命令行上 如果您想对该功能运行单个测试 请使用 n or name标志似乎想要后面的文本Scenario behave n This is
  • 由于表变异,触发器无法执行

    我想知道这个问题是什么问题 当我执行存储过程时 它不断向我显示此错误 我的目标是在使用存储过程将数据更新到表中之前 我想检查用户输入的触发器中的错误 SQL gt exec PRC PAY TRIP 1031 2031 Cash 200 B
  • Selenium 2 WebDriver NoClassDefFoundErrorS

    我正在与Selenium 2 WebDriver在 Eclipse 中一切正常 但是 当我想在没有 Eclipse 的情况下测试我的 WebDriver 测试用例时 会发生许多丢失的类 首先它开始于 NoClassDefFoundError
  • 使用 Scala 读取 Excel 文件

    我正在编写一个快速测试 使用电子表格中的数据注册用户 想法是转到网站 gt 单击注册 gt 读取Excel行A1和B1的电子邮件和密码 gt 在注册网站上使用此数据 gt 完成注册 gt 注销 gt 使用A2和B2行中的信息注册新用户 gt
  • UICollectionView不显示图片[重复]

    这个问题在这里已经有答案了 我正在显示所有目录中的图片 但是它不显示图片 我将 NSLog 放入代码中 以便我可以找出哪些代码正在运行 并且我只在日志中得到 j 我在日志中没有看到 a 你觉得哪里不对 void viewDidLoad su
  • 更新 Spacy 的内置 NER 模型而不是覆盖

    我正在使用 Spacy 的内置模型en core web lg并想使用我的自定义实体来训练它 在这样做的同时 我面临两个问题 它会用旧数据覆盖新的训练数据 并导致无法识别其他实体 例如 训练之前 它可以识别 PERSON 和 ORG 但是训
  • importxml google 电子表格 - 新 Google 表格中出现“无法解析 xml 内容”错误

    我试图从谷歌电子表格上的链接获取一些详细信息 Link http www justdial com Gurgaon Travel Agents ct 302 http www justdial com Gurgaon Travel Agen
  • Silverlight 3 中的剪贴板支持

    我正在考虑开发一个在 DataGrid 中显示大量信息的 Silverlight 应用程序 我希望以某种方式让用户能够通过剪贴板将其复制到 Excel 中 这在 Silverlight 3 中可能实现吗 不可以 SL3 中不提供此功能 请阅
  • 我需要在 BlackBerry Webworks 应用程序中嵌入 > 4MB 的内容文件(适用于 BlackBerry 6/7)。我有什么选择?

    我正在开发一个内容丰富的 Webworks 应用程序 为了使应用程序有用 它需要维护一个本地内容数据库 SQL 形式大约 4MB 进一步减少数据库的唯一方法是删除整个内容类别 我最初的想法是 我将 SQL 文件嵌入到应用程序中 就像 CSS
  • 如何以编程方式滚动到 WinRT 中文本框的底部?

    我正在为 WinRT 编写一个简单的应用程序 但我无法找到一种在代码中自动滚动到文本框底部的方法 我正在将日志信息写入文本框 并希望它滚动 以便最新的条目在框中可见 但似乎没有任何效果 以下是我尝试过的一些事情 将文本框放置在 Scroll
  • Kafka - 代理:消息大小太大

    I get Message size too large当我尝试发送超过 1 Mb 大小的消息时出现异常 当我尝试生成消息时 该错误出现在我的客户端应用程序中 经过一番谷歌搜索后 我发现应该更改设置以增加最大消息大小 嗯 我在 kafka
  • Popover segue 到静态单元 UITableView 导致编译错误

    我目前有一个带有两个视图控制器的应用程序 第一个是具有嵌入式表视图的视图控制器 该表视图具有动态单元格 第二个是带有静态单元格的表视图控制器 如果我通过选择动态表的单元格之一将 Segue 添加到静态表视图控制器 使用 Push 或 Mod
  • 在 Netbeans 中更快地搜索文件

    是否有现有的插件或调整可以加速 Netbeans 中的 转到文件 搜索 与 Eclipse 相比 Netbeans 搜索速度太慢 特别是如果有多个大型项目 I know I can use CTRL O for Go To Type but
  • fopen什么时候会失败?

    在我的 PHP 代码中 我打开一个文件并向其中附加文本 我使用这段代码 ourFileHandle fopen ourFileName a or die can t open file 当加载 PHP 页面时会发生这种情况 现在如果两个人同