Folks,
Well, I got this extension_dir logic work completed based on my PHP
5.2.5 CVS copy of PHP. The feature allows your to set the extension_dir
for multiple paths. This is what I had so far in PHP.INI-DIST/RECOMMENDED.
;---------------------------------------------------------------------
; Directory locations (paths) in which the loadable extensions (modules)
; reside. To add multiple paths, separate paths using ":" (UNIX) for
; ";" (Windows) character. Examples:
;
; UNIX: extension_dir = "/path1:/path2"
; Windows: extension_dir = "\path1;\path2"
;
; Note: Explicit FQFN (Fully Qualified File Name) extension loading
;
: Extensions with explicit FQFN can be used to skip the
; extension search in the extension_dir path(s).
; i.e. extension = c:\serverapp\bin\php_wildcat.dll
;
;---------------------------------------------------------------------
extension_dir = "./ext"
The source code change was done on the ext\standard\dl.c file.
I was about to create the patches for the current PHP52, PHP53 and PHP6
snapshots when I noticed there was a change in PHP53 that was done that
allows for explicit FQFN extension= loading.
<side beef>
I don't know if this was a result of someone lurking the list and
decided to go ahead and do this after reading the related recent thread
for the multi-path extension_dir proposal, which is fine, but if they
did go about this after seeing the thread, a simple courtesy to post a
note of their intention would of been appreciated. Things like this
waste people's time.
</side beef>
In any case, to see if there was any other stuff related to this, I
checked the bug database and found two related past feature request
related to this:
Bug # 22587 (Mar 2003) extension_path feature
Bug # 41310 (May 2007) make extension_dir optional and use absolute
paths in "extension = ..."
#22587 is pretty much what I am satisfying.
#41310 was interesting so I wanted to see if this was possible now.
Using my 5.2.5 release installation (which would be the same logic as
5.2.6), I tested the following PHP.INI option:
extension_dir="./ext"
extension_dir="../../php_wildcat.dll"
and of course, the source code logic show this as well.
But the PHP53 FQFN change now breaks this.
The PHP53 change allow for extension= module loading if the filename has
a directory separator, but not supported for temporary loading via a PHP
script DL() function.
extension=c:\path\php_extension.dll <== works under PHP53 only
dl("c:\path\php_extension.dll") <== never supported.
I personally think PHP53 change is more correct, but that depends on
your point of view. Should the filename loading be off the ROOT path
for the PROCESS or off the extension_dir path was what the 5.2 logic.
It also depends on what the file name is:
FQFN means a complete path (not relative)
There could be a change where if the file name has relative folder
reference (../) then it could use the extension_dir as the root as it
was supported in PHP52. If its FQFN, then its a explicit load.
In all, this is what I think:
1) PHP53 breaks PHP52 logic. Although "more correct", its breaks
working code so we need to do something there.
2) Consider using a new extension_path to override extension_dir
thereby keeping extension_dir PHP52 intact and only apply the
multiple path search to the new extension_path, if defined.
3) Continue with the current patch I am doing with extension_dir
and if a extension= has a relative path, apply this only to
the FIRST path defined in extension_dir. For example:
extension_dir="./ext;c:/wildcat;c:/other"
extension=php_zip.dll
extension=php_wildcat.dll
extension=../php_extension2.dll
extension=c:\somewhere\php_extension3.dll
php_zip.dll has no folder information, so its found its stock ./ext folder.
php_wildcat.dll has no folder information, its not in ./ext so the
additional paths are checked and its found in c:/wildcat
php_extension2.dll has a relative location, so to continue with PHP52
expectations, it will only use the first path "./ext" as its root.
php_extension3.dll has a FQFN so its explicitly loaded with the FQFN.
Comment? What path do you think its the best way?
Again, although PHP53 change logic seems to be more correct, IMO, that
is would be so if PHP was new and there was no working code out there.
But as it was done now, it does break the PHP52 logic.
--
Hector Santos
--
PHP Internals - PHP Runtime Development Mailing List
To unsubscribe, visit: http://www.php.net/unsub.php