SWFUpload的破坏会话? PHP [英] swfupload destroy session? php

查看:150
本文介绍了SWFUpload的破坏会话? PHP的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

HY,我需要一些帮助在这里:

我使用的SWFUpload上传图片!
在上传的功能,我做的一个文件夹调用 $ _ SESSION ['文件夹'] 和所有的文件我上传的都是1阵列通话 $ _ SESSION ['文件'] 后上传完成I 的print_r($ _ SESSION)但阵列是空的?为什么?

这是我的upload.php的:

 如果($ _ FILES ['形象'] ['名']){
    列表($名称,$错误)=上传('形象','JPEG,JPG,PNG');
    如果($错误){$结果= $误差;}
    如果($名){//上传成功
        $结果=水印($名);
        打印'< IMG SRC =上传/'.$_ SESSION ['目录'。'/'$结果。'/>';    }其他{//上传由于某种原因失败。
        打印NONAME$结果。
    }
}函数上传($的file_id,$类型=){
    如果($ _ FILES [$ FILE_ID] ['名']!)返回阵列('','没有指定的文件');
    $ isimage = @getimagesize($ _ FILES [$ FILE_ID] ['tmp_name的值']);
    如果(!$ isimage)返回阵列('','不JPG');    $ FILE_TITLE = $ _FILES [$ FILE_ID] ['名'];
    //获取文件扩展名
    $ ext_arr =拆分(\\,基本名($ FILE_TITLE));
    $ EXT =用strtolower($ ext_arr [计数($ ext_arr)-1]); //获取最后一次延长    //不是真的潮头 - 但对于所有的实际原因,
    $ uniqer = SUBSTR(MD5(uniqid(RAND(),1)),0,10);
    // $ FILE_NAME = $ uniqer。 _。 $ FILE_TITLE; //获取唯一名称
    // $ FILE_NAME = $ FILE_TITLE;
    。$ FILE_NAME = $ uniqer $ EXT;    $ all_types =爆炸(,,用strtolower($类型));
    如果($类型){
        如果(in_array($分机,$ all_types));
        其他{
            $结果=[名字'。是不是有效的文件。$ _ FILES [$ FILE_ID。'; //显示错误(如有)。
            返回数组('',$结果);
        }
    }    如果((!使用isset($ _ SESSION ['目录'))||(!file_exists('上传/'.$_ SESSION ['目录'))){
        $目录名=日期(YmdHis); // 20010310143223
        $ pathtodir = $ _ SERVER ['DOCUMENT_ROOT']/ ifunk /上传/。
        。$ NEWDIR = $ pathtodir $目录名;
        如果(!的mkdir($ NEWDIR,0777)){返回数组('','无法创建目录');}
        $ _SESSION ['目录'] = $目录名;
    }    如果(!使用isset($ _ SESSION ['文件'])){$ _ SESSION ['文件'] =阵列();}
    //如果该文件必须上传到
    $文件夹='上传/'.$_ SESSION ['目录'。'/';
    //如果($文件夹)$文件夹='/'。 //在文件夹的末尾添加/
    $ uploadfile = $文件夹$ FILE_NAME。    $结果='';
    //从所存储的位置将文件移动到新的位置
    如果(!move_uploaded_file($ _ FILES [$ FILE_ID] ['tmp_name的值'],$ uploadfile)){
        $结果=无法上传文件[名字'。'$ _ FILES [$ FILE_ID。'; //显示错误(如有)。
        如果(!file_exists($文件夹)){
            。$结果=:文件夹不存在。
        } ELSEIF(!is_writable($文件夹)){
            。$结果=:文件夹不可写。
        } ELSEIF(!is_writable($ uploadfile)){
            。$结果=:文件没有写。
        }
        $ FILE_NAME ='';    }其他{
        如果(!$ _ FILES [$ FILE_ID] ['大小']){//检查文件由
            @unlink($ uploadfile); //删除空文件
            $ FILE_NAME ='';
            $结果=空文件中找到 - 请使用有效的文件。 //显示错误信息
        }其他{
            // $ _ SESSION ['文件'] =阵列();
            $ _SESSION ['文件'] [] = $ FILE_NAME。
            CHMOD($ uploadfile,0777); //使人人皆可写。
        }
    }    返回数组($ FILE_NAME,$结果);
}


解决方案

SWFUpload的不会话ID传递给脚本,当您上传,所以你必须这样做你自己。简单地传递会话ID的GET或POST参数来上传脚本,然后在你的应用程序做到这一点的session_start前:

 如果(使用isset($ _ REQUEST ['PHPSESSID'])){
    SESSION_ID($ _ REQUEST ['PHPSESSID']);
}

hy, i need a little help here:

i use SWFupload to upload images! in the upload function i make a folder call $_SESSION['folder'] and all the files i upload are in 1 array call $_SESSION['files'] after uploads finish i print_r($_SESSION) but the array is empty? why that?

this is my upload.php:

if($_FILES['image']['name']) {
    list($name,$error) = upload('image','jpeg,jpg,png');
    if($error) {$result = $error;}
    if($name) { // Upload Successful
        $result = watermark($name);
        print '<img src="uploads/'.$_SESSION['dir'].'/'.$result.'" />';

    } else { // Upload failed for some reason.
        print 'noname'.$result;
    }
}

function upload($file_id, $types="") {
    if(!$_FILES[$file_id]['name']) return array('','No file specified');
    $isimage = @getimagesize($_FILES[$file_id]['tmp_name']);
    if (!$isimage)return array('','Not jpg');

    $file_title = $_FILES[$file_id]['name'];
    //Get file extension
    $ext_arr = split("\.",basename($file_title));
    $ext = strtolower($ext_arr[count($ext_arr)-1]); //Get the last extension

    //Not really uniqe - but for all practical reasons, it is
    $uniqer = substr(md5(uniqid(rand(),1)),0,10);
    //$file_name = $uniqer . '_' . $file_title;//Get Unique Name
    //$file_name = $file_title;
    $file_name = $uniqer.".".$ext;

    $all_types = explode(",",strtolower($types));
    if($types) {
        if(in_array($ext,$all_types));
        else {
            $result = "'".$_FILES[$file_id]['name']."' is not a valid file."; //Show error if any.
            return array('',$result);
        }
    }

    if((!isset($_SESSION['dir'])) || (!file_exists('uploads/'.$_SESSION['dir']))){
        $dirname = date("YmdHis");  // 20010310143223
        $pathtodir = $_SERVER['DOCUMENT_ROOT']."/ifunk/uploads/";
        $newdir = $pathtodir.$dirname;
        if(!mkdir($newdir, 0777)){return array('','cannot create directory');}
        $_SESSION['dir'] = $dirname;
    }

    if(!isset($_SESSION['files'])){$_SESSION['files'] = array();}
    //Where the file must be uploaded to
    $folder = 'uploads/'.$_SESSION['dir'].'/';
    //if($folder) $folder .= '/';   //Add a '/' at the end of the folder
    $uploadfile = $folder.$file_name;

    $result = '';
    //Move the file from the stored location to the new location
    if (!move_uploaded_file($_FILES[$file_id]['tmp_name'], $uploadfile)) {
        $result = "Cannot upload the file '".$_FILES[$file_id]['name']."'"; //Show error if any.
        if(!file_exists($folder)) {
            $result .= " : Folder don't exist.";
        } elseif(!is_writable($folder)) {
            $result .= " : Folder not writable.";
        } elseif(!is_writable($uploadfile)) {
            $result .= " : File not writable.";
        }
        $file_name = '';

    } else {
        if(!$_FILES[$file_id]['size']) { //Check if the file is made
            @unlink($uploadfile);//Delete the Empty file
            $file_name = '';
            $result = "Empty file found - please use a valid file."; //Show the error message
        } else {
            //$_SESSION['files'] = array();
            $_SESSION['files'][] .= $file_name;
            chmod($uploadfile,0777);//Make it universally writable.
        }
    }

    return array($file_name,$result);
}

解决方案

SWFUpload doesn't pass the session ID to the script when you upload, so you have to do this yourself. Simply pass the session ID in a get or post param to the upload script, and then in your application do this before session_start:

if(isset($_REQUEST['PHPSESSID'])) {
    session_id($_REQUEST['PHPSESSID']);
}

这篇关于SWFUpload的破坏会话? PHP的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