cnorris Posted April 20, 2009 Share Posted April 20, 2009 Hi, I think I have a simple problem but being new to php, I need a little help. I got this code off the net the other day which will allow the user to upload a picture my a folder I have on our webserver. This php consist of two files. One is a upload_form and the other is a upload_processor. When i went to test this, I got an error "insufficient permissions" and I followed up with the hosting company to see if it was a permissions issue on there end. They stated: I believe problem he describes is in my upload_processor file. But I dont knwo what I need to change to eliminate the "temp" folder as he describes and just upload it to the folder that it needs to go to "upload_files". Can someone help me here? 1.) Upload Form <?php // filename: upload.form.php // first let's set some variables // make a note of the current working directory relative to root. $directory_self = str_replace(basename($_SERVER['PHP_SELF']), '', $_SERVER['PHP_SELF']); // make a note of the location of the upload handler $uploadHandler = 'http://' . $_SERVER['HTTP_HOST'] . $directory_self . 'upload.processor.php'; // set a max file size for the html upload form $max_file_size = 10450000; // size in bytes // now echo the html page ?><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html lang="en"> <head> <meta http-equiv="content-type" content="text/html; charset=iso-8859-1"> <link rel="stylesheet" type="text/css" href="stylesheet.css"> <title>Upload form</title> </head> <body> <form id="Upload" action="<?php echo $uploadHandler ?>" enctype="multipart/form-data" method="post"> <h1> Upload form </h1> <p> <input type="hidden" name="MAX_FILE_SIZE" value="<?php echo $max_file_size ?>"> </p> <p> <label for="file">File to upload:</label> <input id="file" type="file" name="file"> </p> <p> <label for="submit">Press to...</label> <input id="submit" type="submit" name="submit" value="Upload me!"> </p> </form> </body> </html> 2.) Upload_processor <?php // filename: upload.processor.php // first let's set some variables // make a note of the current working directory, relative to root. $directory_self = str_replace(basename($_SERVER['PHP_SELF']), '', $_SERVER['PHP_SELF']); // make a note of the directory that will recieve the uploaded files $uploadsDirectory = $_SERVER['DOCUMENT_ROOT'] . $directory_self . 'uploaded_files/'; // make a note of the location of the upload form in case we need it $uploadForm = 'http://' . $_SERVER['HTTP_HOST'] . $directory_self . 'upload.form.php'; // make a note of the location of the success page $uploadSuccess = 'http://' . $_SERVER['HTTP_HOST'] . $directory_self . 'upload.success.php'; // name of the fieldname used for the file in the HTML form $fieldname = 'file'; // Now let's deal with the upload // possible PHP upload errors $errors = array(1 => 'php.ini max file size exceeded', 2 => 'html form max file size exceeded', 3 => 'file upload was only partial', 4 => 'no file was attached'); // check the upload form was actually submitted else print form isset($_POST['submit']) or error('the upload form is neaded', $uploadForm); // check for standard uploading errors ($_FILES[$fieldname]['error'] == 0) or error($errors[$_FILES[$fieldname]['error']], $uploadForm); // check that the file we are working on really was an HTTP upload @is_uploaded_file($_FILES[$fieldname]['tmp_name']) or error('not an HTTP upload', $uploadForm); // validation... since this is an image upload script we // should run a check to make sure the upload is an image @getimagesize($_FILES[$fieldname]['tmp_name']) or error('only image uploads are allowed', $uploadForm); // make a unique filename for the uploaded file and check it is // not taken... if it is keep trying until we find a vacant one $now = time(); while(file_exists($uploadFilename = $uploadsDirectory.$now.'-'.$_FILES[$fieldname]['name'])) { $now++; } // now let's move the file to its final and allocate it with the new filename @move_uploaded_file($_FILES[$fieldname]['tmp_name'], $uploadFilename) or error('receiving directory insufficient permission', $uploadForm); // If you got this far, everything has worked and the file has been successfully saved. // We are now going to redirect the client to the success page. header('Location: ' . $uploadSuccess); // make an error handler which will be used if the upload fails function error($error, $location, $seconds = 5) { header("Refresh: $seconds; URL=\"$location\""); echo '<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"'."\n". '"http://www.w3.org/TR/html4/strict.dtd">'."\n\n". '<html lang="en">'."\n". ' <head>'."\n". ' <meta http-equiv="content-type" content="text/html; charset=iso-8859-1">'."\n\n". ' <link rel="stylesheet" type="text/css" href="stylesheet.css">'."\n\n". ' <title>Upload error</title>'."\n\n". ' </head>'."\n\n". ' <body>'."\n\n". ' <div id="Upload">'."\n\n". ' <h1>Upload failure</h1>'."\n\n". ' <p>An error has occured: '."\n\n". ' <span class="red">' . $error . '...</span>'."\n\n". ' The upload form is reloading</p>'."\n\n". ' </div>'."\n\n". '</html>'; exit; } // end error handler ?> Link to comment https://forums.phpfreaks.com/topic/154890-upload-processor-problem/ Share on other sites More sharing options...
soak Posted April 20, 2009 Share Posted April 20, 2009 Looks as though all you need to change is the value of the $uploadsDirectory variable. Where is your uploads folder in relation to the script? Link to comment https://forums.phpfreaks.com/topic/154890-upload-processor-problem/#findComment-814700 Share on other sites More sharing options...
cnorris Posted April 20, 2009 Author Share Posted April 20, 2009 Looks as though all you need to change is the value of the $uploadsDirectory variable. Where is your uploads folder in relation to the script? Okay, in my root folder, I have a folder called upload_files(where I was hoping all the files would go to). The upload form, and upload_processor scripts are on the Root level (not in folders). I appreciate your response but can you give me some insight to what exactly i should do? Link to comment https://forums.phpfreaks.com/topic/154890-upload-processor-problem/#findComment-814748 Share on other sites More sharing options...
soak Posted April 20, 2009 Share Posted April 20, 2009 Try renaming this line to: $uploadsDirectory = $_SERVER['DOCUMENT_ROOT'] . $directory_self . 'upload_files/'; And ensure that permissions are set to 777 for the folder (you can do this in your FTP client). Link to comment https://forums.phpfreaks.com/topic/154890-upload-processor-problem/#findComment-814755 Share on other sites More sharing options...
cnorris Posted April 20, 2009 Author Share Posted April 20, 2009 Not sure but this did not work. I think what you did, is exactly what I was doing... in a sense because i got the same error of "insufficient permissions" I am pasting the exact statement that technical support stated: You are trying to write to a temporary location before storing the file in its final folder and you do not have permission to place anything outside of your root directory. with that said, it looks like the code is saving the file initially, then trying to move it to the actual folder. I did talk to them on the phone and they said, i do NOT have access/permissions to anything outside of my ROOT directory which is called "www". Below I am trying to describe to you what my folder structure looks like. ROOT ("www") folder "kits" folder "images" folder "uploaded_files" index.html upload_form.php upload_processor.php .... maybe we create a temp file under the root???? How do you do that? Can you help? Link to comment https://forums.phpfreaks.com/topic/154890-upload-processor-problem/#findComment-814799 Share on other sites More sharing options...
soak Posted April 20, 2009 Share Posted April 20, 2009 After $uploadsDirectory is set in your code add the following lines: echo "<pre>"; var_dump($uploadsDirectory); var_dump(dirname(__FILE__)); die; And post these two paths please. It could be that the tmp dir is not writeable but I think that unlikely TBH. If it is then php is set up badly by your host. Link to comment https://forums.phpfreaks.com/topic/154890-upload-processor-problem/#findComment-814805 Share on other sites More sharing options...
cnorris Posted April 20, 2009 Author Share Posted April 20, 2009 After $uploadsDirectory is set in your code add the following lines: echo "<pre>"; var_dump($uploadsDirectory); var_dump(dirname(__FILE__)); die; And post these two paths please. It could be that the tmp dir is not writeable but I think that unlikely TBH. If it is then php is set up badly by your host. the two lines are: string(14) "/upload_files/" string(59) "\\HOSTING\DFS\20\6\5\0\2036842056\user\sites\nfinia.com\www" LMK what I can do. Link to comment https://forums.phpfreaks.com/topic/154890-upload-processor-problem/#findComment-814820 Share on other sites More sharing options...
soak Posted April 20, 2009 Share Posted April 20, 2009 $uploadsDirectory = dirname(__FILE__) . '\\uploaded_files\\'; Link to comment https://forums.phpfreaks.com/topic/154890-upload-processor-problem/#findComment-814860 Share on other sites More sharing options...
cnorris Posted April 21, 2009 Author Share Posted April 21, 2009 $uploadsDirectory = dirname(__FILE__) . '\\uploaded_files\\'; this worked!!!!! thank you sir. Can you tell me how this line of code works for my understanding? Link to comment https://forums.phpfreaks.com/topic/154890-upload-processor-problem/#findComment-815113 Share on other sites More sharing options...
Recommended Posts
Archived
This topic is now archived and is closed to further replies.