|
|
|
@ -1492,24 +1492,36 @@ PHPAPI php_stream_wrapper *php_stream_locate_url_wrapper(const char *path, char |
|
|
|
} |
|
|
|
/* TODO: curl based streams probably support file:// properly */ |
|
|
|
if (!protocol || !strncasecmp(protocol, "file", n)) { |
|
|
|
#ifdef PHP_WIN32 |
|
|
|
if (protocol && path[n+1] == '/' && path[n+2] == '/' && path[n+4] != ':') { |
|
|
|
if (protocol) { |
|
|
|
int localhost = 0; |
|
|
|
|
|
|
|
if (!strncasecmp(path, "file://localhost/", 17)) { |
|
|
|
localhost = 1; |
|
|
|
} |
|
|
|
|
|
|
|
#ifdef PHP_WIN32 |
|
|
|
if (localhost == 0 && path[n+3] != '\0' && path[n+3] != '/' && path[n+4] != ':') { |
|
|
|
#else |
|
|
|
if (protocol && path[n+1] == '/' && path[n+2] == '/' && path[n+3] != '/') { |
|
|
|
if (localhost == 0 && path[n+3] != '/') { |
|
|
|
#endif |
|
|
|
if (options & REPORT_ERRORS) { |
|
|
|
php_error_docref(NULL TSRMLS_CC, E_WARNING, "remote host file access not supported, %s", path); |
|
|
|
if (options & REPORT_ERRORS) { |
|
|
|
php_error_docref(NULL TSRMLS_CC, E_WARNING, "remote host file access not supported, %s", path); |
|
|
|
} |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
return NULL; |
|
|
|
} |
|
|
|
if (protocol && path_for_open) { |
|
|
|
/* skip past protocol and :/, but handle windows correctly */ |
|
|
|
*path_for_open = (char*)path + n + 1; |
|
|
|
while (*(++*path_for_open)=='/'); |
|
|
|
|
|
|
|
if (path_for_open) { |
|
|
|
/* skip past protocol and :/, but handle windows correctly */ |
|
|
|
*path_for_open = (char*)path + n + 1; |
|
|
|
if (localhost == 1) { |
|
|
|
(*path_for_open) += 11; |
|
|
|
} |
|
|
|
while (*(++*path_for_open)=='/'); |
|
|
|
#ifdef PHP_WIN32 |
|
|
|
if (*(*path_for_open + 1) != ':') |
|
|
|
if (*(*path_for_open + 1) != ':') |
|
|
|
#endif |
|
|
|
(*path_for_open)--; |
|
|
|
(*path_for_open)--; |
|
|
|
} |
|
|
|
} |
|
|
|
|
|
|
|
if (options & STREAM_LOCATE_WRAPPERS_ONLY) { |
|
|
|
|