Example #1
0
        public void execute(ReadStream stream)

        {
            QuercusPage page = parse(stream);

            WriteStream os = new WriteStream(StdoutStream.create());

            os.setNewlineString("\n");
            os.setEncoding("iso-8859-1");

            Env env = createEnv(page, os, null, null);

            env.start();

            try {
                env.execute();
            } catch (QuercusDieException e) {
                log.log(Level.FINER, e.ToString(), e);
            } catch (QuercusExitException e) {
                log.log(Level.FINER, e.ToString(), e);
            } catch (QuercusErrorException e) {
                log.log(Level.FINER, e.ToString(), e);
            } finally {
                env.close();

                os.flush();
            }
        }
        public override void execute()

        {
            string path = getPwd().lookup(getFileName());

            QuercusPage page = parse(path);

            WriteStream os = new WriteStream(StdoutStream.create());

            os.setNewlineString("\n");
            os.setEncoding("iso-8859-1");

            Env env = createEnv(page, os, null, null);

            env.start();

            try {
                env.execute();
            } catch (QuercusDieException e) {
            } catch (QuercusExitException e) {
            }

            env.close();

            os.flush();
        }
Example #3
0
 public override QuercusDotNet.Env.Env createEnv(QuercusPage page,
                                                 WriteStream @out,
                                                 QuercusHttpServletRequest request,
                                                 QuercusHttpServletResponse response)
 {
     return(new CliEnv(this, page, @out, getArgv()));
 }
 public override Env createEnv(QuercusPage page,
                               WriteStream @out,
                               QuercusHttpServletRequest request,
                               QuercusHttpServletResponse response)
 {
     return(new CgiEnv(this, page, @out, request, response));
 }
 public GoogleEnv(QuercusContext quercus,
                  QuercusPage page,
                  WriteStream @out,
                  QuercusHttpServletRequest request,
                  QuercusHttpServletResponse response)
 {
     super(quercus, page, @out, request, response);
 }
        public CliEnv(QuercusContext quercus,
                      QuercusPage page,
                      WriteStream @out,
                      String[] argv)
        {
            super(quercus, page, @out, null, null);

            _argv = argv;
        }
Example #7
0
        /**
         * Creates a new quercus program
         *
         * @param quercus the owning quercus engine
         * @param sourceFile the path to the source file
         * @param statement the top-level statement
         */
        public QuercusProgram(QuercusContext quercus,
                              string sourceFile,
                              QuercusPage page)
        {
            _quercus      = quercus;
            _sourceFile   = sourceFile;
            _compiledPage = page;

            _depend = new BasicDependencyContainer();

            _topDepend = new BasicDependencyContainer();
            _topDepend.setCheckInterval(quercus.getDependencyCheckInterval());
            _topDepend.add(new PageDependency());
        }
Example #8
0
        /**
         * Evaluates the callback with 1 arguments.
         *
         * @param env the calling environment
         */
        public QuercusClass loadClass(Env env, string name)
        {
            ClassLoader loader = Thread.currentThread().getContextClassLoader();
            URL         url    = loader.getResource(_prefix + name + ".php");

            if (url == null)
            {
                return(null);
            }

            string urlStr = url.ToString();

            // for JBoss, #5606
            // XXX: use this for resin and no-resin?
            if (!env.getQuercus().isResin() && urlStr.startsWith("vfs:"))
            {
                try {
                    InputStream @is = url.openStream();

                    try {
                        ReadStream rs = new ReadStream(new VfsStream(@is, null));

                        QuercusPage page = env.getQuercus().parse(rs);

                        page.execute(env);
                    }
                    finally {
                        try {
                            @is.close();
                        }
                        catch (Exception e) {
                        }
                    }
                }
                catch (Exception e) {
                    throw new QuercusException(e);
                }
            }
            else
            {
                string path = env.getPwd().lookup(urlStr);

                env.executePage(path);
            }

            return(env.findClass(name, -1, false, false, false));
        }
