the.php.script
Honestly, you
don't need PHP to upload a file using a form, BUT you can't control
where it's saving the files. So can you guess what the PHP does? It
moves the file to where you want it on the server.
Your code
will basically look something like this: (example file
upload.php)
<?
// name of the directory that your uploads will be kept in
$dirname = "files";
// the path that the uploads directory will be placed in
// the full path of something like: http://www.codephobia.com/test/
define(PATH, "/usr/local/etc/httpd/htdocs/test/");
// gets just the file name and extension from the file input
// in the form
$filename = $myfile_name;
// check if they actually placed something in the file input
if ($filename != "") {
// check if the directory exists
// if it doesnt exist, make the directory
if (!$dir = @opendir(PATH.$dirname))
// make the directory (sets chmod to 700)
mkdir(PATH.$dirname, 0700) or die("<b>Error:</b> could not make directory.");
// copy the file from the temporary upload position to where you want it
copy($myfile, PATH.$dirname."/".$filename) or die("<b>Error:</b> could not copy file.");
// delete the temporary uploaded file
unlink($myfile) or die("<b>Error:</b> could not delete uploaded file.");
// tell them it worked
echo "File uploaded successfully."; }
else {
// tell them to browse for a file
echo "You must select a file to upload."; }
?>
Let's go over this a
little more closely. The following code, simply put, will be the
name of the folder the file ends up in. This could be a users
profile folder or where you store images from a news script. This
folder will be '/files/'. You can change this to whatever you
like. We'll call this the destination folder.
// name of the directory that your uploads will be kept in $dirname = "files";
Next, we have the full path
to where the destination folder is to be created. We'll call
this the destination path. Be sure to change this so that is
works with your server. You should be able to find a path in any FTP
program.
// the path that the uploads directory will be placed in // the full path of something like: http://www.codephobia.com/test/ define(PATH, "/usr/local/etc/httpd/htdocs/test/");
That takes care of where we are
putting the file. Now we need to get some info on the file itself,
so now we get the name and file extension.
// gets just the file name and extension from the file input // in the form $filename = $myfile_name;
If you uploaded the file 'c:\images\big_image.jpg', $filename would be
'big_image.jpg'. When we upload this
file, it puts it in a temporary directory on the server. When we
copy this temp file to the desired destination folder, we
also need to give the file a name. In this case we'll just keep the
original file name, so we need to get it. $myfile was the file input
from the form in the html. The PHP generates a variable
automatically, and $myfile_name now returns the name of that
file.
Of course we don't want to try to move a file if
they didn't select one in the form. So we use this code to check if
they did or not.
// check if they actually placed something in the file input if ($filename != "") { // selected a
file ... ... } else { // tell them to browse for a file echo "You must select a file to upload."; }
Of
course, the code above is missing the code in the IF-ELSE statment.
If the file did infact exist, it would do the first group of
commands. This is where we would create the destination
folder, copy the temp file to the destination folder,
delete the temp file, and tell the user that it all worked great. It
should look something like this:
You first make sure the
destination folder exists:
// check if the directory exists // if it doesnt exist, make the directory if (!$dir = @opendir(PATH.$dirname)) // make the directory (sets chmod to 700) mkdir(PATH.$dirname, 0700) or die("<b>Error:</b> could not make directory.");
The script checks to see if
your destination folder has aready been created. If it
hasn't, it makes it. If it can't create the folder, it outputs an
error. If this happens you probably just need to chmod the
destination path so you can create the folder. The new folder
will be chmod'd to 700.
Now that we have somewhere to put the
file, let's copy it there.
// copy the file from the temporary upload position to where you want it copy($myfile, PATH.$dirname."/".$filename) or die("<b>Error:</b> could not copy file.");
Simple. Just copies the file
from the temp spot to your destination folder. If it doesn't
work, you'll get a nice error telling you.
If everything is
going good so far, you wont need that ugly temp file anymore. Let's
delete it!
// delete the temporary uploaded file unlink($myfile) or die("<b>Error:</b> could not delete uploaded file.");
This 'should' work, but if you
don't have permission to delete it, you'll get an error. If
everything worked great, you get the following message, and the
script is done.
// tell them it worked echo "File uploaded successfully.";
|