2012-05-24 74 views
3

我需要使用會話變量作爲用戶名來指定uploadify(版本3.1)中的上載路徑。在uploadifive.php使用以下工作正常:會話變量沒有傳遞給uploadify.php

$uploadDir = 'media/' . $_SESSION["user_name"] . '/'; 

然而,在uploadify,當我使用相同的代碼,文件只是上傳到媒體文件夾(忽略用戶文件夾)。我在uploadify.php中回顯了$ _SESSION [「user_name」],並使用onUploadSuccess函數檢索了該函數,儘管開始會話,但實際上用戶名變量並未傳遞給uploadify.php。

這似乎很奇怪,這可以與uploadifive和不uploadify。我對PHP不太瞭解,並且很樂意爲此提供一些幫助。

我在下面列出了完整的uploadify.php腳本。

感謝,

尼克

<?php 
session_start(); 
/* 
Uploadify 
Copyright (c) 2012 Reactive Apps, Ronnie Garcia 
Released under the MIT License <http://www.opensource.org/licenses/mit-license.php> 
*/ 
// Define a destination 
$targetPath = 'media/' . $_SESSION["user_name"] . '/'; 

if (!empty($_FILES)) { 
    $tempFile = $_FILES['Filedata']['tmp_name']; 
    $targetFile = $targetPath . $_FILES['Filedata']['name']; 

    // Validate the file type 
    $fileTypes = array('jpg','jpeg','gif','png'); // 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.'; 
    } 
} 
?> 
+1

你可以'var_dump($ _SESSION)'只是爲了確保你實際存儲數據?我的意思是,你*在登錄時設定了數值,對嗎? – Sampson

回答

1

我會檢查你的登錄腳本,以確保你確實在認證用戶存儲會話數組中的用戶名。你打電話session_start(),這消除了這種可能性,所以如果你打電話$_SESSION["user_name"]而不是得到一個值,它只能意味着價值是不是開始,或者你得到的關鍵是錯誤的。

+0

謝謝,問題是由於Flash中的一個錯誤 - 會話cookie沒有被Flash文件拾取。有一個解決方法詳細[這裏](http://www.uploadify.com/documentation/uploadify/using-sessions-with-uploadify/),我不知道當我第一次發佈上面的問題。但是,我現在正在上傳HTTP 500錯誤。 formData正在返回:''formData':{'PHPSESSID':'6670707f6671abcdfd8c06e2aaf079e6'},'我不確定這是否應該與我已經包含在uploadify.php頂部的代碼一致,方法是根據變通方法。 – Nick

2

我也偶然發現了這個問題。

Uploadify Flash文件是調用PHP腳本的瀏覽器,而不是瀏覽器,這意味着PHP會話不會從瀏覽器傳播到Flash並傳遞到服務器,您只需傳遞會話ID通過$ _GET/$ _ POST使問題消失。

在HTML文件中:

<input type="hidden" id="sessionid" value="<?php echo session_id(); ?>" /> 

在JavaScript文件:

$('#image').uploadify({ 
    'uploader' : '/uploadify-v2.1.4/uploadify.swf', 
    'script' : '/uploadify.php', 
    'cancelImg' : '/uploadify-v2.1.4/cancel.png', 
    'folder' : '/tempfiles', 
    'auto'  : true, 
    'multi'  : false, 
    'scriptData': { 'session': $('#sessionid').val() } 
}); 

在PHP文件:

if (isset($_REQUEST['session']) && !empty($_REQUEST['session'])) { 
    session_id($_REQUEST['session']); 
} 
session_start(); 

似乎有一個問題,當會話配置設置爲auto_start(但我沒有完全測試過)。

這也在documentation of Uploadify中提到。

+0

謝謝。我現在可以看到,在版本3.x中,我忽略了uploadify站點上[傳遞會話變量](http://www.uploadify.com/documentation/uploadify/using-sessions-with-uploadify/)的說明。我已經實現了這一點,我現在得到一個HTTP 500錯誤。formData正在返回:''formData':{'PHPSESSID':'6670707f6671abcdfd8c06e2aaf079e6'},'看起來好。我不確定錯誤與什麼有關。有任何想法嗎? – Nick

+0

嗨尼克,關於500錯誤,抱歉不能幫助那裏,因爲我之前沒有遇到過使用Uploadify的錯誤,但是請檢查mod_security規則或暫時禁用它,只是爲了查看它是否干擾它,一次Uploadify和mod_security有問題,但是錯誤代碼是412 Precondition Failed。 – Tio

+0

謝謝。我想測試傳遞會話變量的解決方法是否實際工作,但我不知道如何通過uploadify.php實現'var_dump($ _SESSION);'。看到[這個問題](http://stackoverflow.com/questions/10735847/how-can-i-check-whether-session-variables-are-getting-passed-to-uploadify-php)瞭解更多信息。有任何想法嗎? – Nick