相关疑难解决方法(0)

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

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

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

php multithreading

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

如何从PHP发送GET请求?

我打算使用PHP来满足一个简单的要求.我需要从URL下载XML内容,我需要向该URL发送HTTP GET请求.

我如何在PHP中执行此操作?

php get http

264
推荐指数
8
解决办法
49万
查看次数

php执行后台进程

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

任何建议将不胜感激.

php

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

如何在PHP中创建异步HTTP请求

PHP中有没有办法进行异步HTTP调用?我不关心响应,我只想做类似的事情file_get_contents(),但是在执行其余代码之前不要等待请求完成.这对于在我的应用程序中引发排序的"事件"或触发长进程非常有用.

有任何想法吗?

php asynchronous http

202
推荐指数
11
解决办法
16万
查看次数

url不存在时的file_get_contents

我正在使用file_get_contents()来访问URL.

file_get_contents('http://somenotrealurl.com/notrealpage');
Run Code Online (Sandbox Code Playgroud)

如果URL不是真实的,则返回此错误消息.如何才能优雅地将其置于错误状态,以便我知道页面不存在并相应地执行操作而不显示此错误消息?

file_get_contents('http://somenotrealurl.com/notrealpage') 
[function.file-get-contents]: 
failed to open stream: HTTP request failed! HTTP/1.0 404 Not Found 
in myphppage.php on line 3
Run Code Online (Sandbox Code Playgroud)

例如在zend你可以说: if ($request->isSuccessful())

$client = New Zend_Http_Client();
$client->setUri('http://someurl.com/somepage');

$request = $client->request();

if ($request->isSuccessful()) {
 //do stuff with the result
}
Run Code Online (Sandbox Code Playgroud)

php file-get-contents

69
推荐指数
7
解决办法
8万
查看次数

关闭连接后继续处理

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

更新:

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

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

更新:

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

php

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

PHP/Curl:HEAD请求在某些站点上需要很长时间

我有一个简单的代码,可以对URL执行头请求,然后打印响应头.我注意到在某些网站上,这可能需要很长时间才能完成.

例如,请求http://www.arstechnica.com大约需要两分钟.我使用另一个执行相同基本任务的网站尝试了相同的请求,并立即返回.所以我必须设置错误导致这种延迟的东西.

这是我的代码:

$ch = curl_init();
curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_URL, $url);
curl_setopt ($ch, CURLOPT_CONNECTTIMEOUT, 20);
curl_setopt ($ch, CURLOPT_USERAGENT, $_SERVER['HTTP_USER_AGENT']);

// Only calling the head
curl_setopt($ch, CURLOPT_HEADER, true); // header will be at output
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, 'HEAD'); // HTTP request is 'HEAD'

$content = curl_exec ($ch);
curl_close ($ch);
Run Code Online (Sandbox Code Playgroud)

以下是指向具有相同功能的网站的链接:http://www.seoconsultants.com/tools/headers.asp

上面的代码,至少在我的服务器上,需要两分钟才能检索到www.arstechnica.com,但上面链接中的服务会立即返回.

我错过了什么?

php performance curl header http-headers

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

使用phpmailer发送异步电子邮件

是否可以使用phpmailer发送异步电子邮件?

常规邮件发送代码段如下:

$mail->Send();

在等待继续之前,PHP等待Send()返回结果.有没有可能让phpmailer立即返回结果,而无需等待真正的电子邮件发送例程完成.

phpmailer

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

通过PhpMailer异步发送电子邮件

我正在使用PHPMailer发送效果很好的电子邮件.但问题是,由于它同步发送电子邮件,后续页面加载需要很长时间.

我正在使用PhpMailer,如本例所示https://github.com/PHPMailer/PHPMailer/blob/master/examples/gmail.phps

我想知道是否有办法使电子邮件传递异步.我对此进行了研究,发现sendmail可以选择将DeliveryMode设置为"后台模式" - 来源http://php.net/manual/en/function.mail.php

mail($to, $subject, $message, $headers, 'O DeliveryMode=b');
Run Code Online (Sandbox Code Playgroud)

我想知道在PhpMailer中是否可以做类似的事情?有人有这个成功吗?

编辑: - (附加信息)好像PhpMailer可以配置为使用sendmail - https://github.com/PHPMailer/PHPMailer/blob/master/class.phpmailer.php 因此我想知道这是否可以某种方式利用启用背景交付.

/**
 * Which method to use to send mail.
 * Options: "mail", "sendmail", or "smtp".
 * @type string
 */
public $Mailer = 'mail';

/**
 * The path to the sendmail program.
 * @type string
 */
public $Sendmail = '/usr/sbin/sendmail';
/**
 * Whether mail() uses a fully sendmail-compatible MTA.
 * One which supports sendmail's "-oi -f" options.
 * @type boolean …
Run Code Online (Sandbox Code Playgroud)

php email asynchronous phpmailer

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

Web请求后运行后台进程

我有兴趣在Web请求之后启动进程,或者可能在初始线程完成后分支新进程.

我宁愿不使用cron,因为我将要运行的作业的性质以及它们需要运行的频率,等待一分钟刷新不是一种选择.

我正在考虑这样做的几种方法:

1)中调用JavaScript的网页揭开序幕的过程,并立即返回,然后之后运行任务,例如AJAX("/ run_jobs.php?工作= 123")......你的想法

2)线程完成后分叉新线程; 即output_page(); 新线程(); run_job(123); 出口();

任何人对此主题有任何想法或有这方面的经验.

php ajax cron jobs multithreading

5
推荐指数
1
解决办法
2671
查看次数