重定向不使用各种方法

时间:2017-09-01 15:53:55

标签: php html redirect url-redirection

我点击提交表单按钮启动了以下PHP脚本:

<?php
//header('Location: video_download.html');
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["logo"]["name"]);
$uploadOk = 1;
$imageFileType = pathinfo($target_file,PATHINFO_EXTENSION);
$new_name = 'logo'.'.'.$imageFileType;
$target_file = $target_dir . $new_name;
// Check if image file is a actual image or fake image
if(isset($_POST["submit"])) {
    $check = getimagesize($_FILES["logo"]["tmp_name"]);
    if($check == false) {
        echo "File is not an image.\n";
        $uploadOk = 0;
    }
}
// Check file size
if ($_FILES["logo"]["size"] > 5000000) {
    echo "Sorry, your file is too large.\n";
    $uploadOk = 0;
}
// Allow certain file formats
if($imageFileType != "png") {
    echo "Sorry, only PNG files are allowed.\n";
    $uploadOk = 0;
}
// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    echo "Sorry, your file was not uploaded.\n";

if (file_exists("config.txt")) {
    unlink("config.txt");
}
if (file_exists("upload/logo.png")) {
    unlink("upload/logo.png");
}
// if everything is ok, try to upload file & create config.txt
} else {
    if (move_uploaded_file($_FILES["logo"]["tmp_name"], $target_file)) {
                $template = $_POST['template'] . "\n";
                $club = $_POST['club'] . "\n";
                $stats = $_POST['stats'];
                if (file_exists("config.txt")) {
                    unlink("config.txt");
                }
                file_put_contents("config.txt", $template . $club . $stats);
                echo '<meta http-equiv="Refresh" content="0; url=video_download.html">';
                shell_exec("./blender_lite/bin/blender -b -P blender.py");
                exit();
        } else {
        echo "There was an error uploading your file.\n";
                exit();
    }
}
?>

我希望它在执行所有脚本内容后将浏览器重定向到另一个html页面。我尝试了两种不同的方法:标题(在上面的代码中注释)并使用重定向回显html元标记。

两者都不是因为不明原因而工作而我找不到它(已经过了好几个小时试图寻找其他方法并解决问题而没有成功,所以我猜它有点像我的PHP脚本的一部分具体问题)。欢迎任何帮助,谢谢:)

3 个答案:

答案 0 :(得分:0)

您可以使用标题功能。

def test_date_format(date_string):
    try:
        datetime.strptime(date_string, '%Y%m')
        return True
    except ValueError:
        logger.error()
        return False

error_happened = False # Not strictly needed, but makes the code neater IMHO
error_happened |= test_date_format("201701")
error_happened |= test_date_format("201702")
error_happened |= test_date_format("201799")

if error_happened:
    logger.error("oh no!")
    sys.exit(1)

答案 1 :(得分:0)

使用header location命令替换用于回显元刷新的代码部分,并将其放在逻辑的末尾。这只会在其他所有内容完成时重定向。

示例:

if (move_uploaded_file($_FILES["logo"]["tmp_name"], $target_file)) {
            $template = $_POST['template'] . "\n";
            $club = $_POST['club'] . "\n";
            $stats = $_POST['stats'];
            if (file_exists("config.txt")) {
                unlink("config.txt");
            }
            file_put_contents("config.txt", $template . $club . $stats);
            shell_exec("./blender_lite/bin/blender -b -P blender.py");
            header('Location: video_download.html'); // <-- put redirect here
            exit();
    } else {
    echo "There was an error uploading your file.\n";
            exit();
}

答案 2 :(得分:0)

发现重定向工作正常,就像我在第一篇文章中所做的那样。问题是PHP等待shell_exec结束。因此,由于我使用shell_exec启动了一个blender渲染,所以它需要几分钟才能结束,所以我认为重定向无效。

使用exec('bash -c "exec nohup setsid ./blender_lite/bin/blender -b -P blender.py > /dev/null 2>&1 &"'); 而不是shell_exec("./blender_lite/bin/blender -b -P blender.py"); 因此PHP脚本不会等待命令结束是解决方案,重定向现在是立即的。