Hi,
Ok, if you have little knowledge of C, no need to
try to apply the patch.
You would need a compiler, some libraries, set-up
the environment, configure, build, install...
I'll install a Windows binaries and try your
configuration. Should be easy to reproduce.
The syntax you have used is correct (Z:/bla/bla/).
AFAIK, the internals of httpd (the APR library to
be precise) already translate the '/' (Linux
style) in '\' (Windows style).
My proposal was just based on information taken
from Microsoft doc (search for "When opening a
volume or removable media drive (for example, a
floppy disk drive or flash memory thumb drive),
..." near the end of
https://docs.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfilew).
Because, at some point, on Windows, 'CreteFileW()'
is called.
Just 2 words on the patch.
When a configuration file is parsed, when a
'<IfFile ...>' directive is found, all lines
up to the corresponding </Iffile> are
discarded.
To do that the function, we call 'apr_stat()'
which gives information on a file (size, name,
dates...). In the specific case, no information is
requested. This is unusual. Usually we ask for
size only, or "standard" information.
The patch just changes the requirement from "do
not return anything" to "return size file only".
However, asking for no information *should still
work*. The function should tell us that the file
exists or not, without any details on the file
itself, if found.
My point is that using it this way, is unusual.
This could hide a corner case (read: bug in the
APR underlying library)
I've had in my todo list for a long time to setup
a test environment for Windows. It could be a good
occasion to do it. Or you could try with the
supplier of a Windows binary (Steffen from Apache
lounge is following closely the project and could
be of help). Reproduce the issue with their
binaries and report to issue to them as well.
Finally, I put back the mailing list in copy,
should anyone have an opinion on it
CJ
Le 23/08/2019 à
14:12, Heather Lotz a écrit :
Also, it would be helpful to know the expected
syntax to use in <IfFile> once the patch
is applied.
For instance, does the patch expect
<IfFile
"/z/files/development/ApacheSmokeSignal.txt">
and the purpose of the patch
is to execute the code within the
<IfFile> tags?
Or does the patch expect
<IfFile
"Z:/files/development/ApacheSmokeSignal.txt">
and the patch will allow the
code within the <IfFile> tags to execute
as it would on a Linux machine?
I opened the patch file in Notepad++ but don't
understand the contents.
Hello Christophe - Thank-you for the reply.
Can you please provide some instructions
about how to apply the patch?
Heather
Le
23/08/2019 à 05:04, Heather Lotz a
écrit :
After some more testing, it seems that
this syntax -
<IfFile
"Z:/files/development/ApacheSmokeSignal.txt">
is the root cause of Apache not
starting when the external storage
device, mapped to Z:, is detached from
the Windows 10 PC.
I tested these variants individually,
which are more *nix like -
<IfFile
"Z/files/development/ApacheSmokeSignal.txt">
<IfFile
"/Z/files/development/ApacheSmokeSignal.txt">
<IfFile
"/z/files/development/ApacheSmokeSignal.txt">
and the behavior is Apache starts
whether or not Z: is attached to the
PC, so that is a step in the right
direction. However, the code within
the <IfFile> tags never executes
because when
localhost:8080/miscellaneous/ is
entered in a browser it always returns
a 404 error.
Another test was this -
<IfFile
"/c/Users/heather.lotz/Documents/_user_files/test.txt">
which points to an existing file which
is not stored on Z:. The behavior
here was the same as that of the 3
*nix like tests. Apache starts
whether or not Z: is attached to the
PC but code within the <IfFile>
tags is not executed because localhost:8080/miscellaneous/
returns a 404 error.
Does this constitute a bug of
<IfFile> when used on a Windows
OS?
A new file was created on Z: for
the sole purpose of having a
designated file for Apache to
seek.
The file is called Z:\files\development\ApacheSmokeSignal.txt.
Here is what httpd-vhosts.conf
looks like now:
<IfFile
"Z:/files/development/ApacheSmokeSignal.txt">
<VirtualHost *:8080>
DocumentRoot
"Z:/files/xampp/htdocs"
<Directory
"Z:/files/xampp/htdocs">
Options Indexes
Require all granted
</Directory>
</VirtualHost>
</IfFile>
With this update in place, Apache
starts fine when Z: is attached to
the PC. However, when Z: is not
attached to the PC Apache does not
start and these lines appear in
the XAMPP Control Panel console:
9:30:24 PM [Apache]
Attempting to start Apache
app...
9:30:24 PM [Apache] Status
change detected: running
9:30:26 PM [Apache] Status
change detected: stopped
9:30:26 PM [Apache] Error:
Apache shutdown unexpectedly.
9:30:26 PM [Apache] This
may be due to a blocked port,
missing dependencies,
9:30:26 PM [Apache]
improper privileges, a crash,
or a shutdown by another method.
9:30:26 PM [Apache] Press
the Logs button to view error
logs and check
9:30:26 PM [Apache] the
Windows Event Viewer for more
clues
9:30:26 PM [Apache] If you
need more help, copy and post
this
9:30:26 PM [Apache] entire
log window on the forums
There are no entries in error.log
with a Wed Aug 21 21:30 or later
timestamp.
Is the syntax incorrect? Note
that Apache is installed in this
location on the PC in
question: C:\xampp\apache.
On
Wed, Aug 21, 2019 at 8:21
PM Heather Lotz
<knot22@xxxxxxxxxxx> wrote:
>
> Greetings,
>
> In my development
environment on a Windows
10 PC I have added the
following to Apache's
configuration files -
>
> To httpd.conf:
> Listen 8080
>
> To httpd-vhosts.conf:
> <VirtualHost
*:8080>
> DocumentRoot
"Z:/files/xampp/htdocs"
> <Directory
"Z:/files/xampp/htdocs">
> Options Indexes
> Require all granted
> </Directory>
> </VirtualHost>
>
> Note that Z: is
mapped to an external
storage device.
>
> With this setup,
Apache successfully
accesses C: on port 80 and
Z: on port 8080. However,
if the external storage
device is not attached to
the computer, Apache will
not start. Is there a way
to check if Z: is present,
and only create the
virtual host if that
device is plugged in so
that Apache always
starts? If so, how can
this be achieved?
Try <IfFile>
https://httpd.apache.org/docs/2.4/mod/core.html#iffile
--
Eric Covener
covener@xxxxxxxxx
---------------------------------------------------------------------
To unsubscribe, e-mail:
users-unsubscribe@xxxxxxxxxxxxxxxx
For additional commands,
e-mail:
users-help@xxxxxxxxxxxxxxxx
Hi,
would you have the opportunity to test
the attached patch?
The 0 passed to apr_stat looks spurious
to me. (but should work)
(Pure speculation)
Also, based on Microsoft doc, could you
also try:
<IfFile "\\.\Z:">
...
and
<IfFile "\\.\Z:\">
...
CJ