Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/289.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
PHP重定向到不工作_Php - Fatal编程技术网

PHP重定向到不工作

PHP重定向到不工作,php,Php,我对PHP重定向到有问题。我有一个表单,用户可以在其中选择要上载的图像。成功上传后,我希望用户被重定向到一个页面,该页面列出数据库中的所有图像。下面的代码来自一个名为upload_image.PHP的PHP文件。它与我想重定向到的页面位于同一目录下,list_images.php。我已将问题区域缩小到以下代码: if(isset($_POST['submit'])){ $image = new Image(); //User defined class $image->captio

我对PHP重定向到有问题。我有一个表单,用户可以在其中选择要上载的图像。成功上传后,我希望用户被重定向到一个页面,该页面列出数据库中的所有图像。下面的代码来自一个名为upload_image.PHP的PHP文件。它与我想重定向到的页面位于同一目录下,list_images.php。我已将问题区域缩小到以下代码:

if(isset($_POST['submit'])){
$image = new Image();     //User defined class
$image->caption = $_POST['caption'];     //Places caption text field in the database
$image->attach_file($_FILES['file_upload']);     //Copies image to images folder

if($image->save()){
    //Success
    $session->message("Image uploaded successfully!");
    redirect_to('list_images.php');    //PROBLEM AREA. Page never redirects.
}else{
    //Failure
    $message = join("<br />", $image->errors);
}}

上载的图像始终成功复制到正确的位置,其信息存储在数据库中。然而,在提交之后,我总是在浏览器中留下一个空白页面和upload_image.php的url。通过无数的echo测试,我确定问题发生在重定向到'list_images.php'时;我能够在ReTrimtTyto之前将文本回送到空白页上,但是在ReNoTrtIO之后没有执行任何操作。 有人有什么建议吗


谢谢大家!

重定向的方法是:

header("Location: list_images.php");
exit();

我认为这不是一个有效的标题。尝试删除{}大括号。

你应该让你的函数真正起作用,而不是可选的。此外,如果您实际输出建议的HTTP响应正文,您将实际看到函数是否被调用:

function redirect_to($location)
{
    if (!headers_sent($file, $line))
    {
        header("Location: " . $location);
    } else {
        printf("<script>location.href='%s';</script>", urlencode($location));
        # or deal with the problem
    }
    printf('<a href="%s">Moved</a>', urlencode($location));
    exit;
}

正确的重定向功能定义如下:

function redirect_url($path)
{
  header("location:".$path);
  exit;
}
有关更多信息,请检查以下内容:


重定向到,因此您需要提供其源代码,以便我们有机会帮助您。重定向到;不是本机PHP函数。请提供它的定义。redirect_to不是一个本机php函数,因此请包含您的代码。通过无数的echo测试,我总是留下一个空白页[…]。。。你知道你可能只是,对吧?如果这是你的意思,在呼叫退出后,你将无法输出或做任何事情。。无论如何,在设置headerLocation:..时应该会发生重定向,因此还有一个问题..您缺少与HTTP规范匹配的HTTP响应正文。@hakre:a 302如果不是手动设置,则会发送。这还不够吗?规范要求您发送一个响应主体,告诉新位置,仅仅一个标题是不够的。这是一个常见的错误,只发送位置标题和3xx状态码。@chelmetz:谢谢添加退出。我只是显示了实际的重定向行@hakre:不需要其他任何东西:如果位置头存在并且没有指定状态,PHP将自动发送302;302个响应不需要响应主体。不确定正式的RFC,但是我们已经使用这种技术多年了,在任何浏览器中都没有问题。临时URI应该由响应中的位置字段给出。除非请求方法是HEAD,否则响应的实体应该包含一个简短的超文本注释,并带有指向新URI的超链接。-如果您有问题需要理解,那么有一个RFC解释如何阅读:-这是正式规范,原因是UAs不能自动重定向。与其说是浏览器问题,不如说是用户问题,还不如说是使用浏览器的人的问题。{}大括号只是将变量名分隔在字符串中,它与${location}相同。这在${foo}\u bar这样的情况下是需要的,但是总是使用它来保持清楚是一个很好的实践移除大括号并没有帮助。仍然没有重定向。不过,谢谢你的建议。@redShadow:我不知道如果开始括号在美元符号前面,它也会起作用。谢谢。@Bluewind,是的,它很糟糕,不总是像预期的那样工作{$aaa[123]}-或者类似的-如果我没记错的话,它不工作,但是是的,它是允许的
function redirect_to($location)
{
    if (!headers_sent($file, $line))
    {
        header("Location: " . $location);
    } else {
        printf("<script>location.href='%s';</script>", urlencode($location));
        # or deal with the problem
    }
    printf('<a href="%s">Moved</a>', urlencode($location));
    exit;
}
function redirect_url($path)
{
  header("location:".$path);
  exit;
}