相关疑难解决方法(0)

如何在PHP应用程序中使用多线程

有没有一种在PHP中实现多线程模型的现实方法,无论是真实的,还是仅仅模拟它.一段时间后,有人建议你可以强制操作系统加载另一个PHP可执行文件实例并处理其他同步进程.

这个问题是当PHP代码完成执行时,PHP实例仍然在内存中,因为没有办法从PHP中删除它.因此,如果您正在模拟几个线程,您可以想象会发生什么.所以我仍然在寻找一种可以在PHP中有效地完成或模拟多线程的方法.有任何想法吗?

php multithreading

393
推荐指数
12
解决办法
44万
查看次数

php执行后台进程

我需要在用户操作时执行目录副本,但目录非常大,所以我希望能够执行这样的操作,而无需用户知道副本完成所需的时间.

任何建议将不胜感激.

php

248
推荐指数
8
解决办法
22万
查看次数

发送http响应后继续处理php

我的脚本由服务器调用.从服务器我会收到ID_OF_MESSAGETEXT_OF_MESSAGE.

在我的脚本中,我将处理传入的文本并使用params生成响应:ANSWER_TO_IDRESPONSE_MESSAGE.

问题是我正在向incomming发送响应"ID_OF_MESSAGE",但是在收到http响应200之后,向我发送消息的服务器将把他的消息设置为发送给我(这意味着我可以发送给他的响应).

解决方案之一是将消息保存到数据库并制作一些将每分钟运行的cron,但我需要立即生成响应消息.

是否有一些解决方案如何发送到服务器http响应200而不是继续执行PHP脚本?

非常感谢

php http response

91
推荐指数
7
解决办法
6万
查看次数

关闭连接后继续处理

有没有办法在PHP中关闭连接(基本上告诉浏览器,而不是没有更多的数据),但继续处理.我想到的具体情况是我想要提供缓存数据,然后如果缓存已过期,我仍然会提供缓存数据以获得快速响应,关闭连接,但继续处理以重新生成并缓存新数据.基本上唯一的目的是使网站看起来更具响应性,因为在用户等待内容重新生成时不会偶尔出现延迟.

更新:

PLuS最接近我正在寻找的答案.为了澄清一些人,我正在寻找能够实现以下步骤的东西:

  1. 用户请求页面
  2. 连接将打开到服务器
  3. PHP检查缓存是否已过期,如果仍然是新鲜的,则提供缓存和关闭连接(在此处结束).如果已过期,请继续执行4.
  4. 服务过期的缓存
  5. 关闭连接,以便浏览器知道它不等待更多数据.
  6. PHP重新生成新数据并缓存它.
  7. PHP关闭.

更新:

这很重要,它必须是纯粹的PHP解决方案.安装其他软件不是一种选择.

php

27
推荐指数
3
解决办法
2万
查看次数

如何使用fastcgi_finish_request()的示例

有人可以展示如何使用fastcgi_finish_request()函数的简单示例吗?我用谷歌搜索,但只发现了一些一般提及它,有些人说他们成功使用它但我找不到一个代码的例子.

例如,我有一个PHP对象.要向浏览器发送响应,我会生成HTML,然后通过它返回getResult().然后回应结果.

像这样:

$obj = new controller();
echo $o->getResult();
Run Code Online (Sandbox Code Playgroud)

假设我想利用这种优化技术将结果发送到浏览器,然后完成一些可能很长的过程,比如连接到某些API,比如Facebook API.

我该怎么做呢?我明白,基本上我可以调用fastcgi_finish_request();然后继续执行PHP脚本.

我只需要查看示例代码,我自己也不够聪明.

php fastcgi

19
推荐指数
1
解决办法
1万
查看次数

如何使PHP脚本运行另一个PHP脚本

我试图完成与之前的Python问题完全相同的事情,但在PHP中.请参阅我以前的(已回答)问题

上一个问题的PHP脚本做了一些事情,然后在同一台服务器上运行另一个PHP脚本,做了一些事情然后退出(而第二个脚本仍然继续它的工作).我该如何实现这一目标?

请注意,PHP脚本同时也是一个网页(所以也许我们可以像以前的问题一样使用它,我的问题的答案是片段,这使得python只是打开url而不是运行子进程...虽然我没有有一个线索,如果这是有用的信息,也许它在PHP中不同,我在PHP中没有太多的经验)...而且我想让每个脚本独立 - 所以如果第一个PHP脚本将完成我想第二个PHP脚本到即使第一个结束,继续工作.

