By using this site, you agree to our updated Privacy Policy and our Terms of Use. Manage your Cookies Settings.
435,454 Members | 3,103 Online
Bytes IT Community
+ Ask a Question
Need help? Post your question and get tips & solutions from a community of 435,454 IT Pros & Developers. It's quick & easy.

Help debugging Flat File Picture Gallery

P: n/a
I have compiled some code, some written by me, some compiled from
various sources online, and basically i've got a very simple flat file
photo gallery. An upload form, to upload the photos and give them a
caption, storing the caption and filename in a text file. It's a bit
buggy when removing the photos and captions from the file, and also in
displaying them on the delete page. you can see it in action at
www.4am.com.au/gallery/upload.php - read.php - delete.php.
You can download the source at www.patoncreative.com.au/gallery.zip, and
I have posted it here below... i would appreciate some help in debugging
it.. i'm not the best with the 'foolproofing' of it before putting it
into use.
UPLOAD.PHP######################################## #

<form action="upload.php" method="post" enctype="multipart/form-data">
Select a Photo to Upload:<br>
<input type="file" name="filetoupload" size='50' class='form'><br><br>
Enter Photo Caption:<br>
<input type="text" name="caption" size='50' class='form'><br>
<input type="hidden" name="MAX_FILE_SIZE" value="<?echo $size_bytes; ?>">
<br>
<input type="Submit" value="Upload File" class='form'>
</form>

<br><br>

<?php

/* Description -----------------------------------------------------
The Super Global Variable $_FILES is used in PHP 4.x.x.
$_FILES['upload']['size'] ==> Get the Size of the File in Bytes.
$_FILES['upload']['tmp_name'] ==> Returns the Temporary Name of the File.
$_FILES['upload']['name'] ==> Returns the Actual Name of the File.
$_FILES['upload']['type'] ==> Returns the Type of the File.

So if I filetoupload the file 'test.doc', the $_FILES['upload']['name']
would be 'phptut.doc' and $_FILES['upload']['type'] would be
'application/msword'.
---------------------------------------------------------------------*/
// this is the upload dir where files will go.
//Don't remove the /
//Chmod it (777)
$upload_dir = "../gallery/images/"; //change to whatever you want.
$captionFile = "captions";

// files less than 1MB
$size_bytes = 1048576; //bytes will be uploaded

//check if the directory exist or not.
if (!is_dir("$upload_dir")) {
die ("The directory <b>($upload_dir)</b> doesn't exist");
}

