将长 运行 PHP-脚本的状态传达给其他 PHP-SSE 脚本的最佳方式
Best way to communicate the status of long running PHP-script to other PHP-Script for SSE
我有一个很长的 运行 PHP-脚本,它处理一个大的 XML-文件。
- 用户 XML 上传到 upload.php
- upload.php运行几分钟
- 浏览器创建新的 EventSource("status.php") 来询问当前状态
那么让 status.php 知道 upload.php 在做什么的最佳实践方法是什么?
计划是在 upload.php 中写一个日志文件,让 status.php 查看日志文件中是否有新内容。
但是可以肯定的是,还有其他方法可以让 upload.php 和 status.php 一起通信,或者不?
我通常做的是创建一个数据库 table 来保存代表文件上传的记录,以及 return 对这些记录的引用(我喜欢使用 GUID 令牌,而不仅仅是自动 -递增 ID)在初始文件上传请求时发送给客户端。然后客户端轮询接受标识符作为参数的服务,验证记录属于用户,然后 returns 详细信息。处理文件导入的进程根据需要更新记录。一旦记录指示完成或失败,客户端可以在导入完成或失败后重定向到他们应该去的地方。在失败时使用诊断详细信息、异常等更新“注释”字段。
CREATE TABLE `file_imports` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) unsigned NOT NULL,
`file_name` varchar(128) NOT NULL,
`status` enum('Pending','Processing','Success','Failed') NOT NULL DEFAULT 'Pending',
`notes` longtext,
`create_date` datetime NOT NULL,
`complete_date` datetime DEFAULT NULL,
`token` varchar(80) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY (`token`),
KEY `file_imports_user_fk` (`user_id`),
CONSTRAINT `file_imports_user_fk` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
);
我有一个很长的 运行 PHP-脚本,它处理一个大的 XML-文件。
- 用户 XML 上传到 upload.php
- upload.php运行几分钟
- 浏览器创建新的 EventSource("status.php") 来询问当前状态
那么让 status.php 知道 upload.php 在做什么的最佳实践方法是什么?
计划是在 upload.php 中写一个日志文件,让 status.php 查看日志文件中是否有新内容。
但是可以肯定的是,还有其他方法可以让 upload.php 和 status.php 一起通信,或者不?
我通常做的是创建一个数据库 table 来保存代表文件上传的记录,以及 return 对这些记录的引用(我喜欢使用 GUID 令牌,而不仅仅是自动 -递增 ID)在初始文件上传请求时发送给客户端。然后客户端轮询接受标识符作为参数的服务,验证记录属于用户,然后 returns 详细信息。处理文件导入的进程根据需要更新记录。一旦记录指示完成或失败,客户端可以在导入完成或失败后重定向到他们应该去的地方。在失败时使用诊断详细信息、异常等更新“注释”字段。
CREATE TABLE `file_imports` (
`id` int(11) unsigned NOT NULL AUTO_INCREMENT,
`user_id` int(11) unsigned NOT NULL,
`file_name` varchar(128) NOT NULL,
`status` enum('Pending','Processing','Success','Failed') NOT NULL DEFAULT 'Pending',
`notes` longtext,
`create_date` datetime NOT NULL,
`complete_date` datetime DEFAULT NULL,
`token` varchar(80) NOT NULL,
PRIMARY KEY (`id`),
UNIQUE KEY (`token`),
KEY `file_imports_user_fk` (`user_id`),
CONSTRAINT `file_imports_user_fk` FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) ON DELETE CASCADE
);