【问题标题】:How to create a resource with Resource id?如何创建具有资源 ID 的资源?
【发布时间】:2013-05-07 00:09:11
【问题描述】:

当我使用proc_open 时,它返回一个表示为Resource id #4 的资源句柄。这段代码在服务器上运行,我想再次使用 id 使用这个“句柄”。但是在客户端和服务器之间进行了某种数据传输之后,我得到的只是资源的 id,Resource id #4,而不是指针。

是否可以使用唯一的 id 重新创建资源?

【问题讨论】:

    标签: php proc-open resource-id


    【解决方案1】:

    不,这永远不会可靠地工作,因为在新请求中,您甚至不知道资源是否仍然可以访问 - 在像 Apache 这样的预分叉环境中,第二个请求可能由完全不同的进程执行,其中访问在操作系统级别上,相同的资源是不可能的。此外,在集群和/或负载平衡环境中,第二个请求甚至可能最终在完全不同的服务器上。

    【讨论】:

    • 但是proc_open创建的进程在我使用proc_close之前不应该关闭,因此该进程仍在运行。那么,当它的进程 id 可以访问时,是否可以使用该进程或创建一个新的句柄?
    • 如前所述,在常规托管情况下甚至可能与所讨论的进程没有关系 - Apache 至少在正常情况下 preforks 10 个孩子,这使得这有 10% 的机会可以工作最好。您可以使用proc_get_status 来检索进程的 PID,并稍后使用基于 shell 的命令对其进行处理,但这是您能得到的最好的。
    • 那太糟糕了。资源可以存储在服务器内存中的某个位置吗?当请求来时,我只是使用存储的资源?
    • Resource 只是正在运行的 PHP 实例的本地内容。如果您想在服务器上存储一段时间有效的内容,请按照上面的建议使用PID
    • 我明白了。我将在这个过程中尝试一些基于 shell 的命令。这将非常复杂,因为我想使用STDIN 将字符串输入到进程正在运行的程序并从STDOUT检索结果
    猜你喜欢
    • 2021-05-24
    • 2011-03-29
    • 2011-02-15
    • 1970-01-01
    • 2022-07-24
    • 1970-01-01
    • 2021-02-27
    相关资源
    最近更新 更多