]> granicus.if.org Git - php/commitdiff
Avoid repeatable calls to strstr()
authorDmitry Stogov <dmitry@zend.com>
Mon, 9 Feb 2015 19:42:37 +0000 (22:42 +0300)
committerDmitry Stogov <dmitry@zend.com>
Mon, 9 Feb 2015 19:42:37 +0000 (22:42 +0300)
ext/opcache/ZendAccelerator.c
ext/opcache/ZendAccelerator.h

index 0bf0bed7f2902c5e373254c3db69fb712128679e..ebe7942e7f7fcc6260dd27bb055d9e67387ec852 100644 (file)
@@ -1173,6 +1173,11 @@ static zend_persistent_script *cache_script_in_shared_memory(zend_persistent_scr
        /* Copy into shared memory */
        new_persistent_script = zend_accel_script_persist(new_persistent_script, &key, key_length);
 
+       new_persistent_script->is_phar =
+               new_persistent_script->full_path &&
+               strstr(new_persistent_script->full_path->val, ".phar") &&
+               !strstr(new_persistent_script->full_path->val, "://");
+
        /* Consistency check */
        if ((char*)new_persistent_script->mem + new_persistent_script->size != (char*)ZCG(mem)) {
                zend_accel_error(
@@ -1634,7 +1639,7 @@ zend_op_array *persistent_compile_file(zend_file_handle *file_handle, int type)
                             EG(current_execute_data)->opline->extended_value != ZEND_REQUIRE_ONCE)) {
                                if (zend_hash_add_empty_element(&EG(included_files), persistent_script->full_path) != NULL) {
                                        /* ext/phar has to load phar's metadata into memory */
-                                       if (strstr(persistent_script->full_path->val, ".phar") && !strstr(persistent_script->full_path->val, "://")) {
+                                       if (persistent_script->is_phar) {
                                                php_stream_statbuf ssb;
                                                char *fname = emalloc(sizeof("phar://") + persistent_script->full_path->len);
 
index d08a64130fa9a238f980a658d5c53a3dec4b29e6..369f609ecf1d01a1d65b0ae8975c670ceedf3adf 100644 (file)
@@ -161,6 +161,7 @@ typedef struct _zend_persistent_script {
        int            ping_auto_globals_mask; /* which autoglobals are used by the script */
        accel_time_t   timestamp;              /* the script modification time */
        zend_bool      corrupted;
+       zend_bool      is_phar;
 
        void          *mem;                    /* shared memory area used by script structures */
        size_t         size;                   /* size of used shared memory */