【发布时间】:2014-08-31 17:03:38
【问题描述】:
例如,现在当我使用die() 或exit() 终止脚本时,我的页面看起来已经损坏了一半,因为页面的html 的底部无法加载,因为它是使用include() 函数引入的。
那么有没有办法告诉 PHP “除了网页加载的其余部分,不允许执行任何其他命令”?
我正在使用它作为图片上传脚本。
前台:
但是当我上传了错误的文件类型或根本没有文件时,它会破坏我的网页,因为我设置了 exit();
我能做些什么来解决这个问题?这是我的代码,你会注意到 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>";
}
【问题讨论】:
-
不要在函数内部回显。将您的业务逻辑与您的表示层 (html) 分开
-
@Fred -ii- 这是什么意思...?
-
@BrianCherdak 你是什么意思?我想你可能已经看到了我对 Rakesh 的评论的评论;不用担心,一切都很好。现在,您可以尝试使用
return;看看它是否适合您,虽然不是 100% 确定它会起作用,但请尝试一下。 -
我仍然有问题,我尝试了 break(); @matthew5025
-
不要让 PHP 来弥补糟糕的编码。不要回显错误消息,将它们放在变量中。然后在代码的底部,你对图像做了所有聪明的事情,对错误消息变量进行测试,如果有错误就输出错误,否则做聪明的事情并输出图像信息