2010-04-04 84 views
0

我想写一个php上传脚本来上传文件到不同的文件夹。我的代码适用于直接路径(类似于'path/to/directory'),但不适用于从运行时获取的动态路径。PHP文件上传不能用于动态路径

$directory_self = dirname($_SERVER['PHP_SELF']); 
$folder = $_POST['folder_name']; //final folder 
$toupload = $_SERVER['DOCUMENT_ROOT'] . $directory_self .'/files'. $folder; 
$uploadsDirectory = str_replace (" ", "", $toupload); 

当我回显$ uploadsDirectory它显示确切的路径。任何人都可以帮助我解决这个问题吗?

+0

使用PHP路径和目录功能来验证$上传目录IS_A目录IS_WRITABLE,然后尝试将文件移动到目标。 您可能需要考虑的一些函数:realpath(),is_dir() - 请查看手册以了解更多功能 – Andreas 2010-04-04 15:07:16

回答

0

使用我的笔记本电脑dirname(__FILE__);

<?php 
$directory_self = dirname(__FILE__); 
$folder = "faruk"; //final folder 
$toupload = $_SERVER['DOCUMENT_ROOT'] . $directory_self .'/files/'. $folder; 
$uploadsDirectory = trim($toupload); 
echo $uploadsDirectory."\n"; 

?> 

输出尝试;

/home/test/Desktop/files/test 
+0

我无法使用dirname(__ FILE__),因为我在windows server上工作,导致$ directory_self的反斜杠为文档根目录。 – Devdarsh 2010-04-04 14:37:02

+0

@Devdarsh - 所以,使用正则表达式或字符串替换方法来解决这个问题。 – Moshe 2010-04-04 15:00:32

0

您应该检查并查看该文件夹是否已创建,以及该脚本是否有权在其中写入文件。

上传脚本的确切输出是什么? (即什么错误它扔?)

+0

写入权限在那里,我可以通过直接路径写入文件。我只在定义$ _SERVER ['DOCUMENT_ROOT']时出错。 $ directory_self。'/ files'。 $文件夹; 它引发“发生错误:接收目录不足的许可...” – Devdarsh 2010-04-04 14:39:43

+0

$文件夹将在运行时更改 – Devdarsh 2010-04-04 14:41:22

+0

我还是不明白:)。 _generated_字符串是否与现有文件夹相对应?如果您尝试上传到'$ _SERVER ['DOCUMENT_ROOT']。 $ directory_self。'/ files'。 $文件夹','$文件夹'是'/ abc'和'[...]/abc'不存在,你会得到一个错误。 – 2010-04-04 14:46:51

0

尝试添加一些调试的东西,看看是否你实际上产生的路径存在并且是可写的:

$directory_self = dirname($_SERVER['PHP_SELF']); 
$folder = $_POST['folder_name']; //final folder 
$uploaddir = $_SERVER['DOCUMENT_ROOT'] . $directory_self . '/files'; 

$uploadsDirectory = str_replace (" ", "", $uploaddir); 

if (!is_dir($uploadDirectory)) { 
    die("$uploadDirectory is not a directory"); 
} 

if (!is_writeable($uploadDirectory)) { 
    die("$uploaddir is not writeable"); 
} 

$toupload = $uploadDirectory . $folder; 

if (!is_writeable($toupload)) { 
    die("$toupload is not writeable"); 
} 
+0

嗨,我试过你的建议,它会抛出“E:/ TechPlat/apache/htdocs/uploads/abc不是目录”。但是我创建了这个文件夹,我可以在浏览器栏中加载打印的路径并加载文件夹。我正在使用Windows服务器。 – Devdarsh 2010-04-04 15:09:34

+0

E:本地驱动还是网络共享?你是否正在使用某种LiveCD运行它,并且E:是cdrom?用户帐户是否运行Apache可以访问该文件夹?即使你这样做,Apache也可能不会。尝试支持“向上”树,一次一层,并查看是否有任何父目录工作。 .../htdocs/uploads,然后.../htdocs等... – 2010-04-04 19:19:05