title: PHP/Java bridge problem
body: <p>I am using tomcat 6 on windows. Here is the code I am testing. </p>
  
  <p></p>
  
  <pre><code>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("&lt;?php\n" +
              "function run() {\n" +
              " $out = java_context()-&gt;getAttribute('sharedResource', 100);\n" +
              " $nr = (string)java_context()-&gt;getAttribute('nr', 100);\n" +
              " echo \"started thread: $nr\n\";\n" +
              " for($i=0; $i&lt;100; $i++) {\n" +
              "  $out-&gt;write(ord($nr));\n" +
              "  java('java.lang.Thread')-&gt;sleep(1);\n" +
              " }\n" +
              "}\n" +
              "?&gt;\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&lt;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&lt;THREAD_COUNT; i++) {
          threads[i].start();
      }
  
      // wait for the THREAD_COUNT PHP threads to finish
      for (int i=0; i&lt;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(
          "&lt;?php " +
          "exit((int)('10011002100310041005'!=" +
          "@system(\"echo -n "+result+"|sed 's/./&amp;\\\n/g'|sort|uniq -c|tr -d ' \\\n'\")));" +
          "?&gt;");
  
      System.exit(((Number)res).intValue());
      }
  }
  </code></pre>
  
  <p>I have added all the libraries. When I run the file I get the following error - </p>
  
  <pre><code>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.&lt;init&gt;(ProcessImpl.java:81)
          at java.lang.ProcessImpl.start(ProcessImpl.java:30)
          at java.lang.ProcessBuilder.start(ProcessBuilder.java:452)
          ... 8 more
  </code></pre>
  
  <p>What am I missing?     </p>