单独进程中的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调用函数的主要内容,如果未能解决你的问题,请参考以下文章
将 PHP 调用的 .exe 程序(作为单独的进程,而不是在 PHP 中运行)的输出发送回 iPhone 客户端的可能方法
如何从单独的 js 文件中调用角度 $scope 函数? [复制]
Android 逆向Android 进程注入工具开发 ( 注入代码分析 | 远程调用 目标进程中 libc.so 动态库中的 mmap 函数 二 | 准备参数 | 远程调用 mmap 函数 )(代码片