]> granicus.if.org Git - php/commitdiff
- Fix __FILE__ in the main script in CGI/command line mode.
authorAndi Gutmans <andi@php.net>
Sat, 21 Jul 2001 15:11:30 +0000 (15:11 +0000)
committerAndi Gutmans <andi@php.net>
Sat, 21 Jul 2001 15:11:30 +0000 (15:11 +0000)
main/fopen_wrappers.c
main/fopen_wrappers.h
sapi/cgi/cgi_main.c
sapi/servlet/servlet.c

index c4c8e484e737581a944ba5caaffda51eb2dd009e..90b7cbc5efba9a405fe828bd6c72abeffee40b41 100644 (file)
@@ -86,9 +86,6 @@ typedef FILE * (*php_fopen_url_wrapper_t) (const char *, char *, int, int *, int
 
 static FILE *php_fopen_url_wrapper(const char *, char *, int, int *, int *, char **);
 
-PHPAPI char *expand_filepath(const char *filepath, char *real_path);
-
-
 HashTable fopen_url_wrappers_hash;
 
 /* {{{ php_register_url_wrapper
@@ -250,7 +247,7 @@ static FILE *php_fopen_and_set_opened_path(const char *path, char *mode, char **
        }
        fp = VCWD_FOPEN(path, mode);
        if (fp && opened_path) {
-               *opened_path = expand_filepath(path,NULL);
+               *opened_path = expand_filepath(path, NULL);
        }
        return fp;
 }
@@ -288,7 +285,7 @@ PHPAPI FILE *php_fopen_wrapper(char *path, char *mode, int options, int *issock,
 
 /* {{{ php_fopen_primary_script
  */
-PHPAPI FILE *php_fopen_primary_script(void)
+PHPAPI int php_fopen_primary_script(zend_file_handle *file_handle)
 {
        FILE *fp;
        struct stat st;
@@ -355,7 +352,8 @@ PHPAPI FILE *php_fopen_primary_script(void)
                   we're not adding it in this case */
                STR_FREE(SG(request_info).path_translated);
                SG(request_info).path_translated = NULL;
-               return NULL;
+               file_handle->handle.fp = NULL;
+               return FAILURE;
        }
        fp = VCWD_FOPEN(filename, "rb");
 
@@ -367,14 +365,23 @@ PHPAPI FILE *php_fopen_primary_script(void)
        if (!fp) {
                php_error(E_ERROR, "Unable to open %s", filename);
                STR_FREE(SG(request_info).path_translated);     /* for same reason as above */
-               return NULL;
+               file_handle->handle.fp = NULL;
+               return FAILURE;
        }
+
+       file_handle->opened_path = expand_filepath(filename, NULL);
+
     if (!(SG(options) & SAPI_OPTION_NO_CHDIR)) {
                VCWD_CHDIR_FILE(filename);
     }
        SG(request_info).path_translated = filename;
 
-       return fp;
+       file_handle->filename = SG(request_info).path_translated;
+       file_handle->free_filename = 0;
+       file_handle->handle.fp = fp;
+       file_handle->type = ZEND_HANDLE_FP;
+
+       return SUCCESS;
 }
 /* }}} */
 
@@ -643,7 +650,7 @@ PHPAPI char *expand_filepath(const char *filepath, char *real_path)
 
        if(real_path) {
                int copy_len = new_state.cwd_length>MAXPATHLEN-1?MAXPATHLEN-1:new_state.cwd_length;
-               memcpy(real_path,new_state.cwd,copy_len);
+               memcpy(real_path, new_state.cwd, copy_len);
                real_path[copy_len]='\0';
        } else {
                real_path = estrndup(new_state.cwd, new_state.cwd_length);
index 0bb788060894432bfe461aac28b7b1e1e828e598..ee0040e338b72d38aa4b70a53293c8dc478eb0e2 100644 (file)
@@ -66,7 +66,8 @@
 
 PHPAPI FILE *php_fopen_wrapper(char *filename, char *mode, int options, int *issock, int *socketd, char **opened_path);
 
-PHPAPI FILE *php_fopen_primary_script(void);
+PHPAPI int php_fopen_primary_script(zend_file_handle *file_handle);
+PHPAPI char *expand_filepath(const char *filepath, char *real_path);
 
 PHPAPI int php_check_open_basedir(char *path);
 PHPAPI int php_check_specific_open_basedir(char *basedir, char *path PLS_DC);
index e72483375d79a49fe058d46b5e9d3c615e62cb02..a10a62293e99234dac5af55bda6e382ab2847cb6 100644 (file)
@@ -368,6 +368,7 @@ int main(int argc, char *argv[])
        int exit_status = SUCCESS;
        int cgi = 0, c, i, len;
        zend_file_handle file_handle;
+       int retval = FAILURE;
        char *s;
 /* temporary locals */
        int behavior=PHP_MODE_STANDARD;
@@ -676,6 +677,7 @@ any .htaccess restrictions anywhere on your site you can leave doc_root undefine
                file_handle.type = ZEND_HANDLE_FP;
                file_handle.handle.fp = stdin;
                file_handle.opened_path = NULL;
+               file_handle.free_filename = 0;
 
                /* This actually destructs the elements of the list - ugly hack */
                zend_llist_apply(&global_vars, (llist_apply_func_t) php_register_command_line_global_vars);
@@ -703,11 +705,10 @@ any .htaccess restrictions anywhere on your site you can leave doc_root undefine
                        }
                }
                if (cgi || SG(request_info).path_translated) {
-                       file_handle.handle.fp = php_fopen_primary_script();
-                       file_handle.filename = SG(request_info).path_translated;
+                       retval = php_fopen_primary_script(&file_handle);
                }
 
