我需要使用username的会话变量来指定uploadify(版本3.1)中的上传路径。在uploadifive.php中使用以下工作正常:
$uploadDir = 'media/' . $_SESSION["user_name"] . '/';
但是在uploadify中,当我使用相同的代码时,文件只会上传到媒体文件夹(忽略用户文件夹)。我在uploadify.php中回显了$ _SESSION [“user_name”]并使用onUploadSuccess函数检索了它,并且尽管启动了会话,但实际上username变量没有传递给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.';
}
}
?>
答案 0 :(得分:2)
我也偶然发现了这个问题。
Uploadify flash文件是调用PHP脚本而不是浏览器的文件,这意味着PHP Session不会从浏览器传播到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中也提到了这一点。
答案 1 :(得分:1)
我会检查您的登录脚本,以确保在对用户进行身份验证时确实将用户名存储在会话数组中。您正在调用session_start()
,这消除了这种可能性,因此如果您正在调用$_SESSION["user_name"]
而不获取值,则只能表示该值不存在开始,或者说你的钥匙错了。