gpt4 book ai didi

php - 强制 PHP 等待另一个请求完成?

转载 作者:行者123 更新时间:2023-11-29 11:07:05 25 4
gpt4 key购买 nike

我的 php 脚本读取用户指定的 CSV URL 并将数据写入 mysql 数据库,用户可以在 Web GUI 上看到他的数据。该表的字段将随着新请求而删除。这非常有效——但是:

如果 2 个(或更多)用户同时请求自己的 CSV URL,有时他们获取的不是自己的数据(他们从之前的过程中获取表的数据)。有没有办法将用户设置为“等待”或“待处理”直到另一个请求完成?

希望你能明白。感谢您的任何建议。

最佳答案

我假设您的应用程序使用 Apache 和 mod_php,这是一种常见但不是唯一的方法。当 Apache 发出新的 HTTP 请求时,它会生成一个新的 PHP 进程来处理该请求。新的 PHP 进程必须执行所需的所有操作,完成后 PHP 就会终止。

如果我理解你的意思,你有一个提交 URL(文本字段)的表单;当 PHP 运行时,在 php 中获取 URL 并将内容放入数据库中。然后数据库被渲染成 html 并作为表单结果返回——或者类似的东西。当两个人同时执行此操作时,事情会变得困惑,因为他们都使用相同的表名称。

如果我理解正确,应用程序需要:

  • 使用带有特定于用户的前缀的表名 - 例如他们的登录名或类似名称。
  • 在服务器上使用某种锁定机制,以便强制执行“一次一个”队列。我想这就是你问的问题......

我不确定这一点的意义——这是否是一种学习练习,或者其他什么,但避免一次一个作为解决方案:让它正常工作并不容易,也不是网络整体“运作”的方式。

使用表名前缀会像这样:

  • 决定一个方法来区分每个用户:也许你可以使用一个带有自动增量行id的表,并且使用行id?也许您有 session 登录并且可以使用登录名。确保用于表的 id 中仅包含“简单”字符:例如使用 preg_replace() 过滤掉除 ASCII 字母和数字之外的所有内容。

  • 在您创建具有常量名称的表的位置,将新的“id”添加到其中:

    $sql = "create table csv (" . $fields . ")";

    变成:

    $sql = "create table csv" . $id . " (" . $fields . ")";

您可能会发现在返回 html 时保留新 ID 很有用,因此您也需要对此进行安排。

关于php - 强制 PHP 等待另一个请求完成?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41227721/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com