2011-11-30 58 views
5

我需要知道PHP的move_uploaded_file函數的目標路徑是什麼。 (見http://php.net/manual/en/function.move-uploaded-file.phpmove_uploaded_file的目標路徑在php

現在,我的代碼工作正常。我的域名的根目錄包含以下項目(其中包括):
上傳          < - 這是一個文件夾
附加照片submit.php       < - 這是使用move_uploaded_file
一個PHP文件

在附加照片submit.php,我有下面的代碼行:

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

$ target_path我s用作函數的目標參數。 這工作得很好,當我通過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-photo-submit.php
  -uploads

move_uploaded_file有什麼參考框架?

回答

23

您應該使用的document_root獲得這樣的絕對路徑:

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

或者您也可以使用PHP常量,'__DIR__'作爲替代'$ _ SERVER [ 'DOCUMENT_ROOT']'... – AnchovyLegend

+0

5年後,仍幫助。謝謝 – raqulka

1

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是什麼。

0

或以任何文件的使用

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

我們可以用dirname(__FILE__)而不是服務器的根目錄 聲明如下行(index.php)

$_SESSION["uploads_base_url"]=dirname(__FILE__); 

,你現在可以在任何需要上傳的文件中使用它。

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