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

时间:2009-11-04 11:13:22

标签: php

我有一个图片上传页面(单页)。提交时检查文件大小并键入,如果违反规则则退出。问题是整个页面都停止了。

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

5 个答案:

答案 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";
?>