我正在尝试使用fopen()
从具有一个或多个(301/302)重定向的链接中打开文件,然后到达具有响应代码200的最终文件。但是,当重定向的URL具有很长的位置标头时,fopen()
无法解析它,并且上下文中也缺少位置标头。
让我说明一下...
我们有2个重定向文件:
...://://test.com/redirectionWithShortLocation
<?php
header("HTTP/1.1 302 Moved Permanently");
header("Location: https://upload.wikimedia.org/wikipedia/en/a/a9/Example.jpg?test=abc");
...://://test.com/redirectionWithLongLocation
<?php
header("HTTP/1.1 302 Moved Permanently");
header("Location: https://upload.wikimedia.org/wikipedia/en/a/a9/Example.jpg?test=b1XxGVVdV3DMdWbk67YYy4EEP0WK7f7MRGAneY0Oy6csx7mmVwpZjjN3WyAuoHZffn2JlCOQxXhel77qutdzzMnYmLHt9YNbZqQXPhqyKvEVPNGgrDYoQ6FGhcmI0VOYyTiO2625Y45sb3U3SXYU8G5yfIixn5C5c6o3jNivhmYOhI2JRBjwNzLP6oG0HyYxZkXjxtzOyyNlk7wHqgaEmzIq3KIYuEIFMvpko26x1S2Mw7EBefXBy7Noey0mBxddlt44TTZWd0KeANDqsh2PCqpmrcwrRIOLwlRlH5CP475vS8zavRTNtJq37MnHDep95JEWx0x3OD2HyNRZUDtq0izlAdsiQ6d8CxQMO9DcGGbNoiU9tAH8bfAzca9zUE6iqxNraVMQ7xtfkyCQnS185ig3R2k7kPb4pbUP5UOEvPkEsxIxAvhFeJIPxxGth8XV8yzsymb4GekhQOAsGFhAWqZ6M2tv0ju5aemzPPKuVffzeaaRLyt2Vr06tz2u0SRyyjgLNz2Pjc3G98x1CczwO5EXdE4vh4PyQHxsgnafK8xXyrf5DLepFKCfCyyVS1shh8N7AnsEq3Aeb9HOxYQdB3b3xl2nP30icfrml4IMhm5tFwasKkCbMz7ZLrKkrczbPv0bopbtTdmyQx53Sk00sxb6ShxSFNlmgcMdAR5bntmAbylTzFM5UwWskolU1wU33XZmBOgYy5J49yHxuLyzWXcDu4kwzyq8p9moD34nA9WJZeYBjOLSdCvjqudlqRMxAggceE1PtyBH9WkGZOcVNyEPiDGDxEBkx2hfHYhUZ8nOzEJ3uh9luVjcBwLt7yBGqJlfCO5ymyjzFTN6WISoJEs83f48q4EkxwINJIG2Y3JelOlTvQrIFvBI1lKrmxxIq9RAubwR8PcBQNCN13BOhFqq8aTemqwMsvhWo5IBeSmN6KqxSaeU");
第三个最终的PHP文件试图从链接中打开文件:
<?php
$url = 'http://test.com/redirectionWithShortLocation';
//$url = 'http://test.com/redirectionWithLongLocation';
$context = stream_context_create([
'http' => [
'ignore_errors' => true,
'timeout' => 3000,
'follow_location' => 1,
'max_redirects' => 20,
]
]);
$fp = fopen($url, 'r', false, $context);
$meta = stream_get_meta_data($fp);
$respData = stream_get_contents($fp);
fclose($fp);
$responseLines = $meta['wrapper_data'];
echo "<pre>";
print_r($responseLines);
echo "</pre>";
exit();
因此,当我使用上面的代码打开第一个URL时,我获得了所有标题,并且响应数据正确。但是,当我尝试使用位置标题非常长的第二个URL打开时,$meta['wrapper_data']
缺少标题,并且我没有得到正确的响应数据。
我知道我可以通过使用curl
打开文件来克服这个问题,但是,如果可能的话,我希望继续使用fopen。
有没有人知道如何在仍然使用fopen
的情况下克服此问题/局限性?