我有一个应用程序,其中包含一个文件 (FileX.php),该文件在某些条件下会在屏幕上回显一个 iFrame,该屏幕会加载一个跟踪 URL (FileY.php)。在我直接将 FileX.php 包含到主页 (FileA.php) 的生产环境中,iFrame 被回显到屏幕上,并且 FileY.php 被成功调用。
不过在测试中,我需要调用多个版本的 FileA.php,每个版本都包含 FileX.php,它输出 iFrame 以调用 FileY.php。我正在使用 cURL 请求自动处理大量请求。
通过 cURL 请求加载 FileA.php 时,它成功地执行了include()
FileX.php,但因为它是通过 cURL 发生的,所以 iFrame 永远不会加载它的目标 (FileY.php)。
fileA 的 cURL 请求如下所示:
测试文件.php
// URL
$url = "http://www.example.com/FileA.php";
// New Cookie file
$ckfile = tempnam("/tmp", "CURLCOOKIE");
// New Connection
$ch = curl_init();
curl_setopt($ch, CURLOPT_HEADER, 0);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
curl_setopt ($ch, CURLOPT_COOKIEJAR, $ckfile);
curl_setopt ($ch, CURLOPT_COOKIEFILE, $ckfile);
curl_setopt($ch, CURLOPT_COOKIESESSION, 0);
curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
curl_setopt($ch, CURLOPT_URL, $url);
curl_exec($ch);
curl_close($ch);
文件A.php:
include_once('FileX.php');
文件X.php:
echo("<iframe src='http://www.example.com/FileY.php' width='0' height='0'></iframe>");
文件Y.php
// Contains logging stuff to log the fact that FileY.php was called.
就像我说的,如果我直接在浏览器中调用 FileA.php,则包含 FileX.php 并且 FileY.php 已成功加载到 iFrame 中。当我通过 cURL 调用 FileA.php 时,iFrame 不会加载,并且永远不会调用 FileY.php。
我试过用并强制输出包装echo()
在 FileX.php 中,但这没有用。我试过添加一个,以防请求发生得太快,没有运气。ob_start()
ob_end_flush()
sleep(1)
是否有一个 cURL 选项我可以更改以允许这种情况发生?我不知道为什么它不会加载 iFrame src。