PHP/HTML提交跳转404求助:毕业年龄计算器iPages部署异常
解决iPages部署PHP毕业年龄计算器后表单提交404的问题
看起来你在本地Eclipse里运行正常的毕业年龄计算器,放到iPages(PHP 5.6)服务器后就遇到了表单提交跳404的问题——这种本地与服务器环境的差异类问题很常见,咱们一步步排查解决:
一、先排查最容易踩的文件路径/命名坑
- iPages服务器对文件大小写敏感:你的表单
action指向的是grad.php,一定要确认服务器上的文件是完全同名(比如有没有写成Grad.php或者GRAD.php),Linux环境下大小写不匹配会直接返回404。 - 确认文件目录位置:检查
grad.php是不是和你的HTML文件在同一个目录下,如果不在,要写对相对路径(比如子目录下写成./subfolder/grad.php)。
二、推荐把表单和处理代码合并到同一个文件
很多共享主机(包括iPages)对跨文件的表单提交有路径限制,你可以把表单和PHP处理逻辑放在同一个文件里,修改表单的action为当前文件:
<form action="" method="POST"> <!-- 或者更严谨的写法 --> <form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="POST">
这样就彻底避免了路径匹配错误导致的404,代码也更集中好维护。
三、检查iPages的PHP配置限制
iPages的PHP 5.6环境可能有全局变量的安全限制,你可以在代码开头加一段测试代码,确认$_POST是否能正常获取数据:
<?php var_dump($_POST); // 提交表单后看是否能输出POST数据 ?>
如果输出为空,可能需要联系iPages客服开启相关配置,或者检查服务器的php.ini中register_globals、post_max_size等参数的设置(不过PHP 5.6中register_globals默认已关闭,更可能是服务器的安全拦截)。
四、排查.htaccess的重写规则干扰
如果你的网站根目录有.htaccess文件,里面的URL重写规则可能会拦截grad.php的请求。可以暂时把.htaccess重命名为.htaccess.bak,然后测试表单提交是否正常,如果恢复正常,再去排查重写规则中的问题。
五、修正代码里的小语法问题
你的PHP代码里有个不规范的地方:If($bYear> $gYear...这里的If是大写的,虽然PHP不区分大小写,但严格来说统一用小写if更稳妥,避免某些服务器的语法检查报错。
修改后的完整可运行代码
下面是把表单和处理逻辑合并、修正语法后的完整代码,直接上传到iPages就能用:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN"> <html> <head> <title>Graduation Calculator</title> </head> <body> <img alt="Graduation Banner" src="Balloon-Banner.jpg" width="1050" height="180"> <form action="" method="POST"> <center> <br><br><br> <label><?php echo "Today is " . date("m/d/Y"); ?></label> <br><br><br> <label>Enter your birth year: </label> <input type="text" name="birthYear" /> <label>Enter your graduation year: </label> <input type="text" name="gradYear" /> <br> <label>Enter your Birth Month: </label> <input type="text" name="birthMonth"/> <label> Enter your graduation month</label> <input type="text" name="gradmonth" /> <br> <label> Enter your birthday</label> <input type="text" name="birthDay" /> <label>Enter your graduation day: </label> <input type="text" name="gradday" /> <br> <input type='submit' value='Graduation Age' id='submit' /> </center> </form> <?php $submitted = !empty($_POST); if ($submitted == true) { $bYear = (int)$_POST['birthYear']; $gYear = (int)$_POST['gradYear']; $gMonth = (int)$_POST['gradmonth']; $bMonth = (int)$_POST['birthMonth']; $bday = (int)$_POST['birthDay']; $gday = (int)$_POST['gradday']; $age = getAge($bYear, $gYear, $bMonth, $gMonth, $bday, $gday); if($age!= NULL){ echo "<p>You will be " . $age . " at your graduation.</p>"; } else{ echo "<p>INVALID INPUT, PLEASE TRY AGAIN</p>"; } } function getAge( $bYear, $gYear, $bMonth, $gMonth, $bday, $gday) { if($bYear > $gYear || $bMonth >12 || $gMonth >12 || $bday >31 || $gday >31 || $bYear == 0 || $gYear == 0 || $bMonth == 0 || $bday == 0 || $gMonth ==0|| $gday == 0){ return NULL; } $age = $gYear - $bYear; if($bMonth == $gMonth){ if($bday <= $gday){ return $age; } else{ $age = $age-1; return $age; } } elseif($bMonth < $gMonth){ return $age; } else{ return $age-1; } return $age; } ?> </body> </html>
内容的提问来源于stack exchange,提问作者Kayla Johnston
相关产品推荐
相关产品推荐

