当前位置: 首页 > 面试题库 >

PHP / Java桥问题

侯善
2023-03-14
问题内容

我在Windows上使用tomcat 6。这是我正在测试的代码。

import java.io.ByteArrayOutputStream;
import java.io.Closeable;
import java.io.StringReader;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;


/**
* Create and run THREAD_COUNT PHP threads, concurrently accessing a
* shared resource.
*
* Create 5 script engines, passing each a shared resource allocated
* from Java. Each script engine has to implement Runnable.
*
* Java accesses the Runnable script engine using
* scriptEngine.getInterface() and calls thread.start() to invoke each
* PHP Runnable implementations concurrently.
*/
class PhpThreads {

    public static final String runnable = new String("<?php\n" +
            "function run() {\n" +
            " $out = java_context()->getAttribute('sharedResource', 100);\n" +
            " $nr = (string)java_context()->getAttribute('nr', 100);\n" +
            " echo \"started thread: $nr\n\";\n" +
            " for($i=0; $i<100; $i++) {\n" +
            "  $out->write(ord($nr));\n" +
            "  java('java.lang.Thread')->sleep(1);\n" +
            " }\n" +
            "}\n" +
            "?>\n");


                static final int THREAD_COUNT = 5;
    public static void main(String[] args) throws Exception {
    ScriptEngineManager manager = new ScriptEngineManager();
    Thread threads[] = new Thread[THREAD_COUNT];
    ScriptEngine engines[] = new ScriptEngine[THREAD_COUNT];
    ByteArrayOutputStream sharedResource = new ByteArrayOutputStream();
    StringReader runnableReader = new StringReader(runnable);

    // create THREAD_COUNT PHP threads
    for (int i=0; i<THREAD_COUNT; i++) {
        engines[i] = manager.getEngineByName("php-invocable");
        if (engines[i] == null)
        throw new NullPointerException ("php script engine not found");

        engines[i].put("nr", new Integer(i+1));
        engines[i].put("sharedResource", sharedResource);

        engines[i].eval(runnableReader);
        runnableReader.reset();

        // cast the whole script to Runnable; note also getInterface(specificClosure, type)
        Runnable r = (Runnable) ((Invocable)engines[i]).getInterface(Runnable.class);
        threads[i] = new Thread(r);
    }

    // run the THREAD_COUNT PHP threads
    for (int i=0; i<THREAD_COUNT; i++) {
        threads[i].start();
    }

    // wait for the THREAD_COUNT PHP threads to finish
    for (int i=0; i<THREAD_COUNT; i++) {
        threads[i].join();
        ((Closeable)engines[i]).close();
    }

    // print the output generated by the THREAD_COUNT concurrent threads
    String result = sharedResource.toString();
    System.out.println(result);

    // Check result
    Object res=manager.getEngineByName("php").eval(
        "<?php " +
        "exit((int)('10011002100310041005'!=" +
        "@system(\"echo -n "+result+"|sed 's/./&\\\n/g'|sort|uniq -c|tr -d ' \\\n'\")));" +
        "?>");

    System.exit(((Number)res).intValue());
    }
}

我添加了所有库。运行文件时,出现以下错误-

run:
Exception in thread "main" javax.script.ScriptException: java.io.IOException: Cannot run program "php-cgi": CreateProcess error=2, The system cannot find the file specified
        at php.java.script.InvocablePhpScriptEngine.eval(InvocablePhpScriptEngine.java:209)
        at php.java.script.SimplePhpScriptEngine.eval(SimplePhpScriptEngine.java:178)
        at javax.script.AbstractScriptEngine.eval(AbstractScriptEngine.java:232)
        at PhpThreads.main(NewClass.java:53)
Caused by: java.io.IOException: Cannot run program "php-cgi": CreateProcess error=2, The system cannot find the file specified
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:459)
        at java.lang.Runtime.exec(Runtime.java:593)
        at php.java.bridge.Util$Process.start(Util.java:1064)
        at php.java.bridge.Util$ProcessWithErrorHandler.start(Util.java:1166)
        at php.java.bridge.Util$ProcessWithErrorHandler.start(Util.java:1217)
        at php.java.script.CGIRunner.doRun(CGIRunner.java:126)
        at php.java.script.HttpProxy.doRun(HttpProxy.java:63)
        at php.java.script.CGIRunner.run(CGIRunner.java:111)
        at php.java.bridge.ThreadPool$Delegate.run(ThreadPool.java:60)
Caused by: java.io.IOException: CreateProcess error=2, The system cannot find the file specified
        at java.lang.ProcessImpl.create(Native Method)
        at java.lang.ProcessImpl.<init>(ProcessImpl.java:81)
        at java.lang.ProcessImpl.start(ProcessImpl.java:30)
        at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
        ... 8 more

我想念什么?


问题答案:

只需将其添加到您的命令行中:

-Dphp.java.bridge.php_exec = / usr / bin / php

问题解决了!



 类似资料:
  • 我需要在php上运行一些java代码,所以我找到了这个 所以我下载了tomcat并放置了JavaBridge。我在webapps目录中找到了war,并让这些例子发挥了作用(我花了一段时间才弄明白这一点) 我甚至可以加载内置的java东西,并用我自己的PHP代码运行示例JAR。 我做不到的是制作自己的jar并运行它。我尝试了各种不同的编译器(Eclipse、Netbeans、命令行),但都没有用。

  • null 对于谷歌来说,我们已经发现控制流与Azure和AWS相比是不同的。 对于Google来说,在等待接收消息之前,我们需要每次订阅和取消订阅给定的主题,而对于AWS和Azure来说,我们需要在打开MQTT连接时订阅一次。 问题: 有时5秒的设备超时发生,因为它无法从谷歌MQTT桥接收订阅主题的消息。添加多次重试来克服超时问题是不成功的,因为问题仍然存在,因为设备在开机后的设备操作45-60秒

  • 鼎桥 Java开发 技术面(9 / 03) 项目相关 Zookeeper的原理有了解吗?为什么要用Zookeeper做服务注册 Http和Https的区别,证书有什么用? Http的传输协议是什么? UDP和TCP的区别是什么? MySQL 插入一条数据,会直接更新到磁盘中吗?(change pool) MySQL宕机了怎么保证事务?(redo log) TCP的keep-live是什么? 索引失

  • 鼎桥通信java一面,20分钟,不难但是好几个问题都没有答上来,凉了。 1,常用的设计模式?工厂模式常用的方法。 2,linux命令,查看运行当前进程,查看磁盘空间。 3,为什么用redis,不用其他的缓存。 4,有没有自己写过csdn 5,接口与抽象类 6,重写与重载 7,项目中遇到的难题,如何解决 8,除了MD5加密算法,还知道什么加密算法? 9,平时怎么调试程序 10,问了一些校园经历 11

  • 问题内容: 我已经按照本教程http://www.dsl.uow.edu.au/~sk33/php5java.htm进行了操作,但最后还是尝试了 我有这个例外 PHP致命错误:未捕获[o(Exception):“ java.lang.Exception:CreateInstance失败:new HelloWorld。原因:java.lang.ClassNotFoundException:在java

  • 问题内容: 我必须创建一个可自动执行Outlook和Word的应用程序,并且想使用Java来完成该任务。(唯一允许的替代方法是VB6,所以…) 经过Google的快速调查后,我发现了几个库,但不确定使用哪个库: J-Interop SWT 雅各布 COM4J jacoZoom … 我不知道如何比较这些库并做出明智的决定。看来COM4J有点过时了,JACOB泄漏了内存(据说),而jacoZoom是商