您认为最优雅的方式是什么?会回应iframe的工作还是应该以不同的方式做到这一点?

php

13
推荐指数
3
解决办法
5万
查看次数

使用Symfony Process运行后台任务,而无需等待进程完成

用户提交表单后,我想渲染一个视图文件,然后我想启动一个后台任务来处理五个MS Excel文件(每个文件最多可能有2000行),但是这样就让用户不要不必等待该过程完成才能查看该页面.任务完成后,我将通过电子邮件通知用户.

我正在使用Symfony Framework 3.我在下面包含了我的代码.它没有做我想要实现的目标.提交表单后,页面仅在整个后台任务完成时加载.

我不确定但是经过google搜索后,我认为kernel.terminate事件在这里很有用.但我似乎无法理解如何使用它.

你能告诉我如何解决这个问题吗?

这是我的代码:

我创建了一个控制台命令:

class GreetCommand extends ContainerAwareCommand {

  protected function configure()
  {
    $this->setName('hello:world');
  }

  protected function execute(InputInterface $input, OutputInterface $output)
  {
   // My code to execute
  }

}
Run Code Online (Sandbox Code Playgroud)

在我的控制器中我有

$process = new Process('ls -lsa');
$process->disableOutput();
$that = $this;

$process->start(function ($type, $buffer) use ($that) {
        $command = new GreetCommand();
        $command->setContainer($this->container);
        $input = new ArrayInput(array());
        $output = new NullOutput;
        $resultCode = $command->run($input, $output);

 });

 return $this->render('success.html.php',  array('msg' => 'Registraion Successful'));
Run Code Online (Sandbox Code Playgroud)

更新

我已经使用PHP的连接处理功能解决了这个问题.

感谢这篇文章

php symfony

13
推荐指数
5
解决办法
2万
查看次数

Symfony在发送响应后运行代码

我看了看这个问题.我正在寻找一种方法来做那个问题的OP也想要的,那就是在发送http响应之后继续处理php,但是在Symfony2中.

我实现了一个在每次内核终止后触发的事件.到目前为止一切都那么好,但我想要的是它在CERTAIN终止后,在特定的控制器动作中触发,例如在发送表单之后,而不是每次请求时.这是因为我想在某些时候做一些繁重的任务,并且不希望最终用户等待页面加载.

知道我该怎么办?

<?php


namespace MedAppBundle\Event;

use JMS\DiExtraBundle\Annotation\InjectParams;
use JMS\DiExtraBundle\Annotation\Service;
use JMS\DiExtraBundle\Annotation\Tag;
use Psr\Log\LoggerInterface;
use Symfony\Component\DependencyInjection\ContainerInterface;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\Console\ConsoleEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use JMS\DiExtraBundle\Annotation\Inject;
/**
 * Class MedicListener
 * @package MedAppBundle\EventListener
 * @Service("medapp_test.listener")
 * @Tag(name="kernel.event_subscriber")
 */
class TestListener implements EventSubscriberInterface
{
    private $container;

    private $logger;

    /**
     * Constructor.
     *
     * @param ContainerInterface $container A ContainerInterface instance
     * @param LoggerInterface $logger A LoggerInterface instance
     * @InjectParams({
     *     "container" = @Inject("service_container"),
     *     "logger" = @Inject("logger")
     * })
     */ …
Run Code Online (Sandbox Code Playgroud)

php httpresponse symfony

9
推荐指数
1
解决办法
6663
查看次数

当HTTP连接死亡时,apache执行的PHP脚本是否被杀死?

我正在使用PHP运行Apache的标准配置.我想知道当客户端请求导致PHP脚本执行的页面时会发生什么,然后客户端在脚本完成之前终止来自服务器的请求.Apache是​​否以某种方式杀死脚本,或者它是否允许完成?

php apache

6
推荐指数
1
解决办法
1362
查看次数

在PHP中关闭连接但继续执行脚本

任何人都知道如何关闭连接(除了flush()?),但之后继续执行一些代码.

我不希望客户端看到页面完成后可能发生的漫长过程.

php buffering

4
推荐指数
2
解决办法
1701
查看次数