PHP调用shell脚本来处理多个用户
我有一个C模拟,我正在为它创建一个图形化的web界面。我使用HTML和ajax来调用PHP,PHP反过来调用shell来运行模拟。然后将输出传递回网页 该脚本生成一个输出文件(带有输出到网页的链接)以及一个图形(使用对gnu plot的调用并引用输出文件)。该网页还允许用户上传用于C模拟的输入文件。所有这些文件都是特定于用户的 如果一次网页上只有一个用户,则没有任何问题。但是,如果有5个人想同时运行模拟,则特定于用户的文件(输出、图形、输入)都将被覆盖并弄乱 我没有任何MySQL的经验,我也不打算为给定的用户保存输出或输入(用户可以下载,如果他/她愿意),所以我希望可能有一个相当简单的解决方案,例如,在服务器上生成一个临时目录,根据用户的IP地址或其他信息在名称中使用某种标识标记。然后,可以在模拟运行几分钟后删除此文件夹。有人对这样的事情有什么想法吗 还是我必须求助于MySQL 编辑:允许最多5个用户同时运行,然后为其他用户创建一个队列也可以,但这可能会更加困难 谢谢,PHP调用shell脚本来处理多个用户,php,shell,multiple-instances,Php,Shell,Multiple Instances,我有一个C模拟,我正在为它创建一个图形化的web界面。我使用HTML和ajax来调用PHP,PHP反过来调用shell来运行模拟。然后将输出传递回网页 该脚本生成一个输出文件(带有输出到网页的链接)以及一个图形(使用对gnu plot的调用并引用输出文件)。该网页还允许用户上传用于C模拟的输入文件。所有这些文件都是特定于用户的 如果一次网页上只有一个用户,则没有任何问题。但是,如果有5个人想同时运行模拟,则特定于用户的文件(输出、图形、输入)都将被覆盖并弄乱 我没有任何MySQL的经验,我也不打
Josh也许您可以在C模拟中使用。或者,您可以设置一个MySQL数据库,并使用。如果您可以使用C,并且能够使用PHP实现ajax,那么mysql可能是与C中的线程相对应的最具时间效率的解决方案(假设C模拟相对复杂)也许您可以在C模拟中使用。或者,您可以设置一个MySQL数据库,并使用。如果您可以使用C,并且能够使用PHP实现ajax,mysql可能是实现与C线程相对应的最具时间效率的解决方案(假设C模拟相对复杂)如果不将输出保存在某个地方,您就无法实现,因此您的临时目录计划很好
- 通过md5()或sha1()或其他方式为每个新用户分配一个唯一的id
- 将id传递给模拟器,并让它在由该id命名的子目录中创建输出文件
- 根据该id呈现链接和图像HREF
- 编写cron以定期清除过时的子目录
每个人都将在一个不可用的URL上获得自己的输出集。如果不将输出保存在某个地方,则无法完成此操作,因此您的临时目录计划很好
- 通过md5()或sha1()或其他方式为每个新用户分配一个唯一的id
- 将id传递给模拟器,并让它在由该id命名的子目录中创建输出文件
- 根据该id呈现链接和图像HREF
- 编写cron以定期清除过时的子目录
每个人都将在一个不可用的URL上获得自己的输出集。您可以为访问用户创建会话标识符,并将该id作为参数传递给您的c程序 当您的c程序为用户创建要显示的文件时,它应该使用该用户的会话标识符生成名称 从网页允许用户查看与其会话标识符匹配的文件。通过这种方式,他们可以看到自己生成的文件,如果用户有一个带有会话标识符的文件,您也可以为用户设置一个控件,而无需对c程序进行不必要的调用
只需为已经创建的服务。根据需要控制该标识符的生存时间 您可以为访问用户创建会话标识符,并将该id作为参数传递给c程序 当您的c程序为用户创建要显示的文件时,它应该使用该用户的会话标识符生成名称 从网页允许用户查看与其会话标识符匹配的文件。通过这种方式,他们可以看到自己生成的文件,如果用户有一个带有会话标识符的文件,您也可以为用户设置一个控件,而无需对c程序进行不必要的调用
只需为已经创建的服务。根据需要控制该标识符的生存时间 如果您将一个指向输出的链接发送回用户,那么输出不应该存在超过几分钟的时间吗?也许。输出包括一个数字(三维数值积分的结果)、一个包含分布的文件(积分范围内的较小范围)和一个图形。输出只在下载的格式中才真正有用,所以我认为用户要么会获取它,要么不会想要它。但是“几分钟”只是一个例子。如果你把一个指向输出的链接发送回用户,那么输出不应该存在超过几分钟的时间吗?也许。输出包括一个数字(三维数值积分的结果)、一个包含分布的文件(积分范围内的较小范围)和一个图形。输出只在下载的格式中才真正有用,所以我认为用户要么会获取它,要么不会想要它。但“几分钟”只是一个例子,这正是我的想法,甚至可以使用cron清除目录。我只是想确定我走的是正确的道路。我对会话ID也不太了解,所以md5()和sha1()是我开始谷歌搜索的好地方。呵呵,我不会说这是“正确”的路径,只是许多可能的路径之一。这正是我的想法,甚至可以使用cron清除目录。我只是想确定我走的是正确的道路。我对会话ID也不太了解,所以md5()和sha1()是我开始谷歌搜索的好地方