页脚在运行php脚本时消失

时间:2015-08-27 15:22:06

标签: php

我遇到了一些我已经设置的php上传器的问题,而且/一旦php脚本完成,我的页脚就完全消失了。

这是我的php代码:

<div class="container" id="main">
 <span class="text-image2 img-responsive"> 0-60 Challenge <i class="fa-stop icon-3x" id="square"></i></span>
  <!--CONTENT-->
  <div class="content">
    <h1>Title</h1>
    <form action="" id="Uploader" method="post" enctype="multipart/form-data">
    Select image to upload:
   <br> Name:
<input type="text" id="vistorname" name="vistorname">
<br>
Email:
<input type="text" id="emailaddress" name="emailaddress"> 
    <input type="file" name="fileToUpload" id="fileToUpload">
    <input type="submit" value="Upload Video" name="submit">
</form>

<div id="progress" style="width:500px;height: 24px;border:1px solid #ccc;"></div>
<!-- Progress information -->
<div id="information" style="width"></div>

 <div id="files" class="files">
    <h3>Uploaded files will appear below</h3>
 <?php
    if (isset($_POST['submit'])) 
{ 
   echo 

    $target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["fileToUpload"]["name"]);
    $uploadOk = 1;
    $imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);

// Check if file already exists
    if (file_exists($target_file)) {
        echo "Sorry, file already exists.";
        $uploadOk = 0;
    }
    // Check file size -- Kept for 500Mb
    if ($_FILES["fileToUpload"]["size"] > 500000000) {
        echo "Sorry, your file is too large.";
        $uploadOk = 0;
    }
         // Allow certain file formats
    if($imageFileType != "wmv" && $imageFileType != "mp4" && $imageFileType != "avi" && $imageFileType != "MP4" && $imageFileType != "jpg") {
        echo "Sorry, only wmv, mp4 & avi files are allowed.";
        $uploadOk = 0;
    }
    // Total processes
$total = 10;
// Loop through process
for($i=1; $i<=$total; $i++){
    // Calculate the percentation
    $percent = intval($i/$total * 100)."%";

    // Javascript for updating the progress bar and information
    echo '<script language="javascript">
    document.getElementById("progress").innerHTML="<div style=\"width:'.$percent.';background-color:#FF0000;\">&nbsp;</div>";
    document.getElementById("information").innerHTML="'.$i.' row(s) processed.";
    </script>';

// This is for the buffer achieve the minimum size in order to flush data
    echo str_repeat(' ',1024*64);

// Send output to browser immediately
    flush();

// Sleep one second so we can see the delay
    sleep(1);
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    echo "Sorry, your file was not uploaded.";
// if everything is ok, try to upload file
} else {
    if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
        echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";
        echo '<script language="javascript">document.getElementById("information").innerHTML="Process completed"</script>';
    $name = $_POST['vistorname'];
$email_address = $_POST['emailaddress'];
    // create email body and send it    

    $to = '[add email]';
    $email_subject = "Crazy Way New 0-60 Video:  $name";
  $email_body = "You have received a new message. Here are the details:\n\n".
                  " \nName: $name \n Email: $email_address\n ".
                  "File: ". basename( $_FILES["fileToUpload"]["name"]). ".";
   $headers = "From: [add email]\n";
   $headers .= "Reply-To: $email_address";  
mail($to,$email_subject,$email_body,$headers);
return true;    

    } else {
        echo "Sorry, there was an error uploading your file. Please note that we only accept wmv, mp4 & avi files.";

    }
}
}
?>

</div>

<p align="center">Please contact us if you are having issues uploading your video. </p></div>

  <!--END Content--> 
  <!-- FOOTER -->
  <?php include('includes/footer.php'); ?>
  <!-- END FOOTER --> 
</div>

谁能告诉我我做错了什么?

P.S。我目前允许JPG文件在测试时获得速度。

3 个答案:

答案 0 :(得分:2)

您遇到的问题归结为sleep()功能所在的位置。

  

sleep()延迟程序执行达到给定的秒数。

你需要记住PHP的工作原理是从顶部开始 - &gt;下。在你的情况下,这就是PHP正在做的事情:

首次加载页面时:

  1. 顶部HTML一直加载到<div id="files"><h3>Uploaded files will appear below</h3>

  2. 然后遇到第一个<?php所以它现在读取PHP代码

  3. 由于未设置$_POST,您的if (isset($_POST['submit']))会失败并转到结束else所在的?>

  4. 最后它运行剩余的HTML,包括footer.php

  5. 点击&#34;上传视频&#34;您正在提交form。提交form后会查看其action属性,如果它有类似test.php的内容,那么它会重定向到该页面,在您的情况下它是空白的,因此它会刷新您的页面发送POST请求。现在您的页面以这种方式加载:

    1. 顶部HTML一直加载到<div id="files"><h3>Uploaded files will appear below</h3>

    2. 遇到第一个<?php所以它现在读取PHP代码

    3. 由于$_POST现已设定,您的if (isset($_POST['submit']))成功

    4. 设置目标目录/文件,如果上传的文件与您的条件不符,则设置错误

    5. 然后执行一次持续10秒的迭代。此迭代使用sleep(),这意味着您的页面的所有解析都会暂停,直到该点为止。 这样让你的页脚消失了#34;在运行脚本时暂时

    6. 最后它运行剩余的HTML,包括footer.php

    7. 正如您所看到的,在您的sleep到位后,您的代码将停止运行。要解决此问题,您需要重新构建代码,甚至更好地使用AJAX

答案 1 :(得分:0)

从脚本中删除return true;

Return具有特定含义:

  

return将程序控制返回给调用模块。执行   在被调用模块的调用之后的语句处继续。

在您的情况下,没有调用模块,因此只要成功发送邮件,脚本就会结束。

一个简单的例子:

<p> foo bar <p>

<?php
return true;
?>

<p> more stuff </p>

输出:

<p> foo bar <p>

答案 2 :(得分:0)

您正在使用include部分来实现错误的目标。在PHP解释器到达其<?php起始标记之前,它不会将文件自我输出附加到它所声明的位置,并且在上传功能完成之前它不会到达它。这就是你面临延迟的原因。

严格回答您的问题,而不是指出更好的做法(因为它不是问题范围),您必须将整个代码包装在单个<?php ?> PHP匹配标记对中。因此,请考虑echo

</div>
    <p align="center">Please contact us if you are having issues uploading your video. </p>

而不是直接在HTML中编写它。这样,PHP解释器就会将代码解析为一件事,你不应该再面对这个问题了。

[编辑] 另外,请考虑@ HPierce的回复并从代码中删除return true;,避免突然发动机中断。