我尝试通过 API 对字段值进行大规模更新,但我遇到了 PHP 脚本的最大执行时间。
我将我的工作分成较小的任务,以作为较小的工作异步运行它们......
我找到了这篇文章,看起来不错,但评论有点令人反感……使用 curl 运行外部脚本文件会阻止调用者文件触发最大执行时间,还是 curl 仍会等待来自服务器的响应和杀死我的页面?
真正的问题是:如何在 PHP 中执行异步作业?有点像阿贾克斯。
编辑::///
有一个项目管理工具,其中包含大量数据行。我正在使用这个工具 API 来访问数据行并将它们显示在我的页面上。使用我的工具的用户将使用复选框选择多行数据,然后在框中键入一个新值。然后用户将按下运行更新脚本的“更新行值”按钮。
此更新脚本将可能选择的数百或数千个项目分成 100 个组。
此时,我打算使用一些异步方法来联系项目管理工具并更新所有 100 项。
因为在更新这些项目时,该服务器可能需要很长时间才能运行其进程,所以我需要确保拆分这些作业的原始页面不再等待来自该操作的请求,以便我可以启动更多请求更新项目。并允许我的服务器页面对我的用户说“好的,更新正在进行中,可能需要一段时间,一旦完成,我们将发送一封电子邮件”。
$step = 100;
$itemCount = GetItemCountByAppId( $appId );
$loopsRequired = $itemCount / $step;
$loopsRequired = ceil( $loopsRequired );
$process = array();
for( $a = 0; $a < $loopsRequired; $a++ )
{
$items = GetItemsByAppId( $appId, array(
"amount" => $step,
"offset" => ( $step * $a )
) );
foreach( $items[ "items" ] as $key => $item )
{
foreach( $fieldsGroup as $fieldId => $fieldValues )
{
$itemId = $item->__attributes[ "item_id" ];
/*array_push( $process, array(
"itemId" => $itemId,
"fieldId" => $fieldId,
) );*/
UpdateFieldValue( $itemId, $fieldId, $fieldValues );
// This Update function is actually calling the server and I assume it must be waiting for a response... thus my code times out after 30 secs of execution
}
}
//curl_post_async($url, $params);
}