我点击提交表单按钮启动了以下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脚本的一部分具体问题)。欢迎任何帮助,谢谢:)
答案 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脚本不会等待命令结束是解决方案,重定向现在是立即的。