我有一个图片上传页面(单页)。提交时检查文件大小并键入,如果违反规则则退出。问题是整个页面都停止了。
如何停止处理php的剩余部分(或突破当前<? ?>
)并加载页面的其余部分?
答案 0 :(得分:6)
您应该将代码移动到一个函数中,然后只需return
即可。
function processImage($img)
{
if (imageIsTooLarge($img))
return false;
doOtherStuff();
return true;
}
$ok = processImage($someImage);
答案 1 :(得分:4)
如果你不想用额外的函数和诸如此类的东西污染命名空间,这是do { ... } while (0);
循环的完美情况。
do {
// processing
if (!check_file_size($image)) {
echo 'The image is too big';
break;
}
if (!check_file_type($image)) {
echo 'The image is of the wrong type';
break;
}
echo $image;
} while (0);
do-while(0)循环是从某种处理中获取条件退出的无名英雄,而无需在代码中编写函数和函数调用。虽然增益可以忽略不计,但这也会阻止PHP解析器创建一个额外的符号,然后再次查找它,几乎没有理由。
编辑:当你的条件太大时,它也会阻止你进入巨大的if-block金字塔。如果你把它包装在一个if块中,并且每个后续条件都包含在一个依赖的if-block中,你最终会有这个巨大的,难以理解的缩进(假设你格式化你的代码),并且关闭括号很难跟踪到他们的开放区;使用do { ... } while (0);
将所有内容保持在相同的逻辑缩进级别。
答案 2 :(得分:1)
为简单起见,您可以将代码包装在 if()语句中。
// continue parsing image if filesize not greater than maxsize
if ($filesize <= $max_size) {
// contine parsing image if filetype is fine
if (in_array($extension, array('jpg','jpeg','gif')) {
// remainder of your PHP code goes in here for parsing image upload
}
}
所有HTML都应该在这个PHP块之下。
答案 3 :(得分:1)
退出时,你的意思是退出()吗?如果是这样,请考虑为用户生成错误消息并显示该错误消息,您可以放弃上传的文件。
if(image is too large) {
$err = "The image you uploaded is too large";
}
if(image wrong file type) {
$err = "You have not uploaded a valid image file";
}
if(!isset($err) {
proceesImage();
}
// echo out $err to user
答案 4 :(得分:0)
使用新的转到功能:
<?php
//code is executed
goto a;
//code is not executed
echo "Not Executed";
a:
//code is executed
echo "Executed";
?>