Re: Can't find the server path when, in http.conf, using Alias and DirectoryIndex

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



2009/8/27 Paul Gardiner <lists@xxxxxxxxxx>:
> Torben Wilson wrote:
>>
>> 2009/8/26 Paul Gardiner <lists@xxxxxxxxxx>:
>>>
>>> Paul Gardiner wrote:
>>>>
>>>> I want to write a simple indexing script to display a
>>>> directory full of photos as a gallery of thumbnails.
>>>> (There are various solutions out there for this, but
>>>> they're all a bit more complicated than I need).
>>>>
>>>> I've added a file in /etc/apache2/conf.d that
>>>> looks like this:
>>>>
>>>> Alias /photos /home/public/photos
>>>> <Directory "/home/public/photos">
>>>>   AllowOverride None
>>>>   Order allow,deny
>>>>   Allow from all
>>>>
>>>>   DirectoryIndex /cgi-bin/index.php
>>>> </Directory>
>>>>
>>>>
>>>> I use "Alias" so that I can leave the photos where they are
>>>> and not have to move them to DocumentRoot. I use "DirectoryIndex"
>>>> so that the script doesn't have to be in with the photos. My
>>>> problem is that the running script seems to have no way to
>>>> work out the photos are in /home/public/photos.
>>>>
>>>> $_SERVER[REQUEST_URI] is "/photos/", but I can't see how to
>>>> derive the server path from that, since $_SERVER[DOCUMENT_ROOT]
>>>> is "/srv/www/htdocs".
>>>>
>>>> $_SERVER[PHP_SELF] is "/cgi-bin/index.php", so no use either.
>>>>
>>>>
>>>> How can I do this? Is there a way to interrogate the alias,
>>>> or can I set a variable in the conf file that PHP can pick up?
>>>
>>> I've sussed it. If I use this apache2 conf file, where I
>>> tag the server path onto the end of the index url:
>>>
>>> Alias /photos /home/public/photos
>>> <Directory "/home/public/photos">
>>>   AllowOverride None
>>>   Order allow,deny
>>>   Allow from all
>>>
>>>   DirectoryIndex /cgi-bin/index.php/home/public/photos
>>> </Directory>
>>>
>>> then the script can pick up the path as $_SERVER[PATH_INFO]
>>>
>>> P.
>>
>> Hi Paul,
>>
>> Glad you got it working.
>
> Actually, since posting, I've given up on that method,
> partly because I realised that in doing so I was opening up
> a security hole and being close to allowing enumeration of
> any apache-readable directory on my server, via direct use
> of the url http:/<host>/cgi-bin/index.php/<path>/.  I've
> found a much better way (using SetEnv):
>
> Alias /photos /home/public/photos
> <Directory "/home/public/photos">
>   AllowOverride None
>   Order allow,deny
>   Allow from all
>
>   SetEnv GalleryPath /home/public/photos
>   DirectoryIndex /cgi-bin/index.php
> </Directory>
>
> And then the script can pick up the path as $_SERVER['GalleryPath']
>
>> I would add one note: I don't know if this is
>> what your actual code contains or if it's just in your emails, but not
>> quoting string indices in arrays is a Bad Idea (TM). i.e. I'd
>> recommend avoiding the use of something like $_SERVER[PATH_INFO] and
>> instead use $_SERVER['PATH_INFO']. While the unquoted version will
>> work much of the time, it's untrustworthy. In this case, PHP sees the
>> label PATH_INFO and looks for a constant named PATH_INFO.
>
> Thanks for the advice. I've always been a little uncertain of that. I
> don't generally leave the quotes out, but I had been tending to, just
> for accessing $_SERVER (not sure why - some example code I must have
> read I think). Anyway, I'll put the quotes in.
>
> What about the case of including an array within a string, e.g.,
>
>  $line = "<tr><td>$array['name']<td>$array['address']";

Hi Paul,

For that, you use curly braces inside strings:

$line = "<tr><td>{$array['name']}<td>{$array['address']}";

http://www.php.net/manual/en/language.types.string.php#language.types.string.parsing


Regards,

Torben

> I've read something about that not working with the quotes in place.
> Is that best avoided too?
>
> Cheers,
>        Paul.
>
>

-- 
PHP General Mailing List (http://www.php.net/)
To unsubscribe, visit: http://www.php.net/unsub.php



[Index of Archives]     [PHP Home]     [Apache Users]     [PHP on Windows]     [Kernel Newbies]     [PHP Install]     [PHP Classes]     [Pear]     [Postgresql]     [Postgresql PHP]     [PHP on Windows]     [PHP Database Programming]     [PHP SOAP]

  Powered by Linux