summaryrefslogtreecommitdiff
path: root/main/php_ini.c
diff options
context:
space:
mode:
Diffstat (limited to 'main/php_ini.c')
-rw-r--r--main/php_ini.c21
1 files changed, 20 insertions, 1 deletions
diff --git a/main/php_ini.c b/main/php_ini.c
index 5fe320eeaf..ae39d81d5b 100644
--- a/main/php_ini.c
+++ b/main/php_ini.c
@@ -353,7 +353,26 @@ int php_init_config(TSRMLS_D)
#else
if (sapi_module.executable_location) {
binary_location = (char *)emalloc(PATH_MAX);
- if (!realpath(sapi_module.executable_location, binary_location)) {
+ if (!strchr(sapi_module.executable_location, '/')) {
+ char *path;
+ int found = 0;
+
+ if ((path = getenv("PATH")) != NULL) {
+ char *search_dir, search_path[MAXPATHLEN];
+
+ while ((search_dir = strsep(&path, ":")) != NULL) {
+ snprintf(search_path, MAXPATHLEN, "%s/%s", search_dir, sapi_module.executable_location);
+ if (VCWD_REALPATH(search_path, binary_location) && !VCWD_ACCESS(binary_location, X_OK)) {
+ found = 1;
+ break;
+ }
+ }
+ }
+ if (!found) {
+ efree(binary_location);
+ binary_location = NULL;
+ }
+ } else if (!VCWD_REALPATH(sapi_module.executable_location, binary_location) || VCWD_ACCESS(binary_location, X_OK)) {
efree(binary_location);
binary_location = NULL;
}