在PHP中,move_uploaded_file的目标路径是什么?

8
我需要知道在PHP的move_uploaded_file函数中,应该使用哪个文件路径作为目标路径。(请参阅http://php.net/manual/en/function.move-uploaded-file.php)
目前,我的代码可以正常工作。我的域根目录包含以下项目(和其他项目一起):
uploads     <-这是一个文件夹
add-photo-submit.php    <-这是使用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并添加尾随斜杠。

现在,PHP文件在www.mydomain.com/add-photo-submit/处访问。

我认为PHP文件正在将目标路径解释为“www.mydomain.com/add-photo-submit/uploads/filename.jpg”。

我尝试使用绝对路径,但它说我没有权限...

未来,我希望我的根目录设置如下:
root
 -admin(文件夹)
    -add-photo-submit.php
 -uploads

move_uploaded_file具有什么参考框架?

5个回答

31

你应该使用 document_root 来获取绝对路径,像这样:

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

1
您可以使用PHP常量__DIR__作为$_SERVER ['DOCUMENT_ROOT']的替代品... - AnchovyLegend

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
我们可以使用dirname(__FILE__)代替服务器根目录,在任何一个根目录文件(如index.php)中声明以下代码:
$_SESSION["uploads_base_url"]=dirname(__FILE__); 

现在,您可以在任何需要上传的文件中使用此功能。

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

1
或者使用
$target_path = "../uploads/" . basename($fileUpload['name']);

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";
       }  
    }

这个答案缺少教育性的解释。 - mickmackusa

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接