0

I want the following code header ('Location:'. $U);

Rightly guided, but I'm getting the following warning, how to resolve it.

Warning: Cannot modify header information - headers already sent by (output started at H:\xampp\htdocs\redirected\index.php:8) in H:\xampp\htdocs\redirected\index.php on line 53

i want :

http://mydomian/google redirect to http://google.com

or

http://mydomian/yahoo redirect to http://yahoo.com

or

http://mydomian/anyname redirect to http://Every site that I like

..............................

my htacess file :

<Files ~ "^\.(htaccess|htpasswd)$">
deny from all
</Files>
ErrorDocument 404 /redirected/index.php
order deny,allow

in redirect folder i have files index.php and htaccess.txt:

htaccess.txt :

/google http://google.com 
/yahoo http://yahoo.com 

index.php:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>script for redirect !!!</title>
</head>
<body>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
    <input type="text" name="url" placeholder="e.g google.com" required/>
    <input type="text" name="dir" placeholder="dir" value=<?php echo htmlspecialchars($_SERVER['REQUEST_URI']);?> required/>
    <input type="submit" />
</form>
<?php
    $url = (isset($_POST['url']))   ? $_POST['url'] : '';
    $dir = (isset($_POST['dir']))   ? $_POST['dir'] : '';
    $filename = 'htaccess.txt';
    /*
    *
    * Function to make URLs into links
    *
    * @param string The url string
    *
    * @return string
    *
    */
    function makeLink($string){
        /*** make sure there is an http:// on all URLs ***/
        $string = preg_replace("/([^\w\/])(www\.[a-z0-9\-]+\.[a-z0-9\-]+)/i", "$1http://$2",$string);
        /*** make all URLs links ***/
        $string = preg_replace("/([\w]+:\/\/[\w-?&;#~=\.\/\@]+[\w\/])/i","<a target=\"_blank\" href=\"$1\">$1</A>",$string);
        /*** make all emails hot links ***/
        $string = preg_replace("/([\w-?&;#~=\.\/]+\@(\[?)[a-zA-Z0-9\-\.]+\.([a-zA-Z]{2,3}|[0-9]{1,3})(\]?))/i","<A HREF=\"mailto:$1\">$1</A>",$string);

        return $string;
    }

    function redirect($url){
        if (headers_sent()) {
            die('<script type="text/javascript">window.location.href="' . $url . '";</script>');
        }else {
            header('Location: ' . $url);
            die();
        }    
    }
    $f = !empty($dir) ? $dir: htmlspecialchars($_SERVER['REQUEST_URI']);

        $fp = fopen($filename , 'r+') or die("can't open file ! ");
        while ( !feof( $fp ) ) {
            $line = fgets( $fp, 1024 );
            if ($f === strstr($line, ' ', true)) {
                $u = strstr($line, 'http');
                //redirect($u);
                //echo '<script type="text/javascript">window.location.href="' . $u . '";</script>';
                header('Location: ' . $u);
                exit;
            }
        }
        if ($url != '' && !empty($dir)) {

        fseek($fp, 0, SEEK_END); // Go to the end of the file 
        fwrite($fp,"/$dir http://$url \n");
        fclose($fp);
    }

?>
</body>
</html>

thanks

geeking
  • 97
  • 2
  • 10

2 Answers2

3

This error means the executed page, or one of the pages that was included before your header, echoed at least some content before you tried to redirect. Move your header up in the file or make sure that the files that your file includes do not echo any content. In your case you have to move it to the very top of your file, as your file starts with echo-ing the beginning of a html file.

Sumurai8
  • 20,333
  • 11
  • 66
  • 100
1

do header redirect before the html tag, a lot of post in stackoverflow should have pointed out.

<?php
header ('Location:'. $U);
?>
<html>
Anonymous
  • 1,405
  • 4
  • 17
  • 26