PHP文件上传失败

时间:2011-01-14 03:56:02

标签: php file-upload

由于某些原因,我的PDF上传表单一直失败,我有这个代码:

<?php
if($_POST["submit"] == "Add PDF to Comm and Special Projects")
{
    $addsubp = $_POST["addsubp"];
    $addsubp_name = $_POST["addsubp_name"];
    $commuploadedfile = $_FILES['uploadedfile']['name'];
    $sqldoc = "INSERT INTO projects_links (pid, display_name, link) VALUES ('".$addsubp."','".$addsubp_name."','".$commuploadedfile."')";
    mysql_query($sqldoc) or die(mysql_error()); 
    echo "<BR>";
    $target_path = "D:\\Hosting\\69903\\html\\pdfs\\comm\\";    
    $target_path = $target_path . basename( $_FILES['uploadedfile']['name']); 

    if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $target_path)) {
        echo "<br>The file ".  basename( $_FILES['uploadedfile']['name']). 
        " has been uploaded<br>";
    } else{
        echo "<br>There was an error uploading the file, please try again.<br>";
    }
}
?>
<form method="post">
Add PDF to Project for Committees and Special Projects <br>Choose Project<select name="addsubp"><?php

$query = "SELECT
projects.*
FROM
projects";
$showresult = mysql_query($query);
$csp_c = 1;
while($buyarray = mysql_fetch_assoc($showresult))
{
    echo "<option value=".$buyarray['id'].">".$buyarray["pname"]."</option>";
}

?></select><br>
Choose Display Name for PDF <input type="text" name="addsubp_name" /> <Br>
Choose PDF: <input name="uploadedfile" type="file" /> <Br>
<input type="submit" value="Add PDF to Comm and Special Projects" name="submit" />
</form>

我确保应用程序对“comm”目录具有写权限。我有godaddy并使用文件管理器来确保这一点。我以前在这个项目中遇到过权限问题,所以我知道这不是案例。它不断打印

上传文件时出错,请重试。

它根本不会尝试上传任何PDF,我做错了什么?  谢谢!

3 个答案:

答案 0 :(得分:3)

您可能有权限问题,但对于文件上传,您的表单标记应包含正确的enctype属性。

<form enctype="multipart/form-data" method="POST">

并定义文件大小限制也是一个好主意:

<input type="hidden" name="MAX_FILE_SIZE" value="1000000" />

答案 1 :(得分:2)

答案 2 :(得分:0)

  1. 您的代码是盲目地假设文件上传成功。至少你应该有像

    这样的东西

    if($ _FILES ['uploadedfile'] ['error'] === UPLOAD_ERR_OK){    ...处理上传 }

  2. 您的代码容易受到SQL注入攻击。您不会转义要插入数据库的3个值中的任何一个

  3. 在确保文件已成功移入目标目录之前,您正在创建数据库记录。如果由于任何原因无法写入文件会发生什么情况(因为现在出现问题)?数据库会说它在那里,文件系统会说它不是

  4. 您没有检查文件冲突。如果两个单独的上传发送“file.txt”,则第二个上传将覆盖第一个。

  5. 您使用用户提供的名称存储文件,该名称由用户控制。如果此文件可通过Web访问,则任何有权访问您上传表单的人都可以上传他们想要的任何内容(例如php文件),服务器将很乐意为他们执行。