php中move_uploaded_file的目标路径

时间:2011-11-30 03:29:47

标签: php file-upload

我需要知道如何使用PHP的move_uploaded_file函数的目标路径。 (见http://php.net/manual/en/function.move-uploaded-file.php

现在,我的代码运行正常。我的域的根目录包含以下项目(其中包括):
上传< -t这是一个文件夹
add-photo-submit.php< -t这是一个使用move_uploaded_file的PHP文件

在add-photo-submit.php中,我有以下代码行:

$target_path = "uploads/" . basename($_FILES['uploadedFile']['name']);

$ target_path用作函数的目标参数。 当我通过www.mydomain.com/add-photo-submit.php访问该文件时,这可以正常工作

但是,我最近更改了.htaccess文件以删除.php并添加一个尾部斜杠。 现在可以访问www.mydomain.com/add-photo-submit/访问PHP文件 我认为PHP文件将目标路径解释为“www.mydomain.com/add-photo-submit/uploads/filename.jpg”

我尝试使用绝对路径,但它说我没有得到许可......

将来我希望我的根目录设置如下:

-admin(文件夹)
-add-照片submit.php
-uploads

move_uploaded_file有哪些参考框架?

5 个答案:

答案 0 :(得分:27)

您应该使用document_root来获取这样的绝对路径:

$target_path = $_SERVER['DOCUMENT_ROOT'] . "/uploads/" . basename($_FILES['uploadedFile']['name']);

答案 1 :(得分:3)

PHP的本地文件名操作不知道mod_rewrite对你的url做了什么,只处理实际的原始文件系统路径。你可以让mod_rewrite将你的简单example.com/index.php变成一个可怕的example.com/a/b/c/d/e/f/g/h/i/j/k/l/m/n/o/p/q/r/s/t/u/v/w/x/yz,PHP仍然会在服务器上的同一个物理目录中运行。

如果PHP脚本位于/home/sites/example.com/html/index.php,并且您使用uploads/example.jpg作为移动路径,则PHP将尝试将该图像放入/home/sites/example.com/html/uploads/example.jpg,无论请求的URL是什么

答案 2 :(得分:1)

或使用

$target_path = "../uploads/" . basename($fileUpload['name']);

答案 3 :(得分:1)

我们可以使用dirname(__FILE__)代替服务器root  在任何 root 文件(index.php)

中声明以下行
$_SESSION["uploads_base_url"]=dirname(__FILE__); 

现在您可以在任何需要上传的文件中使用它。

echo $uploads_base_url=$_SESSION["uploads_base_url"];

答案 4 :(得分:0)

    $file_name ="eg-db.sql"; 
    echo "<br>";
    echo $target_file =  __DIR__.'/'.$file_name;
    echo "<br>";
    echo $target_location = __DIR__."/targetfolder/". pathinfo($target_file, PATHINFO_BASENAME); 

    echo "<br>";
    if (file_exists($target_file)){  
       echo "<br> file exist <br>";
       if (rename($target_file,$target_location)) 
       {
           echo "<br>done"; 
       }else{
           echo "<br>nothing";
       }  
    }