特定の条件下で、トラッキングURL(FileY.php)をロードする画面にiFrameをエコーするファイル(FileX.php)を含むアプリケーションがあります。FileX.phpをメインページ(FileA.php)に直接インクルードする実稼働環境では、iFrameが画面にエコーされ、FileY.phpが正常に呼び出されます。
ただし、テストでは、FileY.phpを呼び出すためにiFrameを出力するFileX.phpをそれぞれ含むFileA.phpの複数のバージョンを呼び出す必要があります。私はcURLリクエストを使用してこの多数のリクエストを自動化しています。
cURLリクエストを介してFileA.phpをロードするとinclude()
、FileX.phpの処理は正常に実行されますが、cURLを介して実行されるため、iFrameは宛先(FileY.php)をロードしません。
fileAのcURLリクエストは次のようになります。
TestFile.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);
FileA.php:
include_once('FileX.php');
FileX.php:
echo("<iframe src='http://www.example.com/FileY.php' width='0' height='0'></iframe>");
FileY.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オプションはありますか?iFramesrcが読み込まれない理由がわかりません。