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
This commit is contained in:
Mikko Koppanen 2009-12-24 13:12:03 +00:00
parent 0b8839cd4a
commit 207d9133ca
5 changed files with 64 additions and 0 deletions

1
NEWS
View file

@ -29,6 +29,7 @@ PHP NEWS
- Added support for CURLOPT_CERTINFO. FR #49253. - Added support for CURLOPT_CERTINFO. FR #49253.
(Linus Nielsen Feltzing <linus@haxx.se>) (Linus Nielsen Feltzing <linus@haxx.se>)
- Added client-side server name indication support in openssl. (Arnaud) - 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) - Improved fix for bug #50006 (Segfault caused by uksort()). (Stas)

View file

@ -2010,6 +2010,10 @@ ZEND_END_ARG_INFO()
ZEND_BEGIN_ARG_INFO(arginfo_stream_get_wrappers, 0) ZEND_BEGIN_ARG_INFO(arginfo_stream_get_wrappers, 0)
ZEND_END_ARG_INFO() 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_BEGIN_ARG_INFO(arginfo_stream_is_local, 0)
ZEND_ARG_INFO(0, stream) ZEND_ARG_INFO(0, stream)
ZEND_END_ARG_INFO() 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_wrapper_restore, arginfo_stream_wrapper_restore)
PHP_FE(stream_get_wrappers, arginfo_stream_get_wrappers) PHP_FE(stream_get_wrappers, arginfo_stream_get_wrappers)
PHP_FE(stream_get_transports, arginfo_stream_get_transports) 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(stream_is_local, arginfo_stream_is_local)
PHP_FE(get_headers, arginfo_get_headers) PHP_FE(get_headers, arginfo_get_headers)

View file

@ -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 /* {{{ proto bool stream_is_local(resource stream|string url) U
*/ */
PHP_FUNCTION(stream_is_local) PHP_FUNCTION(stream_is_local)

View file

@ -56,6 +56,7 @@ PHP_FUNCTION(stream_filter_append);
PHP_FUNCTION(stream_filter_remove); PHP_FUNCTION(stream_filter_remove);
PHP_FUNCTION(stream_socket_enable_crypto); PHP_FUNCTION(stream_socket_enable_crypto);
PHP_FUNCTION(stream_socket_shutdown); PHP_FUNCTION(stream_socket_shutdown);
PHP_FUNCTION(stream_resolve_include_path);
PHP_FUNCTION(stream_is_local); PHP_FUNCTION(stream_is_local);
PHP_FUNCTION(stream_supports_lock); PHP_FUNCTION(stream_supports_lock);

View file

@ -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"