1

i have problem when i use php java bridge i got error like this

Warning: require_once(http://localhost:8080/JavaBridge/java/Java.inc): failed to open stream: HTTP request failed! in /Library/WebServer/Documents/test2.php on line 3

Fatal error: require_once(): Failed opening required 'http://localhost:8080/JavaBridge/java/Java.inc' (include_path='.:') in /Library/WebServer/Documents/test2.php on line 3

my tomcat has running at port 8080. i use force to use port 8080 but i still got error

here my standalone class for java bridge

package php.java.bridge;

import php.java.bridge.util.Thread;
import java.lang.reflect.Method;
import php.java.bridge.http.JavaBridgeRunner;
import php.java.bridge.util.Logger;
import java.io.File;
import javax.swing.Icon;
import java.awt.Component;
import javax.swing.JOptionPane;
import java.net.ServerSocket;
import java.io.IOException;
import php.java.bridge.http.TCPServerSocket;
import php.java.bridge.http.ISocketFactory;

public class Standalone
{
    public static final int HTTP_PORT_BASE = 8080;
    public static final int HTTPS_PORT_BASE = 8443;
    
    public static ISocketFactory bind(final int logLevel, final String sockname) throws IOException {
        ISocketFactory socket = null;
        socket = TCPServerSocket.create(sockname, 20);
        if (null == socket) {
            throw new IOException("Could not create socket: " + sockname);
        }
        return socket;
    }
    
    protected static void disclaimer() {
        System.err.println("Copyright (C) 2003, 2006 Jost Boekemeier and others.");
        System.err.println("This is free software; see the source for copying conditions.  There is NO");
        System.err.println("warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.");
    }
    
    protected void javaUsage() {
        System.err.println("PHP/Java Bridge version " + Util.VERSION);
        disclaimer();
        System.err.println("Usage: java -jar JavaBridge.jar [SOCKETNAME LOGLEVEL LOGFILE]");
        System.err.println("SOCKETNAME is one of INET_LOCAL, INET, HTTP_LOCAL, HTTP, HTTPS_LOCAL, HTTPS");
        System.err.println("");
        System.err.println("Example 1: java -jar JavaBridge.jar");
        System.err.println("Example 2: java -jar JavaBridge.jar HTTP_LOCAL:8080 3 JavaBridge.log");
        System.err.println("Example 3: java -Djavax.net.ssl.keyStore=mySrvKeystore -Djavax.net.ssl.keyStorePassword=YOURPASSWD -jar JavaBridge.jar HTTPS:8443 3 JavaBridge.log");
        System.err.println("The certificate for example 3 can be created with e.g.: jdk1.6.0/bin/keytool -keystore mySrvKeystore -genkey -keyalg RSA");
        System.err.println("");
        System.err.println("Influential system properties: threads, daemon, php_exec, default_log_file, default_log_level, base.");
        System.err.println("Example: java -Djava.awt.headless=\"true\" -Dphp.java.bridge.threads=50 -Dphp.java.bridge.base=/usr/lib/php/modules -Dphp.java.bridge.php_exec=/usr/local/bin/php-cgi -Dphp.java.bridge.default_log_file= -Dphp.java.bridge.default_log_level=5 -jar JavaBridge.jar");
        System.err.println("Example: java -Dphp.java.bridge.daemon=\"true\" -jar JavaBridge.jar");
    }
    
    protected void usage() {
        this.javaUsage();
        System.exit(1);
    }
    
    protected void checkOption(final String[] s) {
        if ("--version".equals(s[0])) {
            System.out.println(Util.VERSION);
            System.exit(0);
        }
        this.usage();
    }
    
    private static boolean testPort(final int port) {
        try {
            final ServerSocket sock = new ServerSocket(port);
            sock.close();
            return true;
        }
        catch (IOException ex) {
            return false;
        }
    }
    
    private static int findFreePort(final int start) {
        for (int port = start; port < start + 100; ++port) {
            if (testPort(port)) {
                return port;
            }
        }
        return start;
    }
    
    public void init(final String[] s) {
        String sockname = null;
        int logLevel = -1;
       // final String tcpSocketName = "9267";
        final String tcpSocketName = "8080";
        if (s.length > 3) {
            this.checkOption(s);
        }
        try {
            if (s.length > 0) {
                sockname = s[0];
                if (sockname.startsWith("-")) {
                    this.checkOption(s);
                }
            }
            try {
                if (s.length > 1) {
                    logLevel = Integer.parseInt(s[1]);
                }
            }
            catch (NumberFormatException e2) {
                this.usage();
            }
            catch (Throwable t) {
                t.printStackTrace();
            }
            if (s.length == 0) {
                try {
                 /*   final int tcpSocket = Integer.parseInt(tcpSocketName);
                    final int freeJavaPort = findFreePort(tcpSocket);
                    final int freeHttpPort = findFreePort(8080);
                    final int freeHttpsPort = findFreePort(8443);
                    final Object result = JOptionPane.showInputDialog(null, "Start a socket listener on port", "Starting the PHP/Java Bridge ...", 3, null, new String[] { "INET_LOCAL:" + freeJavaPort, "INET:" + freeJavaPort, "HTTP_LOCAL:" + freeHttpPort, "HTTP:" + freeHttpPort, "HTTPS_LOCAL:" + freeHttpsPort, "HTTPS:" + freeHttpsPort }, "HTTP_LOCAL:" + freeHttpPort);
                        //final Object result = 8080;
                    if (result == null) {
                        System.exit(0);
                    }*/
                    //sockname = result.toString();
                    sockname = "8080";
                }
                catch (Throwable t2) {}
            }
            if (s.length == 0) {
                TCPServerSocket.TCP_PORT_BASE = Integer.parseInt(tcpSocketName);
            }
            if (checkServlet(logLevel, sockname, s)) {
                return;
            }
            final ISocketFactory socket = bind(logLevel, sockname);
            if ("true".equals(System.getProperty("php.java.bridge.test.startup"))) {
                System.exit(0);
            }
            JavaBridge.initLog(String.valueOf(socket), logLevel, s);
            JavaBridge.init(socket, logLevel, s);
        }
        catch (Exception e) {
            throw new RuntimeException(e);
        }
    }
    
    public static File getCanonicalWindowsFile(final String path) {
        try {
            return new File(path).getCanonicalFile();
        }
        catch (IOException e) {
            return new File(path);
        }
    }
    
    private static boolean checkServlet(final int logLevel, String sockname, final String[] s) throws InterruptedException, IOException {
        if (sockname == null) {
            return false;
        }
        if (sockname.startsWith("SERVLET_LOCAL:") || sockname.startsWith("HTTP_LOCAL:") || sockname.startsWith("HTTPS_LOCAL:")) {
            Util.JAVABRIDGE_PROMISCUOUS = false;
            System.setProperty("php.java.bridge.promiscuous", "false");
        }
        else {
            if (!sockname.startsWith("SERVLET:") && !sockname.startsWith("HTTP:") && !sockname.startsWith("HTTPS:")) {
                return false;
            }
            Util.JAVABRIDGE_PROMISCUOUS = true;
            System.setProperty("php.java.bridge.promiscuous", "true");
        }
        final boolean isSecure = sockname.startsWith("HTTPS");
        JavaBridge.initLog(sockname, logLevel, s);
        sockname = sockname.substring(sockname.indexOf(58) + 1);
        final String serverPort = (Util.JAVABRIDGE_PROMISCUOUS ? "INET:" : "INET_LOCAL:") + sockname;
        Logger.logMessage("JavaBridgeRunner started on port " + serverPort);
        Class runner = JavaBridgeRunner.class;
        JavaBridgeRunner r;
        try {
            runner = Util.classForName("php.java.script.JavaBridgeScriptRunner");
            final Method m = runner.getMethod("getRequiredInstance", String.class, Boolean.TYPE);
            r = (JavaBridgeRunner)m.invoke(runner, serverPort, new Boolean(isSecure));
        }
        catch (Throwable e) {
            r = JavaBridgeRunner.getRequiredInstance(serverPort, isSecure);
        }
        r.waitFor();
        r.destroy();
        return true;
    }
    
    private static final boolean checkGNUVM() {
        try {
            return "libgcj".equals(System.getProperty("gnu.classpath.vm.shortname"));
        }
        catch (Throwable t) {
            return false;
        }
    }
    
    public static void main(final String[] s) {
        if (!System.getProperty("php.java.bridge.daemon", "false").equals("false")) {
            final String[] args = new String[s.length + 8];
            args[0] = System.getProperty("php.java.bridge.daemon");
            if ("true".equals(args[0])) {
                args[0] = "java";
            }
            args[1] = "-Djava.library.path=" + System.getProperty("java.library.path", ".");
            args[2] = "-Djava.ext.dirs=" + System.getProperty("java.ext.dirs", ".");
            args[3] = "-Djava.awt.headless=" + System.getProperty("java.awt.headless", "true");
            args[4] = "-Dphp.java.bridge.asDaemon=true";
            args[5] = "-classpath";
            args[6] = System.getProperty("java.class.path", ".");
            args[7] = "php.java.bridge.Standalone";
            for (int j = 0; j < s.length; ++j) {
                args[j + 8] = s[j];
            }
            try {
                System.in.close();
                System.out.close();
                System.err.close();
            }
            catch (IOException e) {
                System.exit(12);
            }
            new Thread(new Runnable() {
                @Override
                public void run() {
                    try {
                        Runtime.getRuntime().exec(args);
                    }
                    catch (IOException e) {
                        System.exit(13);
                    }
                }
            }).start();
            try {
                java.lang.Thread.sleep(20000L);
            }
            catch (Throwable t2) {}
            System.exit(0);
        }
        try {
            System.loadLibrary("natcJavaBridge");
        }
        catch (Throwable t3) {}
        try {
            final String cp = System.getProperty("java.class.path", ".");
            File jbFile = null;
            final boolean isExecutableJavaBridgeJar = cp.indexOf(File.pathSeparatorChar) == -1 && cp.endsWith("JavaBridge.jar") && (jbFile = new File(cp)).isAbsolute();
            final File wd = getCanonicalWindowsFile(isExecutableJavaBridgeJar ? jbFile.getParent() : "");
            final boolean sunJavaInstalled = new File("/usr/java/default/bin/java").exists();
            final String javaExec = sunJavaInstalled ? "/usr/java/default/bin/java" : "java";
            if (s.length == 0 && System.getProperty("php.java.bridge.exec_sun_vm", "true").equals("true") && ((sunJavaInstalled && checkGNUVM()) || isExecutableJavaBridgeJar)) {
                final Process p = Runtime.getRuntime().exec(new String[] { javaExec, "-Dphp.java.bridge.exec_sun_vm=false", "-classpath", cp, "php.java.bridge.Standalone" }, null, wd);
                if (p != null) {
                    System.exit(p.waitFor());
                }
            }
        }
        catch (Throwable t4) {}
        try {
            new Standalone().init(s);
        }
        catch (Throwable t) {
            t.printStackTrace();
            System.exit(9);
        }
    }
}

in this source code i force manual choice 8080 using this code

/*   final int tcpSocket = Integer.parseInt(tcpSocketName);
                    final int freeJavaPort = findFreePort(tcpSocket);
                    final int freeHttpPort = findFreePort(8080);
                    final int freeHttpsPort = findFreePort(8443);
                    final Object result = JOptionPane.showInputDialog(null, "Start a socket listener on port", "Starting the PHP/Java Bridge ...", 3, null, new String[] { "INET_LOCAL:" + freeJavaPort, "INET:" + freeJavaPort, "HTTP_LOCAL:" + freeHttpPort, "HTTP:" + freeHttpPort, "HTTPS_LOCAL:" + freeHttpsPort, "HTTPS:" + freeHttpsPort }, "HTTP_LOCAL:" + freeHttpPort);
                        //final Object result = 8080;
                    if (result == null) {
                        System.exit(0);
                    }*/
                    //sockname = result.toString();
                    sockname = "8080";
                }

