is_file() returns false for uploaded files?

Collapse
This topic is closed.
X
X
 
  • Time
  • Show
Clear All
new posts
  • Kimmo Laine

    #1

    is_file() returns false for uploaded files?

    Running IIS 6 on Windows 2003 server.

    After an update to the most recent version of php 5.1.2, for some reacon
    a function handling uploaded files using is_file stopped working. is_file
    failed for existing files. I fixed it by changing is_file to
    file_exists, then it worked again. Prior to the update, in the older
    version, presumably it was 5.0.1, is_file worked just fine without
    problems.

    <?php
    echo 'is_file:' . (is_file($_FILE S['myfile']['tmp_name']) ? 'true' :
    'false');
    echo 'file_exists:' . (file_exists($_ FILES['myfile']['tmp_name']) ? 'true' :
    'false');
    ?>

    <form action="<?php echo $_SERVER['PHP_SELF'] ?>"
    enctype="multip art/form-data" method="post">
    <input type="file" name="myfile" />
    <input type="submit" />
    </form>

    Submitted a bug report already http://bugs.php.net/bug.php?id=37118 but if
    someone has any ideas what's going on here please reply.

    --
    "ohjelmoija on organismi joka muuttaa kofeiinia koodiksi" -lpk
    spam@outolempi. net | Gedoon-S @ IRCnet | rot13(xvzzb@bhg byrzcv.arg)


  • Andy Jeffries

    #2
    Re: is_file() returns false for uploaded files?

    On Tue, 18 Apr 2006 12:54:08 +0300, Kimmo Laine wrote:[color=blue]
    > Running IIS 6 on Windows 2003 server.
    >
    > After an update to the most recent version of php 5.1.2, for some reacon a
    > function handling uploaded files using is_file stopped working. is_file
    > failed for existing files. I fixed it by changing is_file to file_exists,
    > then it worked again. Prior to the update, in the older version,
    > presumably it was 5.0.1, is_file worked just fine without problems.
    >
    > <?php
    > echo 'is_file:' . (is_file($_FILE S['myfile']['tmp_name']) ? 'true' :
    > 'false');
    > echo 'file_exists:' . (file_exists($_ FILES['myfile']['tmp_name']) ? 'true'
    > : 'false');
    > ?>[/color]

    For this use, shouldn't you be using is_uploaded_fil e anyway?

    Cheers,


    Andy


    --
    Andy Jeffries MBCS CITP ZCE | gPHPEdit Lead Developer
    http://www.gphpedit.org | PHP editor for Gnome 2
    http://www.andyjeffries.co.uk | Personal site and photos

    Comment

    • Kimmo Laine

      #3
      Re: is_file() returns false for uploaded files?

      "Andy Jeffries" <news@andyjeffr ies.co.uk> wrote in message
      news:pan.2006.0 4.18.11.54.20.7 16987@andyjeffr ies.co.uk...[color=blue]
      > On Tue, 18 Apr 2006 12:54:08 +0300, Kimmo Laine wrote:[color=green]
      >> Running IIS 6 on Windows 2003 server.
      >>
      >> After an update to the most recent version of php 5.1.2, for some reacon
      >> a
      >> function handling uploaded files using is_file stopped working. is_file
      >> failed for existing files. I fixed it by changing is_file to file_exists,
      >> then it worked again. Prior to the update, in the older version,
      >> presumably it was 5.0.1, is_file worked just fine without problems.
      >>
      >> <?php
      >> echo 'is_file:' . (is_file($_FILE S['myfile']['tmp_name']) ? 'true' :
      >> 'false');
      >> echo 'file_exists:' . (file_exists($_ FILES['myfile']['tmp_name']) ?
      >> 'true'
      >> : 'false');
      >> ?>[/color]
      >
      > For this use, shouldn't you be using is_uploaded_fil e anyway?
      >[/color]

      Possibly so, but that does not remove the bug. It's a piece of code I've
      done some years ago that has worked fine even though a it's not perfect.
      Still I'd like to be able to get similar results with is_file and
      file_exists regardless of the file being user upload or not.

      If this is not a bug but a feature, I'd like to see it explained in the
      manual just what it means. ATM, it says in the manual: "is_file -- Tells
      whether the filename is a regular file". So, what IS a regular file? What's
      the difference between file_exists and is_file because they return different
      results. I don't get it. And what bothers me the most is that up to this
      point is_file has returned true. Why change it?

      --
      "ohjelmoija on organismi joka muuttaa kofeiinia koodiksi" -lpk
      spam@outolempi. net | Gedoon-S @ IRCnet | rot13(xvzzb@bhg byrzcv.arg)


      Comment

      • milahu

        #4
        Re: is_file() returns false for uploaded files?

        The uploaded file is stored in a temporary folder outside your usual
        PHP `filesystem'.
        IIS seems to deny direct access to this folder, so you have to stick to
        PHP's special functions for handling file uploads.

        is_file() checks for regular files and returns false on directories or
        symlinks, while file_exists() returns true, if the file, link or
        directory exists.

        Comment

        • Kimmo Laine

          #5
          Re: is_file() returns false for uploaded files?

          "milahu" <milahu@googlem ail.com> wrote in message
          news:1145365711 .177670.64360@u 72g2000cwu.goog legroups.com...[color=blue]
          > The uploaded file is stored in a temporary folder outside your usual
          > PHP `filesystem'.
          > IIS seems to deny direct access to this folder, so you have to stick to
          > PHP's special functions for handling file uploads.
          >[/color]

          So now copy() is a special function? I use just copy to handle uploaded
          files, in that particular script. I could fix it to use move_uploaded_f iles
          but it works now. "If it works don't fix it." And IIS does not deny access
          to it as I can access it with copy. I don't have to use
          move_uploaded_f iles() if that is what you mean by special function.
          [color=blue]
          > is_file() checks for regular files and returns false on directories or
          > symlinks, while file_exists() returns true, if the file, link or
          > directory exists.[/color]

          But an uploaded file is neither a symlink (windows filesystem has no
          symlinks) nor a directory, it's just a normal file. Now what exactly is the
          determination of a "regular file", if the uploaded file is not one?

          --
          "ohjelmoija on organismi joka muuttaa kofeiinia koodiksi" -lpk
          spam@outolempi. net | Gedoon-S @ IRCnet | rot13(xvzzb@bhg byrzcv.arg)


          Comment

          • milahu

            #6
            Re: is_file() returns false for uploaded files?

            > So now copy() is a special function?
            Yes, it's holy for usual files, but not for uploaded ones. Why do you
            just dislike move_uploaded_f ile() that much? PHP is not always as
            logical as one would like it to be...
            [color=blue]
            > But an uploaded file is neither a symlink [...][/color]
            Already tested with is_link()? Win / NTFS doesn't support symlinks, so
            I guess Apache emulates 'em.

            Comment

            • Kimmo Laine

              #7
              Re: is_file() returns false for uploaded files?

              "milahu" <milahu@googlem ail.com> wrote in message
              news:1145531261 .880053.317800@ i40g2000cwc.goo glegroups.com.. .[color=blue][color=green]
              >> So now copy() is a special function?[/color]
              > Yes, it's holy for usual files, but not for uploaded ones. Why do you
              > just dislike move_uploaded_f ile() that much? PHP is not always as
              > logical as one would like it to be...[/color]

              Nothing. move_uploaded_f iles and copy are not the issue here, both work just
              fine. The problem is that is_file does not recognize an uploaded file as a
              file, while file_exists does and I'd like to know why.
              [color=blue][color=green]
              >> But an uploaded file is neither a symlink [...][/color]
              > Already tested with is_link()? Win / NTFS doesn't support symlinks, so
              > I guess Apache emulates 'em.[/color]

              Nothing to do with Apache either, using IIS 6 as I already said in my first
              post.

              --
              "ohjelmoija on organismi joka muuttaa kofeiinia koodiksi" -lpk
              spam@outolempi. net | Gedoon-S @ IRCnet | rot13(xvzzb@bhg byrzcv.arg)


              Comment

              Working...