-               if (cgi && !file_handle.handle.fp) {
+               if (cgi && (retval == FAILURE)) {
                        if(!argv0 || !(file_handle.handle.fp = VCWD_FOPEN(argv0, "rb"))) {
                                PUTS("No input file specified.\n");
                                php_request_shutdown((void *) 0);
@@ -715,7 +716,8 @@ any .htaccess restrictions anywhere on your site you can leave doc_root undefine
                                return FAILURE;
                        }
                        file_handle.filename = argv0;
-               } else if (file_handle.handle.fp && file_handle.handle.fp!=stdin) {
+                       file_handle.opened_path = expand_filepath(argv0, NULL);
+               } else if (retval == SUCCESS) {
                        /* #!php support */
                        c = fgetc(file_handle.handle.fp);
                        if (c == '#') {
@@ -728,7 +730,6 @@ any .htaccess restrictions anywhere on your site you can leave doc_root undefine
                        }
                }
 
-               file_handle.free_filename = 0;
                switch (behavior) {
                        case PHP_MODE_STANDARD:
                                exit_status = php_execute_script(&file_handle CLS_CC ELS_CC PLS_CC);
index 385795e704173daf2312f48dac37a63ce3f3c162..84d1493506694c4b9254535d7fbfa87c6ad2ac94 100644 (file)
@@ -315,6 +315,7 @@ JNIEXPORT void JNICALL Java_net_php_servlet_send
         jstring authUser, jboolean display_source_mode)
 {
        zend_file_handle file_handle;
+       int retval;
 #ifndef VIRTUAL_DIR
        char cwd[MAXPATHLEN];
 #endif
@@ -352,7 +353,7 @@ JNIEXPORT void JNICALL Java_net_php_servlet_send
                 */
                SETSTRING( SG(request_info).path_translated, pathTranslated );
 #ifdef VIRTUAL_DIR
-               file_handle.handle.fp = php_fopen_primary_script();
+               retval = php_fopen_primary_script(&file_handle);
 #else
                /*
                 * The java runtime doesn't like the working directory to be
@@ -360,15 +361,11 @@ JNIEXPORT void JNICALL Java_net_php_servlet_send
                 * in the hopes that Java doesn't notice.
                 */
                getcwd(cwd,MAXPATHLEN);
-               file_handle.handle.fp = php_fopen_primary_script();
+               retval = php_fopen_primary_script(&file_handle);
                chdir(cwd);
 #endif
-               file_handle.filename = SG(request_info).path_translated;
-               file_handle.opened_path = NULL;
-               file_handle.free_filename = 0;
-               file_handle.type = ZEND_HANDLE_FP;
-
-               if (!file_handle.handle.fp) {
+               
+               if (retval == FAILURE) {
                        php_request_shutdown((void *) 0);
                        php_module_shutdown();
                        ThrowIOException(jenv,file_handle.filename);
@@ -385,7 +382,7 @@ JNIEXPORT void JNICALL Java_net_php_servlet_send
 
                        if (open_file_for_scanning(&file_handle CLS_CC)==SUCCESS) {
                                php_get_highlight_struct(&syntax_highlighter_ini);
-                       sapi_send_headers();
+                               sapi_send_headers();
                                zend_highlight(&syntax_highlighter_ini);
                        }
                } else {