diff options
author | Mikko Koppanen <mkoppanen@php.net> | 2009-12-24 13:12:03 +0000 |
---|---|---|
committer | Mikko Koppanen <mkoppanen@php.net> | 2009-12-24 13:12:03 +0000 |
commit | 207d9133cac00720c06e1ba15b68e1b0e9b24f7f (patch) | |
tree | 58f7fe2c13bcb60fd0d0b10caa97af8442ce2603 | |
parent | 0b8839cd4a40c00cf87b8041a2ad54f217775cc6 (diff) | |
download | php-git-207d9133cac00720c06e1ba15b68e1b0e9b24f7f.tar.gz |
Changed stream_resolve_include_path to use zend_resolve_path
backported stream_resolve_include_path to PHP 5.3
backported stream_resolve_include_path test to PHP 5.3
-rw-r--r-- | NEWS | 1 | ||||
-rw-r--r-- | ext/standard/basic_functions.c | 5 | ||||
-rw-r--r-- | ext/standard/streamsfuncs.c | 20 | ||||
-rw-r--r-- | ext/standard/streamsfuncs.h | 1 | ||||
-rw-r--r-- | ext/standard/tests/streams/stream_resolve_include_path.phpt | 37 |
5 files changed, 64 insertions, 0 deletions
@@ -29,6 +29,7 @@ PHP NEWS - Added support for CURLOPT_CERTINFO. FR #49253. (Linus Nielsen Feltzing <linus@haxx.se>) - Added client-side server name indication support in openssl. (Arnaud) +- Added stream_resolve_include_path() (Mikko) - Improved fix for bug #50006 (Segfault caused by uksort()). (Stas) diff --git a/ext/standard/basic_functions.c b/ext/standard/basic_functions.c index 150afa1d18..f29df3cec3 100644 --- a/ext/standard/basic_functions.c +++ b/ext/standard/basic_functions.c @@ -2010,6 +2010,10 @@ ZEND_END_ARG_INFO() ZEND_BEGIN_ARG_INFO(arginfo_stream_get_wrappers, 0) ZEND_END_ARG_INFO() +ZEND_BEGIN_ARG_INFO(arginfo_stream_resolve_include_path, 0) + ZEND_ARG_INFO(0, filename) +ZEND_END_ARG_INFO() + ZEND_BEGIN_ARG_INFO(arginfo_stream_is_local, 0) ZEND_ARG_INFO(0, stream) ZEND_END_ARG_INFO() @@ -3115,6 +3119,7 @@ const zend_function_entry basic_functions[] = { /* {{{ */ PHP_FE(stream_wrapper_restore, arginfo_stream_wrapper_restore) PHP_FE(stream_get_wrappers, arginfo_stream_get_wrappers) PHP_FE(stream_get_transports, arginfo_stream_get_transports) + PHP_FE(stream_resolve_include_path, arginfo_stream_resolve_include_path) PHP_FE(stream_is_local, arginfo_stream_is_local) PHP_FE(get_headers, arginfo_get_headers) diff --git a/ext/standard/streamsfuncs.c b/ext/standard/streamsfuncs.c index 5759899316..4be67f3fd8 100644 --- a/ext/standard/streamsfuncs.c +++ b/ext/standard/streamsfuncs.c @@ -1442,6 +1442,26 @@ PHP_FUNCTION(stream_socket_enable_crypto) } /* }}} */ +/* {{{ proto string stream_resolve_include_path(string filename) +Determine what file will be opened by calls to fopen() with a relative path */ +PHP_FUNCTION(stream_resolve_include_path) +{ + char *filename, *resolved_path; + int filename_len; + + if (zend_parse_parameters(ZEND_NUM_ARGS() TSRMLS_CC, "s", &filename, &filename_len) == FAILURE) { + return; + } + + resolved_path = zend_resolve_path(filename, filename_len TSRMLS_CC); + + if (resolved_path) { + RETURN_STRING(resolved_path, 0); + } + RETURN_FALSE; +} +/* }}} */ + /* {{{ proto bool stream_is_local(resource stream|string url) U */ PHP_FUNCTION(stream_is_local) diff --git a/ext/standard/streamsfuncs.h b/ext/standard/streamsfuncs.h index a3052bac63..b59031e655 100644 --- a/ext/standard/streamsfuncs.h +++ b/ext/standard/streamsfuncs.h @@ -56,6 +56,7 @@ PHP_FUNCTION(stream_filter_append); PHP_FUNCTION(stream_filter_remove); PHP_FUNCTION(stream_socket_enable_crypto); PHP_FUNCTION(stream_socket_shutdown); +PHP_FUNCTION(stream_resolve_include_path); PHP_FUNCTION(stream_is_local); PHP_FUNCTION(stream_supports_lock); diff --git a/ext/standard/tests/streams/stream_resolve_include_path.phpt b/ext/standard/tests/streams/stream_resolve_include_path.phpt new file mode 100644 index 0000000000..01c05a5ca2 --- /dev/null +++ b/ext/standard/tests/streams/stream_resolve_include_path.phpt @@ -0,0 +1,37 @@ +--TEST-- +stream_resolve_include_path(string path) +--FILE-- +<?php +$include_path = __DIR__ . '/test_path'; +$include_path_nested = $include_path . '/nested'; + +$include_path_file = $include_path . DIRECTORY_SEPARATOR . 'file'; +$include_path_nested_file = $include_path_nested . DIRECTORY_SEPARATOR . 'file'; + +mkdir($include_path); +mkdir($include_path_nested); + +file_put_contents($include_path_file, 'include_path'); +file_put_contents($include_path_nested_file, 'include_path'); + +var_dump(stream_resolve_include_path()); + +set_include_path($include_path . PATH_SEPARATOR . $include_path_nested); +var_dump(stream_resolve_include_path('file-does-not-exist')); + +set_include_path($include_path . PATH_SEPARATOR . $include_path_nested); +var_dump(stream_resolve_include_path('file')); +set_include_path($include_path_nested . PATH_SEPARATOR . $include_path); +var_dump(stream_resolve_include_path('file')); + +unlink($include_path_nested_file); +rmdir($include_path_nested); +unlink($include_path_file); +rmdir($include_path); +--EXPECTF-- +Warning: stream_resolve_include_path() expects exactly 1 parameter, 0 given in %s on line %d +NULL +bool(false) +string(%d) "%s/test_path/file" +string(%d) "%s/test_path/nested/file" + |