//check if the directory is writable.
if (!is_writeable("$upload_dir")){
die ("The directory <b>($upload_dir)</b> is NOT writable,
Please Chmod (777)");
}

//Check first if a file has been selected
//is_filetoupload_file('filename') returns true if
//a file was filetoupload via HTTP POST. Returns false otherwise.
if (is_uploaded_file($_FILES['filetoupload']['tmp_name']))
{

//Get the Size of the File
$size = $_FILES['filetoupload']['size'];
//Make sure that $size is less than 1MB (1000000 bytes)
if ($size > $size_bytes)
{
echo "<b>Error!</b><br>";
echo "File Too Large. Please try again.";
exit();

}
// $filename will hold the value of the file name submitted from the form.
// $caption holds the value of the caption for the photo that the user
has written on the form.
$filename = $_FILES['filetoupload']['name'];
$caption = $HTTP_POST_VARS['caption'];

// Check if file is Already EXISTS.
if(file_exists($upload_dir.$filename)){
echo "<b>Error!</b><br>";
echo "File <b>$filename </b>already exists";
exit();
}

//Move the File to the Directory of your choice
//move_filetoupload_file('filename','destination') Moves an filetoupload
file to a new location.
if
(move_uploaded_file($_FILES['filetoupload']['tmp_name'],$upload_dir.$filename))
{

//tell the user that the file has been uploaded
echo "<b>Upload Complete!</b><br>";
echo "File: <a href='$upload_dir$filename'>$filename</a><br>";
echo "Caption: $caption <br>";

// Open captions file in Append mode

$imageFile = $filename;
$captionText = $caption;
// Set the string to be written to the file
$values = "$imageFile|$caption\r\n";

// Open the file for truncated writing
$fp = @fopen("$captionFile", "a") or die("Couldn't open data file for
writing!");
$numBytes = @fwrite($fp, $values) or die("Couldn't write values to file!");

@fclose($fp);
// echo "Wrote $numBytes bytes to data file successfully!";
exit();

}
else
{
//Print error
echo "<b>Error!</b><br>";
echo "There was a problem moving your file<br>";
echo "Please check the filename and try again.<br>";
exit();

}
}

?>

READ.PHP########################################## ######

<?
$data = file('captions');

foreach ($data as $line) {
list ($q, $a) = explode('|' , trim($line) );

echo "<img src='images/$q' height=100><br>";
echo "$a<br>";
}

?>
DELETE.PHP######################################## #####

<?

$file = "captions";

// Generate some test data
if (!file_exists($file)) {
$count = 0;
$fp = fopen($file, "w+");
while (++$count < 20) {
fputs($fp, time() . "$count\n");
}
fclose($fp);
}

// Delete function; works both ways
// to increase speed
function delete (&$f, $line) {
global $file;
$match_a = false;
$match_b = false;
for ($n = count($f), $a = 0, $b = $n - 1;
$a < $n && $b >= 0 && !$match_a && !$match_b;
$a++, $b--) {
$match_a = $f[$a] == $line;
$match_b = $f[$b] == $line;

if ($match_a) {
unset($f[$a]);
} else if ($match_b) {
unset($f[$b]);
}
}

// Update the file contents
$fp = fopen($file, "w+");
$fString = implode("\r\n", $f);

fputs($fp, $fString, strlen($fString));

// extract the image filename from the data file line string
list ($q, $a) = explode('|' , trim($line) );

// append images directory to filename - not sure of a way to do this
with a global variable.
$filetoerase = "images/$q";

// erase file or print error
if (! unlink ($filetoerase))
{
echo "Error deleting file <b>$q</b><br>";
}

else
{
echo ("File <b> $q </b>removed successfully.<br>");
}

fclose($fp);

// Get the contents of the updated file
$f = explode("\r\n", file_get_contents($file));
}
$f = explode("\r\n", file_get_contents($file));

if (isset($_REQUEST['delete']))
{
delete($f, $_REQUEST['line']);

// echo "Data file line deleted successfully<br>";
}

else
{
echo "Please select a file to delete:";
}
?>
<form action="<?= $_SERVER['PHP_SELF'] ?>">
<?

$data = file($file);

foreach ($f as $o)
{
print "<input type=radio name=line value=$o>";
$g = $o;
list ($q, $a) = explode('|' , trim($g) );
echo "<img src='images/$q' height=100><br>";

}

?>

<input type="submit" name="delete" value="delete" />
<input type="reset" name="reset" value="cancel selection" />

</form>
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$$$$$$$
I also have a settings.inc file that I wanted to hold all variables in,
for use across each of the pages, but have been unsucsessful in doing
so.. do I need to declare the variables in it in a special way???

SETTINGS.INC###################################### #######

<?php

// Settings for Image Gallery:

// This is the database file that fill store your filenames and image
captions
$file = "captions";

// This is the directory you wish to store your photos in
$upload_dir = "../gallery/images/";

// Because the script is fussy, this is the directory above the base
which this script is in.
$images_dir = "images/";

// Photo Maximum Filesize
$size_bytes = 1048576;

?>
$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$$ $$$$

All help appreciated.
Thanks
Matt
Jul 17 '05 #1
Share this Question
Share on Google+
2 Replies


P: n/a
On Thu, 13 Jan 2005 20:58:36 +1000, matt wrote:
I have posted it here below... i would appreciate some help in debugging
it.. i'm not the best with the 'foolproofing' of it before putting it
into use.


Not likely. Much too broad a question.

--
Jeffrey D. Silverman | je**********@jhu.edu
Website | http://www.newtnotes.com

Drop "PANTS" to reply by email

Jul 17 '05 #2

P: n/a
In the following script, When i delete all lines from the data text
file, it displays as a broken image at the end, when there's nothing
left in the file (except possibly a line break) it displays that as a
broken image.... Is there any way of stopping this from happening?

DELETE.PHP######################################## #####

<?

$file = "captions";

// Generate some test data
if (!file_exists($file)) {
$count = 0;
$fp = fopen($file, "w+");
while (++$count < 20) {
fputs($fp, time() . "$count\n");
}
fclose($fp);
}

// Delete function; works both ways
// to increase speed
function delete (&$f, $line) {
global $file;
$match_a = false;
$match_b = false;
for ($n = count($f), $a = 0, $b = $n - 1;
$a < $n && $b >= 0 && !$match_a && !$match_b;
$a++, $b--) {
$match_a = $f[$a] == $line;
$match_b = $f[$b] == $line;

if ($match_a) {
unset($f[$a]);
} else if ($match_b) {
unset($f[$b]);
}
}

// Update the file contents
$fp = fopen($file, "w+");
$fString = implode("\r\n", $f);

fputs($fp, $fString, strlen($fString));

// extract the image filename from the data file line string
list ($q, $a) = explode('|' , trim($line) );

// append images directory to filename - not sure of a way to do
this with a global variable.
$filetoerase = "images/$q";

// erase file or print error
if (! unlink ($filetoerase))
{
echo "Error deleting file <b>$q</b><br>";
}

else
{
echo ("File <b> $q </b>removed successfully.<br>");
}

fclose($fp);

// Get the contents of the updated file
$f = explode("\r\n", file_get_contents($file));
}
$f = explode("\r\n", file_get_contents($file));

if (isset($_REQUEST['delete']))
{
delete($f, $_REQUEST['line']);

// echo "Data file line deleted successfully<br>";
}

else
{
echo "Please select a file to delete:";
}
?>
<form action="<?= $_SERVER['PHP_SELF'] ?>">
<?

$data = file($file);

foreach ($f as $o)
{
print "<input type=radio name=line value=$o>";
$g = $o;
list ($q, $a) = explode('|' , trim($g) );
echo "<img src='images/$q' height=100><br>";

}

?>

<input type="submit" name="delete" value="delete" />
<input type="reset" name="reset" value="cancel selection" />

</form>
All help appreciated.
Thanks
Matt

Jul 17 '05 #3

This discussion thread is closed

Replies have been disabled for this discussion.