There is an impedence mismatch here between typical usage on Unix and
typical usage on Windows.  Some infomation that can typically be compiled-in
on Unix must be determined at runtime on Windows.

I don't believe the environment is really a good place to be expecting this
information - not on Windows.  You run into trouble with differing
applications (bundling PHP) needing to use differing values.  If any of this
is run from a service context - it's just not going to work out well.

There is a logical approach to deriving most or all this information on
Windows that works out a bit more cleanly.

Lets start from the beginning.

PHP_BINDIR                              "c:\\php4"
PEAR_INSTALLDIR                 "c:\\php4\\pear"
PHP_CONFIG_FILE_PATH            ""
PHP_CONFIG_FILE_SCAN_DIR        ""
PHP_DATADIR                             "c:\\php4"
PHP_EXTENSION_DIR               "c:\\php4"
PHP_INCLUDE_PATH                        ".;c:\\php4\\pear"
PHP_LIBDIR                              "c:\\php4"
PHP_LOCALSTATEDIR                       "c:\\php4"
PHP_PREFIX                              "c:\\php4"
PHP_SYSCONFDIR                  "c:\\php4"

PHP_BINDIR can be exactly determined at runtime (using GetModuleHandle() and
GetModuleFileName() - I can supply the idiom and bewares).

Once you know where PHP was installed, you can assume by default the other
directories as relative.  So you have:

PHP_DATADIR                             %PHP_BINDIR%
PHP_EXTENSION_DIR               %PHP_BINDIR%
PHP_INCLUDE_PATH                        ".;%PHP_BINDIR%"
PHP_LIBDIR                              %PHP_BINDIR%
PHP_LOCALSTATEDIR                       %PHP_BINDIR%
PHP_PREFIX                              %PHP_BINDIR%
PHP_SYSCONFDIR                  %PHP_BINDIR%
PEAR_INSTALLDIR                 "%PHP_BINDIR%\\pear"

Since these are all computed values, it would be a good idea to eliminate
the compile-time constants.  Better to not pretend - as this will help you
find code that might be a problem.

Finally you go looking for a configuration file to override the defaults.
If the configuration file was not specified on the command line, then you
pick it up from (usually) the installation directory.

( Microsoft sells the idea of using the registry at this point, but in
practice I've found it better to make only minimal use of the registry ).

What I had not figured out last I had time to look at the code, was how to
plug in computed values as though they were compiled in.


-----Original Message-----
From: Frank M. Kromann [mailto:[EMAIL PROTECTED]]
Sent: Sunday, December 01, 2002 11:55 AM

Yu are right. Two of the values needs to be constants, as these are used
in building the INI array.

Setting the constants to this works:

#define PEAR_INSTALLDIR
(getenv("PEAR_INSTALLDIR"))?getenv("PEAR_INSTALLDIR"):"c:\\php4\\pear"
#define PHP_BINDIR (getenv("PHP_BINDIR"))?getenv("PHP_BINDIR"):"c:\\php4"
#define PHP_CONFIG_FILE_PATH
(getenv("PHP_CONFIG_FILE_PATH"))?getenv("PHP_CONFIG_FILE_PATH"):""
#define PHP_CONFIG_FILE_SCAN_DIR
(getenv("PHP_CONFIG_FILE_SCAN_DIR"))?getenv("PHP_CONFIG_FILE_SCAN_DIR"):""
#define PHP_DATADIR
(getenv("PHP_DATADIR"))?getenv("PHP_DATADIR"):"c:\\php4"
#define PHP_EXTENSION_DIR "c:\\php4"
#define PHP_INCLUDE_PATH ".;c:\\php4\\pear"
#define PHP_LIBDIR (getenv("PHP_LIBDIR"))?getenv("PHP_LIBDIR"):"c:\\php4"
#define PHP_LOCALSTATEDIR
(getenv("PHP_LOCALSTATEDIR"))?getenv("PHP_LOCALSTATEDIR"):"c:\\php4"
#define PHP_PREFIX (getenv("PHP_PREFIX"))?getenv("PHP_PREFIX"):"c:\\php4"
#define PHP_SYSCONFDIR
(getenv("PHP_SYSCONFDIR"))?getenv("PHP_SYSCONFDIR"):"c:\\php4"

PHP_EXTENSION_DIR and PHP_INCLUDE_PATH can both be specified in php.ini
and perhaps we can find a way to set them by environment variables ?

- Frank

> On Sun, 01 Dec 2002 07:57:18 -0800
> "Frank M. Kromann" <[EMAIL PROTECTED]> wrote:
>
> > We could change it to something like this:
> >
> > #define PEAR_INSTALLDIR
> >
(getenv("PEAR_INSTALLDIR"))?getenv("PEAR_INSTALLDIR"):"c:\\php4\\pear"
>
> As far as I remember, that s what has been done weeks ago and causes a
> compile error. Can you test it on a win32 build ? I should do it later
> tonight or tomorrow.


-- 
PHP Development Mailing List <http://www.php.net/>
To unsubscribe, visit: http://www.php.net/unsub.php

Reply via email to