3

我需要为用户名使用会话变量来指定uploadify(版本3.1)中的上传路径。在 uploadifive.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.';
    }
}
?>
4

2 回答 2

2

我也偶然发现了这个问题。

Uploadify flash 文件是调用 PHP 脚本的文件,而不是浏览器,这意味着 PHP 会话不会从浏览器传播到 flash 和服务器,您只需通过 $_GET/ 传递会话 ID $_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 时似乎有问题(但我还没有完全测试过)。

Uploadify的文档中也提到了这一点。

于 2012-05-24T00:59:13.860 回答
1

我会检查您的登录脚本,以确保您在验证用户时确实将用户名存储在会话数组中。您正在调用session_start(),这消除了这种可能性,因此,如果您正在调用$_SESSION["user_name"]没有获得值,则只能表示该值不存在,或者您的密钥错误。

于 2012-05-24T00:48:09.947 回答