2011-04-02 44 views
0

我想對uploadify(3.0 beta)最新版本附帶的uploadify.php進行一些調整,以便它可以與存儲登錄用戶名並將其添加到上傳路徑。這裏是uploadify.php,因爲它目前的樣子:由變量返回的字符串不能像手動輸入的字符串那樣工作

<?php 
session_name("MyLogin"); 
session_start(); 

$targetFolder = '/songs/' . $_SESSION['name']; // Relative to the root 

if (!empty($_FILES)) { 
    $tempFile = $_FILES['Filedata']['tmp_name']; 
    $targetPath = $_SERVER['DOCUMENT_ROOT'] . $targetFolder; 
    $targetFile = rtrim($targetPath,'/') .'/'. $_FILES['Filedata']['name']; 

    // Validate the file type 
    $fileTypes = array('m4a','mp3','flac','ogg'); // File extensions 
    $fileParts = pathinfo($_FILES['Filedata']['name']); 

    if (in_array($fileParts['extension'],$fileTypes)) { 
     move_uploaded_file($tempFile,$targetFile); 
     echo '1'; 
    } else { 
     echo 'Invalid file type.'; 
    } 
} 

echo $targetFolder; 

?> 

我在底部添加echo $targetFolder;,這樣我可以確保返回的字符串是正確的,它是,即「/歌曲/尼克」。不過,出於某種原因,上傳不會轉到正確的文件夾,即用戶名文件夾,而是轉到父文件夾'歌曲'。用戶名文件夾存在,具有正確的權限,當我手動輸入$targetFolder = '/songs/nick';時,所有工作都正常。這讓我覺得很奇怪。我使用php的經驗有限,但不知道如果會話變量返回了正確的字符串,上傳的工作方式與手動輸入的字符串不同。

任何幫助將不勝感激。這是網站的最後一個問題,因爲兩天前就要上線了!

感謝,

尼克

+0

不是一個答案,但要注意,''name''由發送客戶端*(瀏覽器)*,並且可能包含惡意數據,並且不應該信任 - 可以發送名爲test.mp3的文件,該文件將包含一些非mp3內容;;;首先保存文件時應該生成自己的名稱;並使用http://www.php.net/fileinfo來分析文件的內容類型,而不是信任用戶發送的擴展名。 – 2011-04-02 16:29:00

+0

您是否嘗試過echo'$ targetFile'並在'move_uploaded_file()'調用之前查看它包含的值? – Wh1T3h4Ck5 2011-04-02 16:36:03

+0

@ Wh1T3h4Ck5謝謝,但我不確定如何回顯'$ targetFile',因爲這隻會在上傳時產生,這種情況發生在我的index.php頁面 – Nick 2011-04-02 16:49:05

回答

0

海蘭

嘗試使用'songs/',而第一個 '/'

+0

上,不幸的是這種行爲不起作用,無論是使用手冊路徑或包含變量的路徑 – Nick 2011-04-02 17:16:49

相關問題