2012-08-26 100 views
0

我想做一个PHP上传,将上传到特定的文件夹。 一个人会选择他们希望上传的文件旁边的下拉框,这是一个文件夹列表。这是因为它组织文件。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!"; 
} 

?> 

目前代码上传文件到“文档”文件夹而不是文档/文件夹。相反,它将文件夹名称放在文件的前面。对于示例 - 如果文件夹名为“ABC”和我的文件名为robs.docx将其上传到主文档文件夹中,并调用它abcrobs.docx

回答

2

你有一个丢失的斜杠

替换该行:

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

有:

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

OR:

众议员花边这一行:

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

有:

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

我看到我现在出了问题..小白错误:)感谢的是:d – Rsmithy

+0

我会,但我要等到计算器让我 – Rsmithy

0

你缺少$ target_path后斜线

+0

这真是一个评论,而不是一个答案。 – Lix

+0

'./。'在某种程度上,它回答我的问题,如我要看看我的代码,看看我错过了“/” – Rsmithy

0

$target_path的末尾添加/

$target_path = "../../shared/docs/$folder/"; 
1
  1. 你不需要mysql_real_escape_string,因为这里没有涉及到SQL。
  2. 如果没有建立数据库连接,mysql_real_escape_string回报null。所以你可能会丢掉$_POST['loc']的价值。
  3. 你永远也不会使用用户提供的值,而没有真正在文件系统操作什么,你要操纵什么真正彻底的检查。请参阅Security threats with uploads
  4. 使用var_dump可以自由地查看您的值在各个阶段的样子,并进行一些调试。
+0

我只是复制的东西从旧脚本的'$文件夹= mysql_real_escape_string($ _POST ['loc']);'当时我正在构建一个粗略的脚本,我将开发;为安全和重复的文件名称。感谢您的反馈和链接 – Rsmithy

+0

此上传区域也位于受限区域 - 只有管理员用户(我已授权他们)可以访问 - 他们将文件上传到门户网站上的所有用户均可访问的区域(通过网页) – Rsmithy

0

应该正确转义的变量:

$target_path = "../../shared/docs/". $folder ."/"; 
相关问题