env.java

来自「RESIN 3.2 最新源码」· Java 代码 · 共 3,016 行 · 第 1/5 页

JAVA
3,016
字号
      var = new Var();      _globalMap.put(name, var);      ArrayValue post = new ArrayValueImpl();      var.set(post);      if (_request == null)        return null;      if (! "POST".equals(_request.getMethod()))        return var;      if (_postArray != null) {        for (Map.Entry<Value, Value> entry : _postArray.entrySet()) {          post.put(entry.getKey(), entry.getValue());        }      }    }    break;    case HTTP_POST_FILES:      if (! Quercus.INI_REGISTER_LONG_ARRAYS.getAsBoolean(this))	return null;    case _FILES: {      var = new Var();      _globalMap.put(name, var);      ArrayValue files = new ArrayValueImpl();      if (_files != null) {        for (Map.Entry<Value, Value> entry : _files.entrySet()) {          files.put(entry.getKey(), entry.getValue());        }      }      var.set(files);    }    break;    case HTTP_GET_VARS:      if (! Quercus.INI_REGISTER_LONG_ARRAYS.getAsBoolean(this))        return null;          case _GET: {      var = new Var();      ArrayValue array = new ArrayValueImpl();      var.set(array);      _globalMap.put(name, var);      String queryString = _request.getQueryString();      if (queryString == null)        return var;      StringUtility.parseStr(this,                             queryString,                             array,                             true,                             getHttpInputEncoding());            return var;    }          case _REQUEST: {      var = new Var();            ArrayValue array = new ArrayValueImpl();      var.set(array);      _globalMap.put(name, var);      if (_request == null)        return var;            try {        String encoding = getHttpInputEncoding();                if (encoding == null)          encoding = "iso-8859-1";                _request.setCharacterEncoding(encoding);      } catch (Exception e) {        log.log(Level.FINE, e.toString(), e);      }	        ArrayList<String> keys = new ArrayList<String>();      keys.addAll(_request.getParameterMap().keySet());      Collections.sort(keys);      boolean isMagicQuotes = getIniBoolean("magic_quotes_gpc");            for (String key : keys) {        String []value = _request.getParameterValues(key);        Post.addFormValue(this,                          array,                          key,                          value,                          isMagicQuotes);      }      if (name.equals("_REQUEST") && _postArray != null) {                for (Map.Entry<Value, Value> entry : _postArray.entrySet()) {          Value key = entry.getKey();          Value value = entry.getValue();                    Value existingValue = array.get(key);                    if (existingValue.isArray() && value.isArray())           existingValue.toArrayValue(this).putAll(value.toArrayValue(this));          else            array.put(entry.getKey(), entry.getValue().copy());        }      }      Cookie []cookies = _request.getCookies();      for (int i = 0; cookies != null && i < cookies.length; i++) {           Cookie cookie = cookies[i];        String decodedValue = decodeValue(cookie.getValue());        Post.addFormValue(this,                          array,                          cookie.getName(),                          new String[] { decodedValue },                          isMagicQuotes);      }            return var;    }    case HTTP_RAW_POST_DATA: {      if (! Quercus.INI_ALWAYS_POPULATE_RAW_POST_DATA.getAsBoolean(this))        return null;            if (_inputData == null)        return null;            var = new Var();            _globalMap.put(name, var);            var.set(_inputData);            return var;    }        case HTTP_SERVER_VARS:      if (! Quercus.INI_REGISTER_LONG_ARRAYS.getAsBoolean(this))	return null;    case _SERVER: {      var = new Var();      _globalMap.put(name, var);      var.set(new ServerArrayValue(this));      return var;    }    case _GLOBAL: {      var = new Var();      _globalMap.put(name, var);      var.set(new GlobalArrayValue(this));      return var;    }    case HTTP_COOKIE_VARS:      if (! Quercus.INI_REGISTER_LONG_ARRAYS.getAsBoolean(this))	return null;    case _COOKIE: {      var = new Var();      _globalMap.put(name, var);      if (_request == null)        return var;            ArrayValue array = new ArrayValueImpl();      Cookie []cookies = _request.getCookies();      if (cookies != null) {        for (int i = 0; i < cookies.length; i++) {          Cookie cookie = cookies[i];          String value = decodeValue(cookie.getValue());          StringValue valueAsValue = createString(value);          if (getIniBoolean("magic_quotes_gpc")) // php/0876            valueAsValue = StringModule.addslashes(valueAsValue);          array.append(createString(cookie.getName()), valueAsValue);        }      }      var.set(array);      return var;    }    case PHP_SELF: {      var = new Var();      _globalMap.put(name, var);      var.set(getGlobalVar("_SERVER").get(PHP_SELF_STRING));      return var;    }    default: {      if (_scriptContext != null) {        Object value = _scriptContext.getAttribute(name);        if (value == null) {          Bindings bindings          = _scriptContext.getBindings(ScriptContext.ENGINE_SCOPE);          if (bindings != null)            value = bindings.get(name);        }        if (value == null) {          Bindings bindings          = _scriptContext.getBindings(ScriptContext.GLOBAL_SCOPE);          if (bindings != null)            value = bindings.get(name);        }        if (value != null) {          var = new Var();          _globalMap.put(name, var);          var.set(wrapJava(value));          return var;        }      }    }    } // end switch    return var;  }  private static String decodeValue(String s)  {    int len = s.length();    StringBuilder sb = new StringBuilder();    for (int i = 0; i < len; i++) {      char ch = s.charAt(i);      if (ch == '%' && i + 2 < len) {        int d1 = s.charAt(i + 1);        int d2 = s.charAt(i + 2);        int v = 0;        if ('0' <= d1 && d1 <= '9')          v = 16 * (d1 - '0');        else if ('a' <= d1 && d1 <= 'f')          v = 16 * (d1 - 'a' + 10);        else if ('A' <= d1 && d1 <= 'F')          v = 16 * (d1 - 'A' + 10);        else {          sb.append('%');          continue;        }        if ('0' <= d2 && d2 <= '9')          v += (d2 - '0');        else if ('a' <= d2 && d2 <= 'f')          v += (d2 - 'a' + 10);        else if ('A' <= d2 && d2 <= 'F')          v += (d2 - 'A' + 10);        else {          sb.append('%');          continue;        }        i += 2;        sb.append((char) v);      }      else if (ch == '+')        sb.append(' ');      else        sb.append(ch);    }    return sb.toString();  }  /**   * Gets a value.   */  public Var getVar(String name)  {    Var var = _map.get(name);    if (var != null)      return var;        var = getRef(name);    if (var == null) {      var = new Var();      if (_map == _globalMap) {        // php/379c        var.setGlobal();      }      _map.put(name, var);    }    return var;  }  /**   * Gets a value.   */  public Var getGlobalVar(String name)  {    Var var = getGlobalRef(name);    if (var == null) {      var = new Var();      var.setGlobal();      _globalMap.put(name, var);    }    return var;  }  public boolean isGlobalEnv()  {    return _map == _globalMap;  }  /**   * Sets a value.   */  public Value setValue(String name, Value value)  {    if (value instanceof Var)      _map.put(name, (Var) value);    else {      Var var = getVar(name);      var.set(value);    }    return value;  }  /**   * Sets a special value, a special value is used to store and retrieve module   * specific values in the env using a unique name.   */  public Object setSpecialValue(String name, Object value)  {    _specialMap.put(name, value);    return value;  }  /**   * Sets a value.   */  public Value setGlobalValue(String name, Value value)  {    if (value instanceof Var)      _globalMap.put(name, (Var) value);    else {      Var var = getGlobalVar(name);      var.set(value);    }    return value;  }  /**   * Gets a static class field.   *   * @param className of the owning class    * @param name of the variable   */  public Value getStaticClassFieldValue(String className, String name)  {    Var var = getStaticClassFieldVar(className, name);        if (var != null) {      Value val = var.toValue();              return val;    }    else      return NullValue.NULL;  }  /**   * Gets a static field from a class.   *   * @param className of the owning class    * @param name of the variable   */  public final Var getStaticClassFieldVar(String className, String name)  {    QuercusClass cl = findAbstractClass(className);        Var var = cl.getStaticField(this, name);        if (var == null) {      error(L.l("{0}::${1} is an undeclared static property", className, name));    }    return var;  }  /**   * Sets the calling function expression.   */  public void pushCall(Expr call, Value obj)  {    if (_callStack.length <= _callStackTop) {      Expr []newStack = new Expr[2 * _callStack.length];      System.arraycopy(_callStack, 0, newStack, 0, _callStack.length);      _callStack = newStack;            Value []newThisStack = new Value[2 * _callThisStack.length];      System.arraycopy(_callThisStack,		       0, newThisStack,		       0, _callThisStack.length);      _callThisStack = newThisStack;    }    _callStack[_callStackTop] = call;    _callThisStack[_callStackTop] = obj;    _callStackTop++;  }  /**   * Pops the top call.   */  public Expr popCall()  {    return _callStack[--_callStackTop];  }  /**   * Returns the stack depth.   */  public int getCallDepth()  {    return _callStackTop;  }    /**   * Peeks at the the top call.   */  public Expr peekCall(int depth)  {    if (_callStackTop - depth > 0)      return _callStack[_callStackTop - depth - 1];    else      return null;  }    /**   * Peeks at the "this" top call.   */  public Value peekCallThis(int depth)  {    if (_callStackTop - depth > 0)      return _callThisStack[_callStackTop - depth - 1];    else      return null;  }    /*   * Returns the name of calling class.   */  public String getCallingClassName()  {    return _callingClass;  }    /*   * Returns the calling class.   */  public QuercusClass getCallingClass()  {    return findClass(_callingClass);  }    /*   * Sets the calling class.   */  public String setCallingClassName(String name)  {    String oldCallingClass = _callingClass;        _callingClass = name;        return oldCallingClass;  }  public ArrayList<String> getStackTrace()  {    ArrayList<String> trace = new ArrayList<String>();    for (int i = _callStackTop - 1; i >= 0; i--) {      String entry;      Location location = _callStack[i].getLocation();      String loc;      if (location != null && location.getFileName() != null) {	loc = (" (at " + location.getFileName()	       + ":" + location.getLineNumber() + ")");      }      else	loc = "";            if (_callThisStack[i] != null	  && ! "".equals(_callThisStack[i].toString())) {	entry = _callThisStack[i] + "." + _callStack[i].toString() + loc;      }      else	entry = _callStack[i].toString() + loc;      trace.add(entry);    }    return trace;  }  /**   * Pushes a new environment.   */  public HashMap<String, Var> pushEnv(HashMap<String, Var> map)  {    HashMap<String, Var> oldEnv = _map;    _map = map;    return oldEnv;  }  /**   * Restores the old environment.   */  public void popEnv(HashMap<String, Var> oldEnv)  {    _map = oldEnv;  }  /**   * Returns the current environment.   */  public HashMap<String, Var> getEnv()  {    return _map;  }  /**   * Returns the current environment.   */  public HashMap<String, Var> getGlobalEnv()  {    return _globalMap;  }  /**   * Pushes a new environment.   */  public final Value []setFunctionArgs(Value []args)  {    Value []oldArgs = _functionArgs;    Value []newArgs = new Value[args.length];    for (int i = 0; args != null && i < args.length; i++) {      // php/3715, 3768      newArgs[i] = args[i].toValue().toArgValue();    }    _functionArgs = newArgs;    return oldArgs;  }  /**   * Pushes a new environment.

⌨️ 快捷键说明

复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?