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

时间:2016-12-19 17:13:22

标签: php mysql csv

我的php脚本读取用户指定的CSV URL并将数据写入mysql数据库,用户可以在Web GUI上查看他的数据。将使用新请求删除表的字段。 这非常好 - 但是:

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

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

1 个答案:

答案 0 :(得分:1)

我假设您的应用使用Apache和mod_php,这是一种常见但不是唯一的方法。当一个新的HTTP请求由Apache构成时,它会产生一个新的PHP进程来处理请求。新的PHP进程必须完成所需的一切,并且当它完成时,PHP终止。

如果我理解你,你有一个提交URL(文本字段)的表单;当PHP运行时,该URL在php中被提取并且内容被放入数据库中。然后将数据库呈现为html并作为表单结果返回 - 或类似的东西。当两个人同时这样做时,事情变得混乱,因为他们都使用相同的表名。

如果我理解得当,应用程序需要:

  • 使用以用户特定的内容为前缀的表名 - 例如他们的登录名或类似的东西。
  • 在服务器上使用一些锁定机制,以便一次一个地使用一个锁定机制。队列是强制执行的。我想这就是你所问的......

我不确定这一点 - 这是一次学习练习还是别的什么,但是作为一个解决方案一次避免:它不容易使它正常工作而不是网络的工作方式'整体。

使用表名前缀将类似于:

  • 决定区分每个用户的方法:也许你可以使用一个带有autoincrement行id的表,并使用行id?也许你有会话登录,可以使用登录名。确保只有'简单'字符在用于表格的id中:例如使用preg_replace()过滤除ASCII字母和数字之外的所有字母。

  • 如果您要创建一个具有常量名称的表格,请添加新的' id'对此:

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

    变为:

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

您可能会发现在返回html时保留新ID很有用,所以您也需要安排它。