如果我在生成普通HTML页面时设置此标题,它是否会给我带来任何好处?
我看到那里的一些框架会设置这个头属性,我想知道为什么......(和其他标题一样Content-Type: text/html)
浏览器是否加载网站更快或更顺畅?
ps:他们这样做:
ob_start();
... stuff here...
$content = ob_get_contents();
$length = strlen($content);
header('Content-Length: '.$length);
echo $content;
Run Code Online (Sandbox Code Playgroud) 如何在不等待的情况下异步运行PHP代码?我有一个长期运行(几乎无限)应该在服务器启动时运行,并且应该异步处理而无需等待.
我猜可能的选择是:
我在本地服务器上运行PHP脚本,当发生某些事件时会发送电子邮件,例如生日提醒.
请建议如何在不在浏览器中打开页面的情况下实现此目的.
我想运行一个PHP脚本,它会发送一堆电子邮件(新闻通讯),但由于它可能需要一段时间才能运行,我希望用户立即被重定向到一个页面,其中包含"您的新闻通讯排队等待的消息"送出."
到目前为止,标头重定向工作,但直到所有电子邮件发送后才会导致重定向.我可以在发送重定向后关闭连接,以便浏览器立即对重定向进行操作吗?我试过这样的东西
ob_start();
ignore_user_abort(true);
header( "refresh:1;url=waitforit.php?msg=Newsletters queued up, will send soon.");
header("Connection: close");
header("Content-Length: " . mb_strlen($resp));
echo $resp;
//@ob_end_clean();
ob_end_flush();
flush();
以各种排列和组合但无济于事.我怀疑它不能这么简单,但在我开始搞乱cron作业或自定义守护进程之前,我想我会考虑这种方法.谢谢
例如下面的块头建议,但没有运气
ob_start();
ignore_user_abort(true);
header( "refresh:1;url=mailing_done.php?msg=Newsletters queued for sending.");
header("Connection: close");
header("Content-Length: 0" );
//echo $resp;
ob_end_flush();
flush(); Run Code Online (Sandbox Code Playgroud) 对于耗时的任务(电子邮件发送,图像处理......你明白了),我想运行异步PHP任务.
在Linux上这很容易,但我正在寻找一种适用于Windows的方法.
我希望它变得简单,应该如此.没有火炮,没有SQL排队,没有一次又一次地安装东西 ......我只想运行一个该死的异步任务.
所以我尝试了Symfony Process Component.问题是,同步运行任务工作正常,但在异步运行时,它会沿主脚本退出.
有没有办法来解决这个问题?
composer require symfony/process
Run Code Online (Sandbox Code Playgroud)
的index.php
<?php
require './bootstrap.php';
$logFile = './log.txt';
file_put_contents($logFile, '');
append($logFile, 'script (A) : '.timestamp());
$process = new Process('php subscript.php');
$process->start(); // async, subscript exits prematurely…
//$process->run(); // sync, works fine
append($logFile, 'script (B) : '.timestamp());
Run Code Online (Sandbox Code Playgroud)
subscript.php
<?php
require './bootstrap.php';
$logFile = './log.txt';
//ignore_user_abort(true); // doesn't solve issue…
append($logFile, 'subscript (A) : '.timestamp());
sleep(2);
append($logFile, 'subscript (B) : '.timestamp());
Run Code Online (Sandbox Code Playgroud)
bootstrap.php中
<?php
require …Run Code Online (Sandbox Code Playgroud) 需要使这块代码与其余代码异步。它会收集 wp 帖子并向我的网址发送帖子请求。该插件应异步运行,并且不会妨碍 wordpress 站点的运行。
for ($x=0; $x<=n; $x++) {
$data = posts[$x];
$ch = curl_init('http://myurl.com/');
curl_setopt($ch, CURLOPT_CUSTOMREQUEST, "POST");
curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, true);
curl_setopt($ch, CURLOPT_HTTPHEADER, array(
'ACCEPT: application/json',
'Content-Length: ' . strlen($data))
);
$result = curl_exec($ch);
curl_close($ch);
}
Run Code Online (Sandbox Code Playgroud) 在我的 Web 应用程序中,当用户更改其帐户时,我调用 php mail() 函数向该用户发送电子邮件通知。执行此操作后,我发现帐户更改操作需要非常长的时间(> 20 秒)才能完成。我怀疑这是因为 PHP 等待 mail() 函数发送电子邮件。有没有什么办法不用等待就可以直接调用下一行代码?
谢谢,
保罗