【问题标题】:Refreshing site using unknown url使用未知网址刷新网站
【发布时间】:2013-02-22 01:14:13
【问题描述】:

我正在尝试将刷新用作重定向功能,因为标头由于某种原因不起作用。这是我的一段代码,当我运行它时会刷新循环:

---------不工作 /----------------

$url = $_SERVER['REQUEST_URI'];
$url = substr($url, 10); //cuting url to "index.php?site=page"
echo '<META HTTP-EQUIV="Refresh" Content="0; URL='.$url.'">';

---------工作/----------------

$url = 'index.php?site=page';
echo '<META HTTP-EQUIV="Refresh" Content="0; URL='.$url.'">';

---------全功能 /----------------

elseif($action=="nfvi") {
        safe_query("UPDATE ".PREFIX."nfv SET nfv=nfv+1");
    $url = $_SERVER['REQUEST_URI'];
    $url = substr($url, 10);
    echo '<META HTTP-EQUIV="Refresh" Content="0; URL='.$url.'">';
}

【问题讨论】:

  • 如果您尝试使用 +1 更新整数,那么也要更改您的查询:nfv SET nfv='nfv'+1
  • substr 是干什么用的?原始的 REQUEST_URI 是什么样的?
  • 我想要:index.php?site=page insted of /~folder/index.php?site=page 所以我使用 substr

标签: php redirect refresh


【解决方案1】:

您可以使用CURL 作为客户端启动:

它将平衡 CURL_SET TIMEOUT:curl_setopt($ch, CURLOPT_TIMEOUT, 3);

$ch = curl_init(); curl_setopt($ch, CURLOPT_URL, $ping_url); curl_setopt($ch, CURLOPT_RETURNTRANSFER, true ); curl_setopt($ch, CURLOPT_POST, true ); curl_setopt($ch, CURLOPT_POSTFIELDS, trim($request)); $result = curl_exec($ch); curl_close($ch);

如果标题位置不起作用,您是否检查标题中的刷新页面?

 header("Refresh: 2;");

如果标头不起作用,请使用 fsockets 读取数据:

$host = 'www.example.com';
$service_uri = '/cgi-bin/processACT';
$vars ='code=22&act=TEST';

$header = "Host: $host\r\n";
$header .= "User-Agent: PHP Script\r\n";
$header .= "Content-Type: application/x-www-form-urlencoded\r\n";
$header .= "Content-Length: ".strlen($vars)."\r\n";
$header .= "Connection: close\r\n\r\n";

$fp = pfsockopen("ssl://".$host, 443, $errno, $errstr);
if (!$fp) {
   echo "$errstr ($errno)<br/>\n";
   echo $fp;
} else {
    fputs($fp, "POST $service_uri  HTTP/1.1\r\n");
    fputs($fp, $header.$vars);
    fwrite($fp, $out);
    while (!feof($fp)) {
    echo fgets($fp, 128);
    }
    fclose($fp);
} 

然后用 sleep(3) 秒循环你想要暂停的内容。

为什么在 PHP 中使用元标记而不是标头?

header('Location: '.$url);

或完整的标头重定向示例:

$host  = $_SERVER['HTTP_HOST'];
$uri   = rtrim(dirname($_SERVER['PHP_SELF']), '/\\');
$extra = 'mypage.php';
header("Location: http://$host$uri/$extra");
exit;

【讨论】:

  • cURL 在这里做什么?
  • @qerigan Yelling 不会帮助您解决问题。
  • 您可以使用 CURL 或使用套接字并通过睡眠或检查在 PHP 循环函数上刷新而不是标头。如果选中则退出函数。
  • @qerigan 标头重定向工作。你只是不明白他们。
  • 也许我不明白,但你也不明白,因为你甚至无法向我解释我应该如何使用它......
【解决方案2】:

为什么不使用 HTTP 标头?

<?php
$url = "http://www.google.com";

header("Location: index.php?site=" . urlencode($url)); /* Redirect browser */

/* Make sure that code below does not get executed when we redirect. */
exit;
?>

See the manual.

【讨论】:

  • @shapeshifter 可能。但似乎 OP 不知道这意味着什么。
  • 我尝试使用:header("Location: index.php?site=".$url.""); - 不工作
  • @qerigan 我之前说过,答案已更新。见答案。为什么你不读书?
  • @MarinSagovac 谢谢!一世!更新!我的!回答!
  • @qerigan 如果您告诉我们您的问题是什么,这可能对未来的访问者有益。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-11-28
  • 2012-09-24
  • 1970-01-01
  • 2011-07-22
  • 1970-01-01
  • 2013-08-24
  • 2017-09-25
相关资源
最近更新 更多