Re: move_uploaded_file
| From: | Ashley Sheridan | Date: | Fri, 11 Dec 2009 22:36:43 +0000 |
| Subject: | Re: move_uploaded_file | ||
| References: | 1 2 3 4 5 | Groups: | php.general |
| Request: | Send a blank email to php-general+get-300411@lists.php.net to get a copy of this message | ||
On Fri, 2009-12-11 at 22:14 +0000, Roberto wrote:
> Hi Joseph,
>
> I'm perfectly fine with the concepts of absolute/relative path and
> webroot, trust me.
> For me it was just unclear from the documentation the fact that the
> "target path" in the move_uploaded_file function was "absolute" with
> respect to the file system and not to the "webroot".
> At the beginning I thought the function itself was taking care about
> adding the server root on its own to that path.
> Thinking carefully, it makes perfectly sense for the function to
> behave the way it actually does, since otherwise it would be
> impossible to get these files out of the server root in file system
> terms.
> Just, this should be written in CAPITAL LETTERS in the documentation.
> Thanks for the interest,
>
> Roberto Aloi
> http://aloiroberto.wordpress.com
> Twitter: @prof3ta
>
> > When used in PHP, an absolute path does not go off the web root. In Premise
> > 3 below, an absolute path of "/upload" will NOT bring up the directory
> > "/home/prof3ta/projects/moodle/htdocs/upload" but rather simply
> > "/upload"
> > In Windows terms, an absolute path would be "C:\upload" versus
> > "C:\home\prof3ta\projects\moodle\htdocs\upload". The only time an absolute
> > path is figured relative to the web root is when it is referenced in a
> > browser. At this point, for all intents and purposes, it locates the file
> > based on the web root. This is a fundamental difference between absolute
> > and relative paths.
> >
> > Absolute: begins at "/" in Linux operating systems and "C:\" in
> > Windows OS
> > Relative: begins wherever the running script is located in the file system.
> >
> > Joseph
> >
> > Roberto wrote:
> >>
> >> HI,
> >>
> >> Premise 1:
> >> echo exec("pwd"); ->
> >> "/home/prof3ta/projects/moodle/htdocs/feedback_tool"
> >>
> >> Premise 2:
> >> I have an "upload" folder with 777 permissions under:
> >> /home/prof3ta/projects/moodle/htdocs/upload
> >>
> >> Premise 3:
> >> The server root is obviously htdocs:
> >> /home/prof3ta/projects/moodle/htdocs
> >>
> >> This said, the following doesn't work:
> >>
> >> <?php
> >> $uploads_dir = "/upload";
> >> $tmp_name = $_FILES["file"]["tmp_name"];
> >> $name = $_FILES["file"]["name"];
> >> move_uploaded_file($tmp_name, "$uploads_dir/$name");
> >> ?>
> >>
> >> The following does work:
> >>
> >> <?php
> >> $uploads_dir = "../upload";
> >> $tmp_name = $_FILES["file"]["tmp_name"];
> >> $name = $_FILES["file"]["name"];
> >> move_uploaded_file($tmp_name, "$uploads_dir/$name");
> >> ?>
> >>
> >> I consider it as a documentation bug (in the sample code they use an
> >> absolute path).
> >> I indeed believe I *should* be able to use both of them if not
> >> documented otherwise.
> >> I will dig into the C implementation of the move_uploaded_file
> >> function and I'll check, though.
> >>
> >> Cheers,
> >>
> >> Roberto Aloi
> >> http://aloiroberto.wordpress.com
> >> Twitter: @prof3ta
> >>
> >>
> >
>
I've never had any issue with the documentation for this function. I
think it might just be an issue with interpretation? :p
Thanks,
Ash
http://www.ashleysheridan.co.uk