我想對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的經驗有限,但不知道如果會話變量返回了正確的字符串,上傳的工作方式與手動輸入的字符串不同。
任何幫助將不勝感激。這是網站的最後一個問題,因爲兩天前就要上線了!
感謝,
尼克
不是一個答案,但要注意,''name''由發送客戶端*(瀏覽器)*,並且可能包含惡意數據,並且不應該信任 - 可以發送名爲test.mp3的文件,該文件將包含一些非mp3內容;;;首先保存文件時應該生成自己的名稱;並使用http://www.php.net/fileinfo來分析文件的內容類型,而不是信任用戶發送的擴展名。 – 2011-04-02 16:29:00
您是否嘗試過echo'$ targetFile'並在'move_uploaded_file()'調用之前查看它包含的值? – Wh1T3h4Ck5 2011-04-02 16:36:03
@ Wh1T3h4Ck5謝謝,但我不確定如何回顯'$ targetFile',因爲這隻會在上傳時產生,這種情況發生在我的index.php頁面 – Nick 2011-04-02 16:49:05