Example #9
0
        public bool equals(Object o)
        {
            if (!(o instanceof DefinitionKey))
            {
                return(false);
            }

            DefinitionKey key = (DefinitionKey)o;

            QuercusPage page    = _includePageRef.get();
            QuercusPage keyPage = key._includePageRef.get();

            if (page == null || keyPage == null)
            {
                return(false);
            }

            return(_crc == key._crc && page.equals(keyPage));
        }
        /**
         * Service.
         */
        public override void service(HttpServletRequest request,
                                     HttpServletResponse response)

        {
            Env         env = null;
            WriteStream ws  = null;

            QuercusHttpServletRequest  req = new QuercusHttpServletRequestImpl(request);
            QuercusHttpServletResponse res = new QuercusHttpServletResponseImpl(response);

            try {
                string path = getPath(req);

                QuercusPage page;

                try {
                    page = getQuercus().parse(path);
                }
                catch (FileNotFoundException e) {
                    // php/2001
                    log.log(Level.FINER, e.ToString(), e);

                    response.sendError(HttpServletResponse.SC_NOT_FOUND);

                    return;
                }

                ws = openWrite(response);

                // php/2002
                // for non-Resin containers
                // for servlet filters that do post-request work after Quercus
                ws.setDisableCloseSource(true);

                // php/6006
                ws.setNewlineString("\n");

                QuercusContext quercus = getQuercus();

                env = quercus.createEnv(page, ws, req, res);

                // php/815d
                env.setPwd(path.getParent());

                quercus.setServletContext(new QuercusServletContextImpl(_servletContext));

                try {
                    env.start();

                    // php/2030, php/2032, php/2033
                    // Jetty hides server classes from web-app
                    // http://docs.codehaus.org/display/JETTY/Classloading
                    //
                    // env.setGlobalValue("request", env.wrapJava(request));
                    // env.setGlobalValue("response", env.wrapJava(response));
                    // env.setGlobalValue("servletContext", env.wrapJava(_servletContext));

                    StringValue prepend
                        = quercus.getIniValue("auto_prepend_file").ToStringValue(env);
                    if (prepend.length() > 0)
                    {
                        string prependPath = env.lookup(prepend);

                        if (prependPath == null)
                        {
                            env.error(L.l("auto_prepend_file '{0}' not found.", prepend));
                        }
                        else
                        {
                            QuercusPage prependPage = getQuercus().parse(prependPath);
                            prependPage.executeTop(env);
                        }
                    }

                    env.executeTop();

                    StringValue append
                        = quercus.getIniValue("auto_append_file").ToStringValue(env);
                    if (append.length() > 0)
                    {
                        string appendPath = env.lookup(append);

                        if (appendPath == null)
                        {
                            env.error(L.l("auto_append_file '{0}' not found.", append));
                        }
                        else
                        {
                            QuercusPage appendPage = getQuercus().parse(appendPath);
                            appendPage.executeTop(env);
                        }
                    }
                    //   return;
                }
                catch (QuercusExitException e) {
                    throw e;
                }
                catch (QuercusErrorException e) {
                    throw e;
                }
                catch (QuercusLineRuntimeException e) {
                    log.log(Level.FINE, e.ToString(), e);

                    ws.println(e.getMessage());
                    //  return;
                }
                catch (QuercusValueException e) {
                    log.log(Level.FINE, e.ToString(), e);

                    ws.println(e.ToString());

                    //  return;
                }
                catch (StackOverflowError e) {
                    RuntimeException myException
                        = new RuntimeException(L.l("StackOverflowError at {0}", env.getLocation()), e);

                    throw myException;
                }
                catch (Throwable e) {
                    if (response.isCommitted())
                    {
                        e.printStackTrace(ws.getPrintWriter());
                    }

                    ws = null;

                    throw e;
                }
                finally {
                    if (env != null)
                    {
                        env.close();
                    }

                    // don't want a flush for an exception
                    if (ws != null && env.getDuplex() == null)
                    {
                        ws.close();
                    }
                }
            }
            catch (QuercusDieException e) {
                // normal exit
                log.log(Level.FINE, e.ToString(), e);
            }
            catch (QuercusExitException e) {
                // normal exit
                log.log(Level.FINER, e.ToString(), e);
            }
            catch (QuercusErrorException e) {
                // error exit
                log.log(Level.FINE, e.ToString(), e);
            }
            catch (RuntimeException e) {
                throw e;
            }
            catch (Throwable e) {
                handleThrowable(response, e);
            }
        }
Example #11
0
 /**
  * Sets the profiling page.
  */
 public void setProfilePage(QuercusPage page)
 {
     _profilePage = page;
 }
Example #12
0
 /**
  * Sets the compiled page.
  */
 public void setCompiledPage(QuercusPage page)
 {
     _compiledPage = page;
 }
Example #13
0
        public string ToString()
        {
            QuercusPage page = _includePageRef.get();

            return("DefinitionKey[" + _crc + ", " + page + "]");
        }
Example #14
0
 DefinitionKey(long crc, QuercusPage includePage)
 {
     _crc            = crc;
     _includePageRef = new WeakReference <QuercusPage>(includePage);
 }