加载XML数据而不刷新

时间:2018-10-25 22:57:35

标签: php xml

我有从XML记录中获取一些值的脚本。

有代码:

a -> Maybe a

问题取决于生成第二个XML文件的时间。 $ result_xml花了几秒钟,所以我必须使用sleep(6)函数。 如果删除此链接,则需要刷新页面(至少三次)以获取第二个XML到生成图像的链接。

您有一个更专业的想法吗?我无法确定每张图片会在6秒内生成(有时更短,有时更长)。 是否只有在收到$ result_img后才可以生成结果的方法?预先感谢您的帮助!

我认为值得写。 实际上,它看起来像这样: 脚本从站点返回$ request_xml和XML:

<?php

//Data
$xml_data = '<image_process_call><image_url>https://i.pinimg.com/originals/e4/41/54/e44154308e3466d987665c6d50887f06.jpg</image_url><methods_list><method><name>collage</name><params>template_name=Nun Face in Hole;</params></method></methods_list><result_format>jpg</result_format><result_size>800</result_size><template_watermark>false</template_watermark></image_process_call>';

//Settings
$app_id = '';
$key = '';
$sign_data = hash_hmac('SHA1', $xml_data, $key);

//Send request
$request_url = 'http://opeapi.ws.pho.to/addtask?data='. $xml_data .'&sign_data='. $sign_data .'&app_id='. $app_id;
$request_xml = simplexml_load_file($request_url);
$request_id = strval($request_xml -> request_id);

if (isset($request_id)) {
    $result_url = 'http://opeapi.ws.pho.to/getresult?request_id='. $request_id;
    sleep(6);
    $result_xml = simplexml_load_file($result_url);
    $result_status = strval($result_xml -> status);
    $result_img = strval($result_xml -> result_url);
    if (isset($result_img)) {
        echo $result_img;
    } else {
        echo 'Result image not found';
    }
} else {
    echo 'Request ID not found';
}

?>

脚本从此XML获取request_id并执行$ result_xml。但是,这是XML,脚本不会立即获取图像的url。需要等待几秒钟。 经过三次刷新页面或使用sleep(6)函数,最终我们得到:

<image_process_response>
<request_id>2d8d4dec-4344-4df0-a1e1-0c8df304ad11</request_id>
<status>OK</status>
<description/>
<err_code>0</err_code>
</image_process_response>

编辑:

尝试立即生成图像后,我得到了这样的XML:

<image_process_response>
<request_id>2d8d4dec-4344-4df0-a1e1-0c8df304ad11</request_id>
<status>OK</status>
<result_url>
http://worker-images.ws.pho.to/i1/9F1E2EAF-5B31-4407-8779-9A85F35862D3.jpg
</result_url>
<result_url_alt>
http://worker-images.ws.pho.to.s3.amazonaws.com/i1/9F1E2EAF-5B31-4407-8779-9A85F35862D3.jpg
</result_url_alt>
<limited_image_url>
http://worker-images.ws.pho.to/i1/3F797C83-2C2E-401C-B4AF-C4D36BBD442D.jpg
</limited_image_url>
<nowm_image_url>
http://worker-images.ws.pho.to/i1/9F1E2EAF-5B31-4407-8779-9A85F35862D3.jpg
</nowm_image_url>
<duration>2950.879097ms</duration>
<total_duration>2956.124067ms</total_duration>
</image_process_response>

这就是为什么我看到空白页的原因...

有人知道如何强制脚本与第二个XML重新连接,直到找到result_url吗?

1 个答案:

答案 0 :(得分:0)

  

问题取决于生成第二个XML文件的时间。   $ result_xml花了几秒钟,所以我必须使用sleep(6)函数。如果我   删除此内容,我需要刷新页面(至少3次)才能获得一个   链接到第二个XML生成的图像。

     

您有一个更专业的想法吗?我不确定   每张图片将在6秒内生成(有时更短)   有时更长)。是否有任何方法只能将结果遗传化   收到$ result_img之后?预先感谢您的帮助!

根据Pho.to API,添加任务请求是排队的POST请求。

我认为,在while循环中发送请求,但要等待更短的时间,而不是固定的6秒,请检查status中的image_process_response,继续循环直到没有InProgress ,此后,您可以安全地发送第二个请求以获取处理后的图像结果。

如果您在Web服务器上(通过CGI / FastCGI)运行此脚本,则可能由于DoS protection的超时配置较低而遇到超时问题,要解决此情况,您需要一个队列以在HTTP请求中添加任务,然后离线处理(意味着没有网络环境)。