上传文件后刷新php页面

时间:2014-12-04 17:40:36

标签: php file-upload

我需要使用PHP和HTML表单将文件上传到服务器。

我使用了w3school的例子:PHP 5 File Upload这对我非常有帮助并帮助了我很多。

当然我需要调整代码才能解决我的问题,所以情况就是这样:

1) HTML表单放入 fileform.php

<!-- fileform.php -->
<form action="upload.php" method="post" enctype="multipart/form-data">
<h3>Upload a file:</h3>
<input type="file" name="fileToUpload" id="fileToUpload">
<input type="submit" value="Upload" name="submit">
</form>

2)这是我的 upload.php

<?php
/* upload.php */
set_time_limit(0);

$targetDir = "/path/to/upload/dir";
$targetFile = $targetDir . basename($_FILES["fileToUpload"]["name"]);
$upload = 1;
$fileType = pathinfo($targetFile, PATHINFO_EXTENSION);

if(isset($_POST["submit"]))
{
    /* Check file size */
    if($_FILES["fileToUpload"]["size"] > 50000000000)
    {
        echo "Sorry, your file is too large.";
        $upload = 0;

        ob_end_flush();
        include("fileform.php");
    }
    /* Allow certain file formats */
    if($fileType != "data" )
    {
        echo "Sorry, non valid filetype.";
        $upload = 0;

        ob_end_flush();
        include("fileform.php");

    }
    /* Check if $uploadOk is set to 0 by an error */
    if($upload == 0)
    {
        echo "Sorry, your file was not uploaded.";
        ob_end_flush();
        include("fileform.php");
    } 
    else
    {
        if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile))
        {
            echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
        }
        else
        {
            echo "Sorry, there was an error uploading your file.";
        }

        ob_end_flush();
        include("fileform.php");
    }
}

我可以正确上传文件,但我无法正确重新加载PHP页面。 它只显示一个带有白色背景的页面:

文件file.data已上传。

警告:session_start()[function.session-start]:无法发送会话缓存限制器 - 已在/ var / www / login中发送的标头(输出从/var/www/upload.php:40开始)第4行的.php

带有PHP页面的一些图标......

我很安静,确定我在 upload.php 文件中做错了什么,但我不知道到底出了什么问题,以及如何修复它。

为了正确重新加载PHP页面,我如何更改代码?

提前感谢您的帮助。

6 个答案:

答案 0 :(得分:1)

“已发送标头”表示您的PHP脚本已经发送了HTTP标头,因此它现在无法对它们进行修改。

在致电session_start之前,请检查您是否发送了任何内容。更好的是,只需要在PHP文件中首先执行session_start(所以在所有HTML等之前将它放在绝对的开头)。

<?php

之后的顶部使用此功能
ob_start();

你可以这样使用:

<?php
ob_start();
session_start();

include 'your php file';

...
...

答案 1 :(得分:0)

PHP是服务器端语言,因此您应该使用javascript重新加载页面。

<script>
function myFunction() {
    location.reload();
}
</script>

这将重新加载当前页面。

答案 2 :(得分:0)

如果要在服务器端刷新页面: 在普通的php中,您可以使用标题函数(http://php.net/manual/ru/function.header.php)来刷新当前页面。

header('Location: /'.$_SERVER["REQUEST_URI"]);

如果您想在客户端刷新页面,可以使用:

location.reload()

(JavaScript的)

答案 3 :(得分:0)

  

只显示带有白色背景的页面:文件file.data已上传。

这是你的代码:

if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $targetFile))
    {
        echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
    }
    else
    {
        echo "Sorry, there was an error uploading your file.";
    }

    ob_end_flush();
    include("fileform.php");

您之后遇到错误的原因是您必须在ob_end_flush()之后的某个地方调用session_start() - 但这不会出现在您向我们展示的任何代码中。即您向我们展示的代码不会产生您引用的错误。

巧合的是,尽管上面的代码充满了ob_end_flush()(没有明显的原因),但没有ob_start()。这可能会出现在您未向我们展示的代码中。

答案 4 :(得分:0)

  

我在upload.php文件中做错了什么,但我不知道到底出了什么问题

您遇到的问题是经典问题。

在您的fileform.php脚本中,您正在呼叫session_start()(通过login.php)。这在文件上传后不起作用,因为在上传脚本中您已通过echo写入HTTP响应正文:

session_start()需要编写HTTP标头。由于标题已经发送session_start()无法完成其工作。

这是错误消息试图说的内容:

  

警告:session_start()[function.session-start]:无法发送会话缓存限制器 - 已在/ var / www / login中发送的标头(输出从/var/www/upload.php:40开始)第4行的.php

-

  

如何修复

在将任何其他内容发送到回复正文之前,您需要重构上传脚本以便include('fileform.php')

<?php
// .. do not echo anything
include('fileform.php');
// .. do the file upload stuff.

注意:如果您尝试在echo之后重定向,则会遇到与session_start()相同的问题,因为HTTP重定向需要编写响应标头。

答案 5 :(得分:0)

您可以通过重定向到相同的网址重新加载同一页面。

<?php
redirect(your_url);
?>