0

我正在尝试进行 php 上传,该上传将上传到特定文件夹。可以在作为文件夹列表的下拉框旁边选择他们希望上传的文件。这是因为它组织文件。

<?php 
session_start();
if(!isset($_SESSION["USER"]["Admin"])){
    header("Location: index.html?unath");
}

$folder = mysql_real_escape_string($_POST['loc']);

$target_path = "../../shared/docs/$folder";




$upload2 = $target_path  .  basename( $_FILES['uploadedfile']['name']); 

if(move_uploaded_file($_FILES['uploadedfile']['tmp_name'], $upload2)) {
    echo "The file ".  basename( $_FILES['uploadedfile']['name']). 
    " has been uploaded";
} else{
    echo "There was an error uploading the file, please try again!";
}

?>

目前,代码将文件上传到“docs”文件夹而不是 docs/文件夹。相反,它将文件夹名称放在文件前面。例如 - 如果文件夹名为“abc”而我的文件名为 robs.docx,它将上传到主 Docs 文件夹并命名为 abcrobs.docx

4

5 回答 5

2

你有一个缺少的斜线

替换这一行:

$upload2 = $target_path  .  basename( $_FILES['uploadedfile']['name']); 

和:

$upload2 = $target_path  ."/".  basename( $_FILES['uploadedfile']['name']); 

或者:

替换这一行:

$target_path = "../../shared/docs/$folder";

和:

$target_path = "../../shared/docs/".$folder."/";
于 2012-08-26T11:12:46.833 回答
1
  1. 您不需要mysql_real_escape_string,因为这里不涉及 SQL。
  2. 如果没有建立数据库连接,则mysql_real_escape_string返回null。因此,您可能正在丢弃$_POST['loc']价值。
  3. 你永远不应该使用用户提供的值来操作文件系统上的任何内容,而无需真正彻底地检查你将要操作的内容。请参阅上传的安全威胁
  4. 随意使用var_dump以查看您的值在各个阶段的样子并进行一些调试。
于 2012-08-26T11:14:33.937 回答
0

应该正确地转义你的变量:

$target_path = "../../shared/docs/". $folder ."/";
于 2012-08-26T11:15:53.383 回答
0

您在 $target_path 之后缺少一个斜杠

于 2012-08-26T11:12:59.113 回答
0

/在你的末尾添加一个$target_path

$target_path = "../../shared/docs/$folder/";
于 2012-08-26T11:13:34.887 回答