and at tcpServer i force to choice that port use this code

import java.net.Socket;
import java.net.UnknownHostException;
import java.net.InetAddress;
import java.io.IOException;
import java.net.ServerSocket;

public class TCPServerSocket implements ISocketFactory
{
    public static int TCP_PORT_BASE;
    private ServerSocket sock;
    private int port;
    boolean local;
    
    public static ISocketFactory create(String name, final int backlog) throws IOException {
        boolean local = false;
        if (name == null) {
            throw new NullPointerException("name");
        }
        if (name.startsWith("INET:")) {
            name = name.substring(5);
        }
        else if (name.startsWith("INET_LOCAL:")) {
            local = true;
            name = name.substring(11);
        }
        final int p = Integer.parseInt(name);
        final TCPServerSocket s = new TCPServerSocket(p, backlog, local);
        return s;
    }
    
    private ServerSocket newServerSocket(final int port, final int backlog) throws IOException {
        try {
            if (this.local) {
                return new ServerSocket(port, backlog, InetAddress.getByName("127.0.0.1"));
            }
        }
        catch (UnknownHostException ex) {}
        return new ServerSocket(port, backlog);
    }
    
    private void findFreePort(final int start, final int backlog) {
        int port = start;
        while (port < start + 100) {
            try {
                this.sock = this.newServerSocket(port, backlog);
                this.port = port;
                return;
            }
            catch (IOException e) {
                ++port;
                continue;
            }
        }
    }
    
