I am getting this same exception due to a request URI for a non existent file. I am using Tomcat 5.5.15 and PHP 4.4.2 When this exception occurs, I also get a JVM dump do the zend engine.
# # An unexpected error has been detected by HotSpot Virtual Machine: # # SIGSEGV (0xb) at pc=0xa889aa94, pid=30899, tid=2844183472 # # Java VM: Java HotSpot(TM) Client VM (1.5.0_04-b05 mixed mode) # Problematic frame: # C [libphp4.so+0x130a94] zend_hash_copy+0xc # # An error report file with more information is saved as hs_err_pid30899.log # # If you would like to submit a bug report, please visit: # http://java.sun.com/webapps/bugreport/crash.jsp # This is bad. Any suggestions? Are you seeing the same dump or just the exception? You might have already mentioned but what version of PHP are you using? I tried catching the exception in php's servlet class, just wrapped the call to send in try/catch, but it didn't help matters. Any help appreciated. Scott Gregg Leichtman wrote: > > -----BEGIN PGP SIGNED MESSAGE----- > Hash: SHA1 > > This exception: > > java.io.IOException: null > net.php.servlet.send(Native Method) > net.php.servlet.service(servlet.java:207) > net.php.servlet.service(servlet.java:236) > javax.servlet.http.HttpServlet.service(HttpServlet.java:802) > > in my particular case, was generated by the following code in file > <php_src_distribution_root>/TSRM/tsrm_virtual_cwd.c in function > virtual_fopen where it attempts > > ... > f = fopen(new_state.cwd, mode); > CWD_STATE_FREE(&new_state); > fclose(outFile); > return f; > > The function takes a, not uncommon in C, minimalistic approach to > errors by passing a null for all failures. > > I had mistakenly placed my test.php file directly under the webapps > directory. It should have been placed under the .../webapps/ROOT > directory. Tomcat passed .../webapps/ROOT/test.php to the fopen > function. Since the file could not be found, fopen returned a null > pointer which bubbles up from here to the Java code as a thrown > IOException with no error info other than null. If I had been paying > attention, I would have caught this with the first post while I was > still debugging the Java code. Arghhh. > > Moving the test.php file containing: > > <?php phpinfo(); ?> > > to the proper directory caused a nicely formatted table of PHP info to > be displayed in the FireFox browser. > > Also, the code I mentioned below as initially suspect was not even > compiled into the library, since the VIRTUAL_DIR directive was defined > so that virtual functions would be compiled. > > Thanks again for the push in the right direction. > > -=> Gregg <=- > > Gregg Leichtman wrote: >> A review of the servlet.c send method shows the following code: >> >> /* * Parse the file */ SETSTRING( SG(request_info).path_translated, >> pathTranslated ); #ifdef VIRTUAL_DIR retval = >> php_fopen_primary_script(&file_handle TSRMLS_CC); #else /* * The >> java runtime doesn't like the working directory to be * changed, so >> save it and change it back as quickly as possible * in the hopes >> that Java doesn't notice. */ getcwd(cwd, MAXPATHLEN); retval = >> php_fopen_primary_script(&file_handle TSRMLS_CC); chdir(cwd); >> #endif >> >> if (retval == FAILURE) { php_request_shutdown((void *) 0); >> php_module_shutdown(TSRMLS_C); ThrowIOException(jenv, >> file_handle.filename); return; } >> >> Relying on timing to make something work is usually not a good >> practice and it looks like this code may not be working in my case >> due to bad timing. As previously posted I'll try an earlier version >> of PHP. >> >> -=> Gregg <=- >> >> Gregg Leichtman wrote: >>>> Thanks for the direction. >>>> >>>> This is pretty much what I thought. I'll try moving back to a >>>> previous version of PHP and see how it goes. >>>> >>>> -=> Gregg <=- >>>> >>>> Nikola Milutinovic wrote: >>>>>>> *exception* >>>>>>> >>>>>>> java.io.IOException: null net.php.servlet.send(Native >>>>>>> Method) net.php.servlet.service(servlet.java:207) >>>>>>> net.php.servlet.service(servlet.java:236) >>>>>>> javax.servlet.http.HttpServlet.service(HttpServlet.java:802) >>>>>>> >>>>>> This exception is not only generic, but it is also missing >>>>>> the cause. It is definitely generated in the JNI method, so >>>>>> you'd have to look in there. >>>>>> >>>>>>> I then altered the servlet class to include some >>>>>>> debugging info just prior to its invocation of the send >>>>>>> method: >>>>>>> >>>>>>> send(request.getMethod(), request.getQueryString(), >>>>>>> request.getRequestURI(), contextPath, >>>>>>> request.getContentType(), request.getContentLength(), >>>>>>> request.getRemoteUser(), display_source_mode ); >>>>>>> >>>>>>> Here is the result: request.getMethod() = >>>>>>> GET request.getQueryString() = null >>>>>>> request.getRequestURI() = /test.php contextPath = >>>>>>> /home/gsl/tomcat/apache-tomcat-5.5.15/webapps/ROOT/test.php >>>>>>> request.getContentType() = null >>>>>>> request.getContentLength() = -1 request.getRemoteUser() = >>>>>>> null display_source_mode = false >>>>>> This looks fine. >>>>>> >>>>>>> The corresponding native method appears to be in >>>>>>> servlet.c as: >>>>>>> >>>>>>> JNIEXPORT void JNICALL Java_net_php_servlet_send (JNIEnv >>>>>>> *jenv, jobject self, jstring requestMethod, jstring >>>>>>> queryString, jstring requestURI, jstring pathTranslated, >>>>>>> jstring contentType, jint contentLength, jstring >>>>>>> authUser, jboolean display_source_mode) >>>>>>> >>>>>>> I haven't written JNI code before, but I suspect that the >>>>>>> first two args are just hidden info. that is typically >>>>>>> passed to a native method, so I don't see a signature >>>>>>> mismatch or anything else wrong here. >>>>>> The error would have been much different, in case of a >>>>>> signature mismatch. >>>>>> >>>>>>> Alternatively, does anyone have any further ideas on what >>>>>>> I could do to debug this further? >>>>>>> >>>>>>> A few other individuals posted this null IOException on >>>>>>> the net, but no resolution was provided. Being such a >>>>>>> generic error, their problem might not even be related to >>>>>>> what I am experiencing. >>>>>> Well,... >>>>>> >>>>>> As I have said above, the exception is thrown in the native >>>>>> method, so you could go into the source of that method and >>>>>> see where it could throw an exception. Other than that, you >>>>>> could try building a different version of PHP, like 5.0 or >>>>>> 5.1 branch. Maybe they will fare better. >>>>>> >>>>>> Nix. >>>>>> >>>>>> __________________________________________________ Do You >>>>>> Yahoo!? Tired of spam? Yahoo! Mail has the best spam >>>>>> protection around http://mail.yahoo.com >>>>>> >>>>>> >> --------------------------------------------------------------------- >> >>>>>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>>>>> For additional commands, e-mail: >>>>>> [EMAIL PROTECTED] >>>>>> >>>> --------------------------------------------------------------------- >>>> To unsubscribe, e-mail: [EMAIL PROTECTED] >>>> For additional commands, e-mail: [EMAIL PROTECTED] >>>> >> >> --------------------------------------------------------------------- >> To unsubscribe, e-mail: [EMAIL PROTECTED] For >> additional commands, e-mail: [EMAIL PROTECTED] >> > -----BEGIN PGP SIGNATURE----- > Version: GnuPG v1.4.0 (GNU/Linux) > Comment: Using GnuPG with Mozilla - http://enigmail.mozdev.org > > iD8DBQFELExGMcSsEtbyA2cRAnRWAJ9yIUHIXX/AJ3aYyNR63mP0H91kCACcDAvQ > 6cohwHXPQmSpnB0oYFAI9X0= > =PRHu > -----END PGP SIGNATURE----- > > --------------------------------------------------------------------- > To unsubscribe, e-mail: [EMAIL PROTECTED] > For additional commands, e-mail: [EMAIL PROTECTED] > > > -- View this message in context: http://www.nabble.com/PHP-Servlet-Fails-in-Tomcat-5.5.15-t1346749.html#a3710746 Sent from the Tomcat - User forum at Nabble.com. --------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]