如果 $url 是 GET 变量,file_get_contents 不工作

问题描述 投票:0回答:0

这似乎很简单,但很多时间都无处可去..
如果我提出请求

`myfile.php?url=https://rr3---sn-nx57ynlk.googlevideo.com/videoplayback?expire=1678087801&ei=GUIFZM_dMJWWkgbeo624BQ&ip=2605%3A6ac0%3A4008%3A0%3A216%3A3eff%3Afee2%3Ad40c&id=o-AJKZ8ynIJb6xJfKO5dQJIEYKx4PxT5akBgSjgF6tWNTC&itag=22&source=youtube&requiressl=yes&mh=8d&mm=31%2C26&mn=sn-nx57ynlk%2Csn-qxo7rn7r&ms=au%2Conr&mv=u&mvi=3&pl=36&spc=H3gIhjqQk_5oc7JioOMvEblTyLG63sY&vprv=1&svpuc=1&mime=video%2Fmp4&cnr=14&ratebypass=yes&dur=206.100&lmt=1654632374754034&mt=1678065861&fvip=5&fexp=24007246&c=ANDROID&txp=5311224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Ccnr%2Cratebypass%2Cdur%2Clmt&sig=AOq0QJ8wRgIhAI9apcV9d5qmhxRlhuyVGWMh-6M_z89zjpaarJ1lEsACAiEAkRpLI4u-5CIppR9sO5Os1JDQuz_HoR4p85Typ4GrKBI%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AG3C_xAwRQIhAIYOSMamSYCVOlReQMj90WQoByNoONThODa5TzT8U1XPAiB2p0dxv4xOcDQhzFqHrZ-uQLhavG41kFcGlruPQnaJCQ%3D%3D`

`403 forbidden`
echo $url;
echo $url2;

两者都返回完全相同的 url。

$url = $_GET['url'];


$url = html_entity_decode($url, ENT_QUOTES | ENT_XML1, 'UTF-8');
$url2 = 'https://rr3---sn-nx57ynlk.googlevideo.com/videoplayback?expire=1678087801&ei=GUIFZM_dMJWWkgbeo624BQ&ip=2605%3A6ac0%3A4008%3A0%3A216%3A3eff%3Afee2%3Ad40c&id=o-AJKZ8ynIJb6xJfKO5dQJIEYKx4PxT5akBgSjgF6tWNTC&itag=22&source=youtube&requiressl=yes&mh=8d&mm=31%2C26&mn=sn-nx57ynlk%2Csn-qxo7rn7r&ms=au%2Conr&mv=u&mvi=3&pl=36&spc=H3gIhjqQk_5oc7JioOMvEblTyLG63sY&vprv=1&svpuc=1&mime=video%2Fmp4&cnr=14&ratebypass=yes&dur=206.100&lmt=1654632374754034&mt=1678065861&fvip=5&fexp=24007246&c=ANDROID&txp=5311224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Ccnr%2Cratebypass%2Cdur%2Clmt&sig=AOq0QJ8wRgIhAI9apcV9d5qmhxRlhuyVGWMh-6M_z89zjpaarJ1lEsACAiEAkRpLI4u-5CIppR9sO5Os1JDQuz_HoR4p85Typ4GrKBI%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AG3C_xAwRQIhAIYOSMamSYCVOlReQMj90WQoByNoONThODa5TzT8U1XPAiB2p0dxv4xOcDQhzFqHrZ-uQLhavG41kFcGlruPQnaJCQ%3D%3D';
 
#echo $url;  returns the same as $url2
#echo $url2; returns the same as $url


function play($url){
    ini_set('memory_limit', '1024M');
    set_time_limit(3600);
    ob_start();
    if (isset($_SERVER['HTTP_RANGE'])) $opts['http']['header'] = "Range: " . $_SERVER['HTTP_RANGE'];
    $opts['http']['method'] = "HEAD";
    $conh = stream_context_create($opts);
    $opts['http']['method'] = "GET";
    $cong = stream_context_create($opts);
    $out[] = file_get_contents($url, false, $conh);
    $out[] = $httap_response_header;
    ob_end_clean();
    array_map("header", $http_response_header);
    readfile($url, false, $cong);

}

play($url); //does not work
play($url2); //works

但是为什么?

