Jump to content

file_exists function issue


Outlawpd

Recommended Posts

Good Day all,

I have an issue where I can't seem to get pictures displayed properly from a particular directory when using file_exist function.

First let me explain a little bit about what I am trying to do.

I have users upload pictures using a form, then pictures are stored under that particular users #id folder/directory, for example: 89099887/whatever.jpg. The picture is not renamed, it keeps its original name.

Now each user is categorized, so for example when clicked on Miami, it will display a list of all users who are under that category. It should display the thumbnail picture and users name right under, in that order for each user. See below:

USER #1 PICTURE
USER #1 NAME

USER #2 PICTURE
USER #2 NAME

USER #3 PICTURE
USER #3 NAME

Here is my code:
[code]<?php
$result = mysql_query("SELECT clients_name, id FROM clients_info WHERE city='$city' AND $category='x'group by clients_name");
while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
  $filename="/data/11/0/77/86/729738/user/744719/htdocs/bella/admin/client_pics/$row[1]/";
  if (file_exists($filename))
  {
    $dir = "/data/11/0/77/86/729738/user/744719/htdocs/bella/admin/client_pics/$row[1]/";
    $dh  = opendir($dir);
    while (false !== ($filename = readdir($dh)))
    {
      $files[]=$filename;
       //echo "filename: $filename : filetype: " . filetype($dir . $filename) . "\n";
    }
     print "<TR><TD><img src=/bella/admin/client_pics/$row[1]/$files[2]></TD></TR>";
  }
  else {
      echo "This client has no pictures";
  }


  print("<TR><TD><center>");
/*    <img src=/phpThumb/phpThumb.php?src=/bella/admin/client_pics/$row[1]/$files[2]&w=100></br> */
    print ("<a href=view_profile.php?id=$row[1] target=frame3>$row[0]</a></br></TD></TR>");

}
clearstatcache ();
mysql_free_result($result);
?>[/code]

Now the above code works partially, it displayes the very first pictures called janedoe.jpg. Then it tries to look for exact same picture in other users directory. Of course it does not find it and it returns broken image. See below:

USER #1 PICTURE <- OK
USER #1 NAME

USER #2 PICTURE <- BROKEN IMAGE
USER #2 NAME

USER #3 PICTURE <- BROKEN IMAGE
USER #3 NAME

Any ideas? I hope you understand what I am trying to do, if you can help me I would appeciate it very much.
Link to comment
Share on other sites

I have a dedicated box and a shared box, they obviously have difference security permissions.  I write my stuff on a Windows box so either way it's all screwed up by the time I get to post it on a production box.  The only reason I mention this is that when I use file_exists() I try to locate it using the base path to the file which works fine on my local/dedicated box (c:/apache/htdocs/etc/ or /etc/usr/web) but on my shared box those don't work because of (not exactly sure) a base path set in the php.ini so I have to do it virtually using the url to check (http://www.url.com/image.jpg).  I know that's long winded and I could have said it in 1 sentence but I'm enjoying the typing right now =)
Link to comment
Share on other sites

Thanks. I see what you are saying, but doesn't file_exists function scan the folder for any files? If there are files then it returns TRUE, if not then FALSE.

This would be a bit easier if I knew the name of the file which I could do by renaming the file on the upload. But that is whole another thing.

I believe that the problem is in the loop. It does show me the first image (xxx1.jpg) but then the second and third fail because it is still looking for xxx1.jpg in other directories. I gues some kind of reset for an array, to clear it so that it pulls correct pic at the begining of each loop. Any ideas?
Link to comment
Share on other sites

No, file_exists () will only test the param passed to it, it does not scan a directory. So if you give a path + file name, it will check to see if it is there, if it is it returns TRUE, if it's not there, it returns FALSE, if TRUE the result is cached!


me!
Link to comment
Share on other sites

How about this :

[code]
<?php
$result = mysql_query("SELECT clients_name, id FROM clients_info WHERE city='$city' AND $category='x'group by clients_name");
while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
  $filename="/data/11/0/77/86/729738/user/744719/htdocs/bella/admin/client_pics/$row[1]/";
  if (file_exists($filename))
  {
    $dir = "/data/11/0/77/86/729738/user/744719/htdocs/bella/admin/client_pics/$row[1]/";
    $dh  = opendir($dir);
    while (false !== ($filename = readdir($dh)))
    {
      $files[]=$filename;
      //echo "filename: $filename : filetype: " . filetype($dir . $filename) . "\n";
    }



    $PictNum = rand(2, count($files)); // choose random picture



    print "<TR><TD><img src=/bella/admin/client_pics/$row[1]/$files[$PictNum]></TD></TR>";
  }
  else {
      echo "This client has no pictures";
  }


  print("<TR><TD><center>");
/*    <img src=/phpThumb/phpThumb.php?src=/bella/admin/client_pics/$row[1]/$files[2]&w=100></br> */
    print ("<a href=view_profile.php?id=$row[1] target=frame3>$row[0]</a></br></TD></TR>");



unset($files); // Clear previous users pictures



}
clearstatcache ();
mysql_free_result($result);
?>[/code]


Your wer not clearing previous users pics
Link to comment
Share on other sites

You also need to change the way you test for existing pictures:

[code]
<?php
$result = mysql_query("SELECT clients_name, id FROM clients_info WHERE city='$city' AND $category='x'group by clients_name");
while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
  $filename="/data/11/0/77/86/729738/user/744719/htdocs/bella/admin/client_pics/$row[1]/";
  if (file_exists($filename))
  {
    $dir = "/data/11/0/77/86/729738/user/744719/htdocs/bella/admin/client_pics/$row[1]/";
    $dh  = opendir($dir);
    while (false !== ($filename = readdir($dh)))
    {
      $files[]=$filename;
      //echo "filename: $filename : filetype: " . filetype($dir . $filename) . "\n";
    }



  $PicCount = count($files); // Count number of files found
  }
