2010-05-21 142 views

回答

10

要上传文件,您至少需要一个带有multipart/form-data编码的HTML POST表单。在这里,您需要输入input type="file"字段来浏览该文件并提交一个提交按钮以提交表单。

<form action="upload.php" method="post" enctype="multipart/form-data"> 
    <input type="file" name="file"> 
    <input type="submit"> 
</form> 

upload.php上传的文件通过$_FILES与字段名关键是入店。

$file = $_FILES['file']; 

你可以得到它的名字如下:

$name = $file['name']; 

你需要使用move_uploaded_file()将其移动到一个固定的位置,否则会迷失:

$path = "/uploads/" . basename($name); 
if (move_uploaded_file($file['tmp_name'], $path)) { 
    // Move succeed. 
} else { 
    // Move failed. Possible duplicate? 
} 

您可以存储在数据库中的路径通常的方式:

$sql = "INSERT INTO file (path) VALUES ('" . mysqli_real_escape_string($path) . "')"; 
// ... 
+2

@Col:你在回答中对问题没有提出解决问题的答案,而是对问题进行了低估和抨击。那么,我不能做太多的事情来满足你。我是否应该添加一个错误检查/ nullcheck?那种事情。只是这样说,而不是咆哮:) – BalusC 2010-05-21 11:25:29

+0

和'$ path =“/ uploads /”'对于新手开发者来说是非常常见的错误。在真实环境中的文件系统根目录上载目录几乎是不可能的。很可能它与文档根目录混淆。 – 2010-05-22 14:52:02

+0

@Col:我通常使用专用/同位置托管,我只能完全控制文件系统。这在Java webapps中也是正常的做法,但对于普通的PHP webapp/hosting而言确实是正确的。 – BalusC 2010-05-22 14:55:04

5

http://www.w3schools.com/php/php_file_upload.asp

HTML

<html> 
<body> 

<form action="upload_file.php" method="post" 
enctype="multipart/form-data"> 
<label for="file">Filename:</label> 
<input type="file" name="file" id="file" /> 
<br /> 
<input type="submit" name="submit" value="Submit" /> 
</form> 

</body> 
</html> 

PHP

<?php 
    if ($_FILES["file"]["error"] > 0) 
    { 
    echo "Return Code: " . $_FILES["file"]["error"] . "<br />"; 
    } 
    else 
    { 
    if (file_exists("upload/" . $_FILES["file"]["name"])) 
     { 
     echo $_FILES["file"]["name"] . " already exists. "; 
     } 
    else 
     { 
     move_uploaded_file($_FILES["file"]["tmp_name"], 
     "upload/" . $_FILES["file"]["name"]); 
     echo "Stored in: " . "upload/" . $_FILES["file"]["name"]; //<- This is it 
     } 
    } 
?> 

注意,上传您需要指定文件保存路径的文件。如果你保存文件,你已经知道它的路径。