-----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]