if ($PicCount >2)// this is how you know there are pics and not just directories
  {
    $PictNum = rand(2, $PicCount); // choose random picture



    print "<TR><TD><img src=/bella/admin/client_pics/$row[1]/$files[$PictNum]></TD></TR>";
  }
  else {
      echo "This client has no pictures";
  }


  print("<TR><TD><center>");
/*    <img src=/phpThumb/phpThumb.php?src=/bella/admin/client_pics/$row[1]/$files[2]&w=100></br> */
    print ("<a href=view_profile.php?id=$row[1] target=frame3>$row[0]</a></br></TD></TR>");
unset($files); // Clear previous users pictures
}
clearstatcache ();
mysql_free_result($result);
?>
[/code]
Link to comment
Share on other sites

Thanks a lot to everyone for their help. UNSET is what I was looking for all this time.

Firemankurt, I modifed script according to your comments. It works, however, sometimes it will display one, two, or even three broken images, then again it may display all of them correctly? It might have something to do with random image selection.

When I right click on one of the broken images I see the following:

http://mywebsite.com/bella/admin/client_pics/84/    <-- notice missing pic info

Any ideas?
Link to comment
Share on other sites

You could echo some variables to help find the problem:
[code]...
print "<TR><TD><img src=/bella/admin/client_pics/$row[1]/$files[$PictNum]><br/>/bella/admin/client_pics/$row[1]/$files[$PictNum]</TD></TR>";
...[/code]

Might also want to check substring of $filename to see if it ends in ".jpg" or ".gif" before you actually print it.

[code]...
{
    $Exten = substr($filename, -3);
    if ($Exten=="jpg" || $Exten=="gif") $files[]=$filename;
      //echo "filename: $filename : filetype: " . filetype($dir . $filename) . "\n";
    }
...[/code]
Link to comment
Share on other sites

I added troubleshooting code as you suggested. As you can see below, the first two pics I can see the path to the file and filename. The third one however, is missing the filename, yet I can't figure out why.

b/admin/client_pics/84/athena2.gif

/b/admin/client_pics/82/angie1.gif

/b/admin/client_pics/85/

This is my latest code:
[code]<?php
$result = mysql_query("SELECT clients_name, id FROM clients_info WHERE city='$city' AND $category='x'group by clients_name");
while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
  $filename="/data/11/0/77/86/729738/user/744719/htdocs/b/admin/client_pics/$row[1]/";
  if (file_exists($filename))
  {
    $dir = "/data/11/0/77/86/729738/user/744719/htdocs/b/admin/client_pics/$row[1]/";
    $dh  = opendir($dir);
    while (false !== ($filename = readdir($dh)))
    {
      $files[]=$filename;
    $Exten = substr($filename, -3);
    if ($Exten=="jpg" || $Exten=="gif") $files[]=$filename;
      //echo "filename: $filename : filetype: " . filetype($dir . $filename) . "\n";
    }
  $PicCount = count($files); // Count number of files found
  }
if ($PicCount >2)// this is how you know there are pics and not just directories
  {
    $PictNum = rand(2, $PicCount); // choose random picture

    print "<TR><TD><img src=/phpThumb/phpThumb.php?src=/b/admin/client_pics/$row[1]/$files[$PictNum]&w=100>/b/admin/client_pics/$row[1]/$files[$PictNum]</TD></TR>";
  }
  else {
      echo "This client has no pictures";
  }


  print("<TR><TD><center>");
/*    <img src=/phpThumb/phpThumb.php?src=/b/admin/client_pics/$row[1]/$files[2]&w=100></br> */
    print ("<a href=view_profile.php?id=$row[1] target=frame3>$row[0]</a></br></TD></TR>");
unset($files); // Clear previous users pictures
}
mysql_free_result($result);
?>[/code]
Link to comment
Share on other sites

[code]
<?php
$result = mysql_query("SELECT clients_name, id FROM clients_info WHERE city='$city' AND $category='x'group by clients_name");
while ($row = mysql_fetch_array($result, MYSQL_NUM))
{
  $filename="/data/11/0/77/86/729738/user/744719/htdocs/b/admin/client_pics/$row[1]/";
  if (file_exists($filename))
  {
    $dir = "/data/11/0/77/86/729738/user/744719/htdocs/b/admin/client_pics/$row[1]/";
    $dh  = opendir($dir);
    while (false !== ($filename = readdir($dh)))
    {



//      $files[]=$filename;  ---- Remove this ----



    $Exten = substr($filename, -3);
    if ($Exten=="jpg" || $Exten=="gif") $files[]=$filename;
      //echo "filename: $filename : filetype: " . filetype($dir . $filename) . "\n";
    }
  $PicCount = count($files); // Count number of files found
  }
if ($PicCount >2)// this is how you know there are pics and not just directories
  {
    $PictNum = rand(2, $PicCount); // choose random picture

    print "<TR><TD><img src=/phpThumb/phpThumb.php?src=/b/admin/client_pics/$row[1]/$files[$PictNum]&w=100>/b/admin/client_pics/$row[1]/$files[$PictNum]</TD></TR>";
  }
  else {
      echo "This client has no pictures";
  }
[/code]
Link to comment
Share on other sites

This thread is more than a year old. Please don't revive it unless you have something important to add.

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Restore formatting

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.