Re: look at all files, then go elsewhere

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

 



Wolf wrote:
All,

I'm trying to figure out the logic piece, and I'm pretty sure I am
missing something simple.

I have a script that I want to check all files in a directory for
information, if it doesn't find it when all done, I want it to go
elsewhere, however if it does find it, I want it to break out of the
search and perform a function.

CODE:
if ($userinfo == "")
{
 if ($handle = opendir('./bp_csv/')) {
  while (false !== ($file = readdir($handle))) {
   if($file != '..' && $file != '.') {
    if(is_dir($file)) { //Diretory skipped
     } else {
     $command = 'cat ./bp_csv/' . $file . ' | grep '"';
     $user = $_POST[userid];
     $command .= $user . '"'';
     $userinfo=exec($command);

You'd sanitise this in real life, i hope. escapeshellarg() and escapeshellcmd() are your good friends.

curl -d "user=foo%22%3Becho+%22pwned%21" http://yourdomain/yourscript.php

And i think you have an extra single quote there at the end of both those lines.

Why aren't you simply reading into an array the contents of the file and searching for $user in that? Use file()

http://www.php.net/manual/en/function.file.php

-- snip --
while (false !== ($file = readdir($handle)))
{
  $lines = file($file);
  $idx = array_search($user, $lines)

  if ($idx !== FALSE)
  {
    $userinfo = $line;
    break;
  }
}

if ($userinfo != "")
{
  userprofile($userinfo);
}
else
{
 ...
-- snip --

Or something like that.

>     // here's where it is multi-looping
>      if ($userinfo =="")
{ echo "$user not found in any BP_CSV files, now running LDAP check<BR>";
       ldap_check($user);
     }
     else
     {
      // ok, found the person, run the function
      userprofile($userinfo);
     }
    }
   }
  }
} }
else
{
 //original data has contents, go after user data
 userprofile($userinfo);
}

--------------- END CODE

The reason your script was looping is because your second "if ($userinfo =="")" is reached for each and every file found in the directory. That is, every time you grep for $user in a file, you're re-setting $userinfo, regardless of the result. Then you're running ldap_check().

Basically, you need a break in there, at the very minimum. And your second test on $userinfo should be outside of the while loop.

Regardless, use file() instead of that exec() call. That looks as if it could have sharp edges.

brian

--
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