For example, now when I kill a script using die()
or exit()
my pages look half broken because the bottom part of the page's html failed to load since it was being brought in using the include()
function.
So is there a way to tell PHP "don't allow any more commands to be executed except the rest of the webpage loading" ?
I am using this for an image upload script.
front:
but when I have a wrong file type uploaded or no file at all, it breaks my webpage because I set exit();
What can I do to fix this? Here is my code and you'll notice the exit();'s
if (isset($_POST['submit']))
{
$file_uniq_id = uniqid();
// Access the $_FILES global variable for this specific file being uploaded
// and create local PHP variables from the $_FILES array of information
$fileName = $_FILES["uploaded_file"]["name"]; // The file name
$fileTmpLoc = $_FILES["uploaded_file"]["tmp_name"]; // File in the PHP tmp folder
$fileType = $_FILES["uploaded_file"]["type"]; // The type of file it is
$fileSize = $_FILES["uploaded_file"]["size"]; // File size in bytes
$fileErrorMsg = $_FILES["uploaded_file"]["error"]; // 0 for false... and 1 for true
$kaboom = explode(".", $fileName); // Split file name into an array using the dot
$fileExt = end($kaboom); // Now target the last array element to get the file extension
// START PHP Image Upload Error Handling --------------------------------------------------
if (!$fileTmpLoc)
{ // if file not chosen
echo "ERROR: Please browse for a file before clicking the upload button.";
exit();
}
else
if ($fileSize > 5242880)
{ // if file size is larger than 5 Megabytes
echo "ERROR: Your file was larger than 5 Megabytes in size.";
unlink($fileTmpLoc); // Remove the uploaded file from the PHP temp folder
exit();
}
else
if (!preg_match("/.(gif|jpg|png)$/i", $fileName))
{
// This condition is only if you wish to allow uploading of specific file types
echo "ERROR: Your image was not .gif, .jpg, or .png.";
unlink($fileTmpLoc); // Remove the uploaded file from the PHP temp folder
exit();
}
else
if ($fileErrorMsg == 1)
{ // if file upload error key is equal to 1
echo "ERROR: An error occured while processing the file. Try again.";
exit();
}
// END PHP Image Upload Error Handling ----------------------------------------------------
// Place it into your "uploads" folder mow using the move_uploaded_file() function
$moveResult = move_uploaded_file($fileTmpLoc, "uploads/$fileName");
// Check to make sure the move result is true before continuing
if ($moveResult != true)
{
echo "ERROR: File not uploaded. Try again.";
unlink($fileTmpLoc); // Remove the uploaded file from the PHP temp folder
exit();
}
// unlink($fileTmpLoc); // Remove the uploaded file from the PHP temp folder
// ---------- Include Adams Universal Image Resizing Function --------
include_once ("libs/ak_php_img_lib_1.0.php");
$target_file = "uploads/$fileName";
$resized_file = "uploads/" . $file_uniq_id . "." . $fileExt;
$resized_file_final = $file_uniq_id . "." . $fileExt;
mysql_query("UPDATE users SET profile_image = '$resized_file_final' WHERE id = '$id' ");
$wmax = 128;
$hmax = 128;
ak_img_resize($target_file, $resized_file, $wmax, $hmax, $fileExt);
unlink($target_file);
// ----------- End Adams Universal Image Resizing Function -----------
// Display things to the page so you can see what is happening for testing purposes
echo "The file named <strong>$fileName</strong> uploaded successfuly.<br /><br />";
echo "It is <strong>$fileSize</strong> bytes in size.<br /><br />";
echo "It is an <strong>$fileType</strong> type of file.<br /><br />";
echo "The file extension is <strong>$fileExt</strong><br /><br />";
echo "The Error Message output for this upload is: <strong>$fileErrorMsg</strong><br /><br />";
echo "The new name for the file is: <strong>$resized_file_final</strong>";
}
Try this, the idea is you have to complete the whole script so you get to add the page footer so the page looks complete. So instead of echoing errors as you find them AND THEN EXITing the script, save them in a variable. Then once you get to the main part of the script i.e. the image is loaded and you want to resize it, you decide if you had an error to output only the error and not do the image resize. If no errors are found then you fiddle with the image and dont output any error messages.
if (isset($_POST['submit']))
{
$file_uniq_id = uniqid();
// Access the $_FILES global variable for this specific file being uploaded
// and create local PHP variables from the $_FILES array of information
$fileName = $_FILES["uploaded_file"]["name"]; // The file name
$fileTmpLoc = $_FILES["uploaded_file"]["tmp_name"]; // File in the PHP tmp folder
$fileType = $_FILES["uploaded_file"]["type"]; // The type of file it is
$fileSize = $_FILES["uploaded_file"]["size"]; // File size in bytes
$fileErrorMsg = $_FILES["uploaded_file"]["error"]; // 0 for false... and 1 for true
$kaboom = explode(".", $fileName); // Split file name into an array using the dot
$fileExt = end($kaboom); // Now target the last array element to get the file extension
// START PHP Image Upload Error Handling
$Err = NULL;
if (!$fileTmpLoc)
{ // if file not chosen
$Err = "ERROR: Please browse for a file before clicking the upload button.";
}
else
if ($fileSize > 5242880)
{ // if file size is larger than 5 Megabytes
$Err = "ERROR: Your file was larger than 5 Megabytes in size.";
unlink($fileTmpLoc); // Remove the uploaded file from the PHP temp folder
}
else
if (!preg_match("/.(gif|jpg|png)$/i", $fileName))
{
// This condition is only if you wish to allow uploading of specific file types
$Err = "ERROR: Your image was not .gif, .jpg, or .png.";
unlink($fileTmpLoc); // Remove the uploaded file from the PHP temp folder
}
else
if ($fileErrorMsg == 1)
{ // if file upload error key is equal to 1
$Err = "ERROR: An error occured while processing the file. Try again.";
}
// END PHP Image Upload Error Handling
// Place it into your "uploads" folder mow using the move_uploaded_file() function
$moveResult = move_uploaded_file($fileTmpLoc, "uploads/$fileName");
// Check to make sure the move result is true before continuing
if ($moveResult != true) {
$Err = "ERROR: File not uploaded. Try again.";
// not needed PHP is supposed to do this
// unlink($fileTmpLoc);
}
// ---------- Include Adams Universal Image Resizing Function --------
if ( ! isset( $Err ) ) {
include_once ("libs/ak_php_img_lib_1.0.php");
$target_file = "uploads/$fileName";
$resized_file = "uploads/" . $file_uniq_id . "." . $fileExt;
$resized_file_final = $file_uniq_id . "." . $fileExt;
mysql_query("UPDATE users
SET profile_image = '$resized_file_final'
WHERE id = '$id' ");
$wmax = 128;
$hmax = 128;
ak_img_resize($target_file, $resized_file, $wmax, $hmax, $fileExt);
unlink($target_file);
// ----------- End Adams Universal Image Resizing Function -----------
// Display things to the page so you can see what is happening for testing purposes
// as we had to process error in this if we better test again
echo "The file named <strong>$fileName</strong> uploaded successfuly.<br /><br />";
echo "It is <strong>$fileSize</strong> bytes in size.<br /><br />";
echo "It is an <strong>$fileType</strong> type of file.<br /><br />";
echo "The file extension is <strong>$fileExt</strong><br /><br />";
echo "The Error Message output for this upload is: <strong>$fileErrorMsg</strong><br /><br />";
echo "The new name for the file is: <strong>$resized_file_final</strong>";
} else {
echo $Err;
}
}