单独进程中的PHP调用函数

Posted

技术标签:

【中文标题】单独进程中的PHP调用函数【英文标题】:PHP call function in separate process 【发布时间】:2017-08-01 13:45:59 【问题描述】:

抱歉,文字太长了。

我正在寻找在特定行为发生时触发 php 函数执行的想法(在不同目录中,经过测试和在同一目录中)。

系统是Debian和php框架yii。

通过 API,我们从远程服务器接收新数据,对于我们收到的数据中的特定值,我需要在单独的进程中启动函数。无需等待其完成。 由于 API 响应时间,我无法将此功能集成到其中,并且集成会破坏 API 使其无法使用。

我已经阅读了有关 *** 的数十个答案以及许多其他示例。

为了进行测试,我只是尝试在特定位置创建新文件夹,但没有创建文件(我认为是权限问题,但无法确认,因为如果从主代码 - api 完成它会导致)。 它应该执行以下操作:

将从 API 接收到的 2 个参数传递给函数 如果文件夹不存在则创建文件夹 调用使用fpdf打印pdf文件的内部类。 保存文档并使用 PHPMailer 邮寄。

不能使用 pcntl_fork,因为它需要额外安装(我不允许这样做)。

涵盖的主题:

使用 pcntl_fork 进行分叉(到达时执行停止。) popen/pclose, exec, proc_open/proc_close(没有回复,无法确认它是否真的进入了函数)。

当然,这种情况排除了使用 include 和 require 的可能性。

无法发布 api 代码,但这是我要求它执行的操作:

background.php

$docs_dir='test_folder';
if (!file_exists('/var/www/created_documents/'.$docs_dir))

    mkdir('/var/www/created_documents/'.$docs_dir, 0777, true);
    chmod('/var/www/created_documents/'.$docs_dir, 0777);

它什么也没做。

我在 api 代码中使用的几个例子来跳转到它(许多其他的在工作期间被删除了)。

$proc = popen('php ' . __DIR__ . '/background.php &', 'r');
return $proc;
while (!feof($proc))

    $data = fgets($proc);
    var_dump($data);



exec("php background.php");


$cmd = "php background.php";
$timer = popen("start ". $cmd, "r");
pclose($timer);


exec($cmd . " > /dev/null &");
pclose(popen("php background.php &","r"));

【问题讨论】:

听起来像是在使用队列,将作业堆叠起来并在后台处理它们。 很难在 dar 中开发,使用以下 2 行将错误记录在文件中:ini_set("log_errors", 1); ini_set("error_log", path_to_file); 【参考方案1】:

您可以使用curl and its async funcionality 发出单独的内部http 请求。

或者您可以使用队列机制,其中一部分正在触发一个事件,另一部分正在使用它。 RabbitMQ 或 Gearman 可以为您做到这一点。

【讨论】:

Curl 看起来是唯一的选择,因为我无法安装任何新东西。将继续尝试这种方法。 感谢您的建议。我稍后会尝试,因为我不得不同时更改到另一个子项目。

以上是关于单独进程中的PHP调用函数的主要内容,如果未能解决你的问题,请参考以下文章

Python:定时在单独的线程中调用的函数

如何从单独文件中的另一个视图调用主干视图函数

如何通过vue实例调用单独的JS文件中的函数[重复]

将 PHP 调用的 .exe 程序(作为单独的进程,而不是在 PHP 中运行)的输出发送回 iPhone 客户端的可能方法

如何从单独的 js 文件中调用角度 $scope 函数? [复制]

Android 逆向Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 二 | 准备参数 | 远程调用 mmap 函数 )(代码片