2010-07-20 61 views
2

我的PHP腳本可以上傳文件,但是在高於自身的目錄中不能這樣做。PHP無法在高於它的目錄中上傳文件

例如:它會在upload/節省(相對路徑在同一水平作爲腳本),但不是在/usr/local/hello/即使該文件的權限是正是相同。沒有最大上傳大小,最大發布大小,執行時間和安全模式關閉的問題。任何人有任何想法?我什至不能得到一個錯誤信息 - 只有當它失敗時,下面的$worked返回false。

<?php 
// Removed the rest of the error-checking code! 
$contentDir = "/usr/local/hello/"; // <-- doesn't work, chmod 0777, owner: root, group root 
//$contentDir = "upload/"; <-- works, chmod 0777 owner: root, group: root 
error_reporting(E_ALL); 
$filename = $_FILES["filey"]["name"]; 
$worked = move_uploaded_file(
       $_FILES["filey"]["tmp_name"], 
       $contentDir.$filename); 
var_dump($worked); 
?> 

編輯:我的open_basedir設置,通過phpinfo()函數給出的,分別是:

Directive  Local Value Master Value 
open_basedir no value no value 

謝謝!

+0

可能不是這種情況(我會去open_basedir),但是你沒有運行chroot這個東西?即你認爲它是/ usr/local/hello,但php認爲不然? (因爲其他差異是絕對vs相對路徑) – mvds 2010-07-20 23:03:57

回答

4

open_basedir配置變量可能會限制目錄。

請參閱PHP手冊中的open_basedir

+0

如果它沒有值,它不應該限制任何東西。 – Mewp 2010-07-21 08:28:59

1

請向我們展示$_FILES['filey']['error']的內容,錯誤上傳文件不像往常一樣報告,但在該結構中。

http://php.net/manual/en/features.file-upload.errors.php

雖然它很可能是什麼Mewp

+0

儘管我沒有在問題中添加它,但是該變量的轉儲始終爲: '[「error」] => int(0)':'Value:0;沒有錯誤,文件上傳成功.' – ash 2010-07-20 23:33:04

0

您使用的是原始的客戶端文件名作爲服務器端的文件名。該文件名是否已經存在於服務器上?該目錄可能爲0777,但如果該文件名已存在,則該文件也必須可由Web服務器的UID寫入。

例如如果您正在上傳「resume.doc」,那麼/usr/local/hello/resume.doc是否已經存在?如果它不是模式0777,則move_uploaded_file()將失敗。

docs狀態,如果源文件IS有效的上傳文件,但出於某種原因,此舉失敗,將發出警告,所以請檢查您的PHP錯誤日誌中。