    private TCPServerSocket(final int port, final int backlog, final boolean local) throws IOException {
        this.local = local;
        if (port == 0) {
            this.findFreePort(TCPServerSocket.TCP_PORT_BASE, backlog);
        }
        else {
            this.sock = this.newServerSocket(port, backlog);
            this.port = port;
        }
    }
    
    @Override
    public void close() throws IOException {
        this.sock.close();
    }
    
    @Override
    public Socket accept() throws IOException {
        final Socket s = this.sock.accept();
        s.setTcpNoDelay(true);
        return s;
    }
    
    @Override
    public String getSocketName() {
        return String.valueOf(this.port);
    }
    
    @Override
    public String toString() {
        return (this.local ? "INET_LOCAL:" : "INET:") + this.getSocketName();
    }
    
    static {
     //   TCPServerSocket.TCP_PORT_BASE = 9267;
        TCPServerSocket.TCP_PORT_BASE = 8080;
    }
}

but my javabridge cannot open stream at that port why like that ? any idea for choice only port 8080 not choice the other ?

5
  • Probably cause you have an another program using that port type netstat -aon | findstr 8080 to verify and terminate that program if any. Commented Sep 1, 2020 at 4:49
  • i have check it but there is no 8080 run if my apps not run it... and if i choice manual if the code run well Commented Sep 1, 2020 at 5:20
  • Hey felix, the server needs to be started. Just to let you know... a fork exists that I maintain for some time now, I'm not really fond of doing an external require. See here: belgattitude.github.io/soluble-japha/bridge_connection/#example. Of course it depends on your project. If new, IMO start with the fork. My 2 cents Commented Sep 1, 2020 at 10:52
  • @SébastienVanvelthem yes i have restart and start my webserver... but my php cannot connect to my phpjavabridge i use this require_once("localhost:8080/JavaBridge/java/Java.inc"); Commented Sep 2, 2020 at 3:28
  • i use package of java bridge php.java.bridge not use io.soluble Commented Sep 2, 2020 at 3:40

1 Answer 1

0

this problem close after i change this code

try { /*
                  final int tcpSocket = Integer.parseInt(tcpSocketName);
                    final int freeJavaPort = findFreePort(tcpSocket);
                    final int freeHttpPort = findFreePort(8080);
                    final int freeHttpsPort = findFreePort(8443);
                    final Object result = JOptionPane.showInputDialog(null, "Start a socket listener on port", "Starting the PHP/Java Bridge ...", 3, null, new String[] { "INET_LOCAL:" + freeJavaPort, "INET:" + freeJavaPort, "HTTP_LOCAL:" + freeHttpPort, "HTTP:" + freeHttpPort, "HTTPS_LOCAL:" + freeHttpsPort, "HTTPS:" + freeHttpsPort }, "HTTP_LOCAL:" + freeHttpPort);
                        //final Object result = 8080;
                    if (result == null) {
                        System.exit(0);
                    }*/
                    //sockname = result.toString();
                    
                    sockname = "HTTP_LOCAL:8080";
                    System.out.println("sockname"+sockname);
                }

so sockname use "HTTP_LOCAL:8080" not "8080"

Sign up to request clarification or add additional context in comments.

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.