note 82608 deleted from control-structures.do.while by cmb
| From: | cmb@php.net | Date: | Sun, 04 Dec 2016 12:25:41 +0000 |
| Subject: | note 82608 deleted from control-structures.do.while by cmb | ||
| References: | 1 | Groups: | php.notes |
| Request: | Send a blank email to php-notes+get-208214@lists.php.net to get a copy of this message | ||
Note Submitter: Ryan
----
I've found that the most useful thing to use do-while loops for is multiple checks of file
existence. The guaranteed iteration means that it will check through at least once, which I had
trouble with using a simple "while" loop because it never incremented at the end.
My code was:
<?php
$filename = explode(".", $_FILES['file']['name']); // File being
uploaded
$i=0; // Number of times processed (number to add at the end of the filename)
do {
/* Since most files being uploaded don't end with a number,
we have to make sure that there is a number at the end
of the filename before we start simply incrementing. I
admit there is probably an easier way to do this, but this
was a quick slap-together job for a friend, and I find it
works just fine. So, the first part "if($i > 0) ..." says that
if the loop has already been run at least once, then there
is now a number at the end of the filename and we can
simply increment that. Otherwise, we have to place a
number at the end of the filename, which is where $i
comes in even handier */
if($i > 0) $filename[0]++;
else $filename[0] = $filename[0].$i;
$i++;
} while(file_exists("uploaded/".$filename[0].".".$filename[1]));
/* Now that everything is uploaded, we should move it
somewhere it can be accessed. Hence, the "uploaded"
folder. */
move_uploaded_file($_FILES['file']['tmp_name'],
"uploaded/".$filename[0].".".$filename[1]);
?>
I'm sure there are plenty of ways of doing this without using the do-while loop, but I managed
to toss this one together in no-time flat, and I'm not a great PHP programmer. =) It's
simple and effective, and I personally think it works better than any "for" or
"while" loop that I've seen that does the same thing.