$url = html_entity_decode($url, ENT_QUOTES | ENT_XML1, 'UTF-8');
$url2 = 'https://rr3---sn-nx57ynlk.googlevideo.com/videoplayback?expire=1678087801&ei=GUIFZM_dMJWWkgbeo624BQ&ip=2605%3A6ac0%3A4008%3A0%3A216%3A3eff%3Afee2%3Ad40c&id=o-AJKZ8ynIJb6xJfKO5dQJIEYKx4PxT5akBgSjgF6tWNTC&itag=22&source=youtube&requiressl=yes&mh=8d&mm=31%2C26&mn=sn-nx57ynlk%2Csn-qxo7rn7r&ms=au%2Conr&mv=u&mvi=3&pl=36&spc=H3gIhjqQk_5oc7JioOMvEblTyLG63sY&vprv=1&svpuc=1&mime=video%2Fmp4&cnr=14&ratebypass=yes&dur=206.100&lmt=1654632374754034&mt=1678065861&fvip=5&fexp=24007246&c=ANDROID&txp=5311224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Ccnr%2Cratebypass%2Cdur%2Clmt&sig=AOq0QJ8wRgIhAI9apcV9d5qmhxRlhuyVGWMh-6M_z89zjpaarJ1lEsACAiEAkRpLI4u-5CIppR9sO5Os1JDQuz_HoR4p85Typ4GrKBI%3D&lsparams=mh%2Cmm%2Cmn%2Cms%2Cmv%2Cmvi%2Cpl&lsig=AG3C_xAwRQIhAIYOSMamSYCVOlReQMj90WQoByNoONThODa5TzT8U1XPAiB2p0dxv4xOcDQhzFqHrZ-uQLhavG41kFcGlruPQnaJCQ%3D%3D';
    
        print $url;    

退货: https://rr3---sn-nx57ynlk.googlevideo.com/videoplayback?expire=1678087801&ei=GUIFZM_dMJWWkgbeo624BQ&ip=2605%3A6ac0%3A4008%3A0%3A216%3A3eff%3Afee2%3Ad40c&id=o-AJKZ8ynIJb6xJfKO5dQJIEYKx4PxT5akBgSjgF6tWNTC&itag=22&source=youtube&requiressl=yes&mh =8d&mm=31%2C26&mn=sn-nx57ynlk%2Csn-qxo7rn7r&ms=au%2Conr&mv=u&mvi=3&pl=36&spc=H3gIhjqQk_5oc7JioOMvEblTyLG63sY&vprv=1&svpuc=1&mime=video%2Fmp4&cnr=14&ratebypass=yes&dur=206.100&lmt=1654632374754034&mt=1678065861&fvip=5&fexp=24007246&c= ANDROID&txp=5311224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Ccnr%2Cratebypass%2Cdur%2Clmt&sig=AOq0QJ8wRgIhAI9apcV9d5qmhxRlhuyVGWMh-6M_z89zjpaarJ1lEsACAiEAkRpLI4u-5CIppR9sO5Os1JDQuz_HoR4p85Typ4GrKBI%3D&lsparams=mh%2Cmm%2Cmn%2Cms% 2Cmv%2Cmvi%2Cpl&lsig=AG3C_xAwRQIhAIYOSMamSYCVOlReQMj90WQoByNoONThODa5TzT8U1XPAiB2p0dxv4xOcDQhzFqHrZ-uQLhavG41kFcGlruPQnaJCQ%3D%3D

    print $url2;

退货: https://rr3---sn-nx57ynlk.googlevideo.com/videoplayback?expire=1678087801&ei=GUIFZM_dMJWWkgbeo624BQ&ip=2605%3A6ac0%3A4008%3A0%3A216%3A3eff%3Afee2%3Ad40c&id=o-AJKZ8ynIJb6xJfKO5dQJIEYKx4PxT5akBgSjgF6tWNTC&itag=22&source=youtube&requiressl=yes&mh =8d&mm=31%2C26&mn=sn-nx57ynlk%2Csn-qxo7rn7r&ms=au%2Conr&mv=u&mvi=3&pl=36&spc=H3gIhjqQk_5oc7JioOMvEblTyLG63sY&vprv=1&svpuc=1&mime=video%2Fmp4&cnr=14&ratebypass=yes&dur=206.100&lmt=1654632374754034&mt=1678065861&fvip=5&fexp=24007246&c= ANDROID&txp=5311224&sparams=expire%2Cei%2Cip%2Cid%2Citag%2Csource%2Crequiressl%2Cspc%2Cvprv%2Csvpuc%2Cmime%2Ccnr%2Cratebypass%2Cdur%2Clmt&sig=AOq0QJ8wRgIhAI9apcV9d5qmhxRlhuyVGWMh-6M_z89zjpaarJ1lEsACAiEAkRpLI4u-5CIppR9sO5Os1JDQuz_HoR4p85Typ4GrKBI%3D&lsparams=mh%2Cmm%2Cmn%2Cms% 2Cmv%2Cmvi%2Cpl&lsig=AG3C_xAwRQIhAIYOSMamSYCVOlReQMj90WQoByNoONThODa5TzT8U1XPAiB2p0dxv4xOcDQhzFqHrZ-uQLhavG41kFcGlruPQnaJCQ%3D%3D

期望的结果: 正确返回 $url。 谢谢你。

php file-get-contents
© www.soinside.com 2019 - 2024. All rights reserved.