2011-04-16 81 views
1

我有一个简单的文件上传,这感谢stackoverflow现在完全工作,但是当我将PHP代码复制到我的主布局,一旦初始化上传文件,但它是错误的格式或大小,它回应错误,它打破了它下面的HTML。我认为它与“退出”有关。每个回声之后?但可能是错误的。PHP代码打破HTML布局

<?php 
if($_POST['upload']) { 
if($_FILES['image']['name'] == "") 
{ 
    #there's no file name return an error 
    echo "<br/><b>Please select a file to upload!\n</b>"; 
    exit; 
} 
#we have a filename, continue 

#directory to upload to 
$uploads = '/home/habbonow/public_html/other/quacked/photos'; 
$usruploads = 'photos'; 

#allowed file types 
$type_array = array(image_type_to_mime_type(IMAGETYPE_JPEG), image_type_to_mime_type(IMAGETYPE_GIF), image_type_to_mime_type(IMAGETYPE_PNG), 'image/pjpeg'); 

if(!in_array($_FILES['image']['type'], $type_array)) 
{ 
    #the type of the file is not in the list we want to allow 
    echo "<br/><b>That file type is not allowed!\n</b>"; 
    exit; 
} 

$max_filesize = 512000; 
$max_filesize_kb = ($max_filesize/1024); 

if($_FILES['image']['size'] > $max_filesize) 
{ 
    #file is larger than the value of $max_filesize return an error 
    echo "<br/><b>Your file is too large, files may be up to ".$max_filesize_kb."kb\n</b>"; 
    exit; 
} 

$imagesize = getimagesize($_FILES['image']['tmp_name']); 

#get width 
$imagewidth = $imagesize[0]; 
#get height 
$imageheight = $imagesize[1]; 

#allowed dimensions 
$maxwidth = 1024; 
$maxheight = 1024; 

if($imagewidth > $maxwidth || $imageheight > $maxheight) 
{ 
    #one or both of the image dimensions are larger than the allowed sizes return an error 
    echo "<br/><b>Your file is too large, files may be up to ".$maxwidth."px x ".$maxheight."px in size\n</b>"; 
    exit; 
} 

move_uploaded_file($_FILES['image']['tmp_name'], $uploads.'/'.$_FILES['image']['name']) or die ("Couldn't upload ".$_FILES['image']['name']." \n"); 

echo "<br/>The URL to your photo is <b>" . $usruploads . "/" . $_FILES['image']['name'] . "</b>. Please use this when defining the gallery photos"; 

} 

?> 

<form name="uploader" method="post" action="" enctype="multipart/form-data"> 
     <input type="file" name="image" style="width:300px;cursor:pointer" /> 
     <input type="submit" name="upload" value="Upload Image" /> 
</form> 
+0

'退出;'将停止脚本。 PHP代码后的HTML不会被发送到浏览器。 – Eliasdx 2011-04-16 12:40:53

+0

它给出了什么错误?恳请提及所有 – diEcho 2011-04-16 12:42:34

+0

只适用于这里完美的工作'move_uploaded_file()'警告后点击上传按钮bcoz文件夹结构是不同于我的电脑 – diEcho 2011-04-16 12:44:18

回答

3

确实,当你拨打exit;这意味着“立即停止所有处理;该脚本完成”。它后面的任何内容(包括HTML)都不会被解释。

一个更好的组织是使这个代码功能,效果:

function uploadMyStuffPlease() { 

    if($_POST['upload']) { 
     if($_FILES['image']['name'] == "") 
     { 
      #there's no file name return an error 
      echo "<br/><b>Please select a file to upload!\n</b>"; 
      return; 
     } 
     #we have a filename, continue 

    // .... 

} 

现在,你可以简单地调用uploadMyStuffPlease(),这将做尽可能多的处理是可以的,也许在提前返回发生错误。无论哪种方式,功能返回,所以您的脚本的其余部分(包括该HTML)仍然可以解释。

+0

正常工作,如: 'code' <脚本类型= “文/ JavaScript的”> 功能uploadMyStuffPlease(){ 请选择要上传的文件!\ n“; return; }'code' 等....... 然后: 'code' <形式名称= “上载” 的方法= “POST” 行动= “” ENCTYPE = “多部分/格式数据” 的onsubmit = “uploadMyStuffPlease()”>'code' – ben 2011-04-16 12:56:35

+0

这不是JavaScript。此处不涉及'

1

如果您致电exit;您的PHP脚本将不能输出任何东西了。这就是布局破裂的原因。

你也许应该尽量保持HTML部分出你的PHP代码,特别是避免打开标记,这之后您没有关闭(即div S或任何东西)。

也就是说,将所有内容放入一个不会在完成时退出脚本的函数是最安全的(参见其他文章)。

+0

+1为“保持HTML的PHP​​” – NoxArt 2011-04-16 13:18:21

1
if(isset($_POST['upload'])){ 

OR

if(!empty($_POST['upload'])){ 

,并删除exit ...

+0

不工作,如果我删除退出,它只是输出所有回显错误。谢谢你, – ben 2011-04-16 12:51:50

+0

@ben,你有替换我提供给你的第一行吗?我想如果你离开'$ _POST ['upload']',它只会检查布尔值。 – 2011-04-16 13:07:21

+0

是的,我改变了这一行,我试了他们两个,都没有退出尝试;并没有工作:) – ben 2011-04-16 13:09:54