为什么这段PHP代码本地可以跑,上传到虚拟主机后就不能 跳转界面了?

我是php新手 自己摸索着写了一段 上传sql数据库的话 然后跳转到主页。。这段话在本地服务器跑没什么问题,但是上传到买的虚拟主机上就不能跳转而是停留在当前界面 需要我手动回去 请问是哪里的问题?

<div class="myform">
<form action="upload.php" method="post" enctype="multipart/form-data">
<input type="text" name="title" value="#2017-XX-XX">

<input type="text" name="content" value="说一句话吧">

<input type="file" name="myupload"/>
<input type="submit" value="上传"/>
</form>
</div>

<?php

 date_default_timezone_set('PRC');
 include ("dbconnect.php");
 error_reporting(0);

 $typeArr = explode("/", $_FILES["myupload"]["type"]);
 $myimgType = array("png","jpg","jpeg","gif");
  if(in_array($typeArr[1], $myimgType))
  {

   $imgname = time().".".$typeArr[1];
   $address = "../file/".$imgname;

   $bol = move_uploaded_file($_FILES["myupload"]["tmp_name"], $address);

   if($bol)
     {
       $title = $_POST['title'];
       $content =  $_POST['content'];
       $sql = "INSERT INTO gallery (`title`,`content`,`img`) VALUES ('$title','$content','$address')"  ;
       $mysqli->query($sql);
       echo "上传成功!";
       header("Location:/gallery");
     }
    else echo "上传失败!";
  }
?>
阅读 3.4k
5 个回答

header函数的前面有输出语句, PHP会先发送header信息给客服端 然后(发送输出内容,即http协议中的主体内容)这是如果你就不可能对已经发送的header信息进行任何的修改了, 可以在<?php 下面加一句:

ob_start();

也可以去掉header 前面的 echo "上传成功!";

可能的问题:1.大小写问题,linux对大小写敏感;2.Linux下的正斜杠"/"和\的区别

新手上路,请多包涵

你的虚拟主机是否有配置
<IfModule dir_module>

#如果你只写了路径而文件名没写,设置apache下面这行默认访问文件为index.php,你的gallery是文件还是文件夹,如果是文件就要写后缀,文件夹的话看下你的apache的虚拟主机配置有没有下面这一行
DirectoryIndex index.php index.html index.htm  #设置访问默认文件
Alias  /ws "D:/PHP/work"  
<Directory "D:/PHP/work">  
Order allow,deny  
Allow from all  
</Directory>  

</IfModule>

header之前不要有任何的输出 具体查php手册

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题