如何停止进一步的php解析,但继续页面加载

如何停止进一步的php解析,但继续页面加载,php,Php,我有一个图像上传页面(单页)。提交时,检查文件大小和类型,如果违反规则,则在每个文件上退出。问题是整个页面停止 如何停止处理剩余的php(或中断当前的)并加载页面的其余部分?您应该将代码移动到函数中,然后从中返回 function processImage($img) { if (imageIsTooLarge($img)) return false; doOtherStuff(); return true; } $ok = processImage(

我有一个图像上传页面(单页)。提交时,检查文件大小和类型,如果违反规则,则在每个文件上退出。问题是整个页面停止


如何停止处理剩余的php(或中断当前的
)并加载页面的其余部分?

您应该将代码移动到函数中,然后从中返回

function processImage($img)
{
    if (imageIsTooLarge($img))
        return false;

    doOtherStuff();
    return true;
}

$ok = processImage($someImage);

为了简单起见,您可以将代码封装在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

    }
}
//如果文件大小不大于maxsize,则继续分析图像

如果($FIXISIZE

退出)字面意思是Ext()吗?如果是这样,考虑为用户生成一个错误消息并显示它,您可以只丢弃上传的文件。

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

如果您不想用额外的函数之类的东西污染名称空间,这是
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块金字塔。如果你将它包装在if块中,然后将每个后续条件包装在从属if块中,你最终会得到这个巨大的、难以理解的缩进混乱(假设你格式化了代码)使用难以追踪到其开始块的右大括号;使用
do{…}while(0);
将所有内容保持在相同的逻辑缩进级别。

使用新的goto函数:

<?php
//code is executed
goto a;
//code is not executed
echo "Not Executed";

a:
//code is executed
echo "Executed";
?>


谢谢你提供的信息。我接受了这个建议,但也感谢大家的投入。我总是喜欢学习新的东西。+1,我喜欢这个“窍门”。以前从未使用过,所以谢谢你教我一些新东西。:P+1,可能会派上用场。如果你正在查找,也可以将它与@RM的解决方案混合在一起,以解析错误消息g获取更详细的错误消息(即文件大小过大和扩展名无效)。