我最近开始编写一个用于html输出的脚本(希望)可以减少我工作中的繁忙工作。它是一个改编自我在python中编写的函数脚本的脚本,但我不认为这是问题。
我在php脚本的开头有以下代码来识别错误:
ini_set('display_errors', 1);
error_reporting(E_ALL ^ E_NOTICE);
我已将程序放在服务器上并尝试运行它。我的第一个问题是,在程序的中途,它开始通过if语句将源代码(减去HTML标签)转储到窗口中:
$moonSet[0]){
$t = 3;
} # Case 4, set time greater than rise time
else {
$t = 4;
}
作为参考,代码中断的实际部分是这样的:
# Case 1, no rise time on current date
if ($moonRise[0] == 0){
$t = 1;
} # Case 2, no set time on current/next date
elseif ($moonSet[0] == 0){
$t = 2;
} # Case 3, rise time greater than set time
elseif ($moonRise[0] > $moonSet[0]){
$t = 3;
} # Case 4, set time greater than rise time
else {
$t = 4;
}
我相信服务器上使用的php版本至少是PHP 5.x,因为当html编码使用<??>
而不是<?php?>
时,源代码会被转储到窗口。问题是,当我使用<?php?>
时,所有输出都会消失 - 包含HTML标记。查看源代码,它只显示1表示第一行代码,表明文件中实际上没有代码。只有当我使用<?php?>
代替<??>
时才会发生这种情况。
然后我尝试逐步完成代码以确定原因,一,代码突然中断if语句,以及两个,为什么使用<?php?>
来激活输出。
我最终发现的是<?php?>
代码工作正常,直到我添加循环。该程序使用MySQL查询,据我所知,查询工作得很好。执行的程序,在测试代码的开头和结尾都输出,显示在屏幕上。
SQL代码是这样的:
$connection = mysql_connect("localhost", "webuser", "webuser");
mysql_select_db("dbAstro", $connection);
$queryTides = "SELECT tideDateTime, tideHeight, tideHorL FROM tblTides WHERE DATE(tideDateTime) BETWEEN '$targetDate[0] 00:00:00' AND '$targetDate[2] 23:59:59' ORDER BY tideDateTime";
$querySun = "SELECT sunDate, sunRise, sunSet FROM tblSunRiseSet WHERE DATE(sunDate) BETWEEN '$targetDate[0] 00:00:00' AND '$targetDate[2] 23:59:59' ORDER BY sunDate";
$queryMoon = "SELECT moonDate, moonRise, moonSet FROM tblMoonRiseSet WHERE DATE(moonDate) BETWEEN '$targetDate[0] 00:00:00' AND '$targetDate[2] 23:59:59' ORDER BY moonDate";
$queryTwi = "SELECT twilightDate, twilightBeg, twilightEnd FROM tblCivilTwilight WHERE DATE(twilightDate) BETWEEN '$targetDate[0] 00:00:00' AND '$targetDate[2] 23:59:59' ORDER BY twilightDate";
#Query results stored in separate result locations for later reference.
$resultTi = mysql_query($queryTides, $connection);
$resultSu = mysql_query($querySun, $connection);
$resultMo = mysql_query($queryMoon, $conneciton);
$resultTwi = mysql_query($queryTwi, $connection);
到目前为止,使用<?php?>
和<??>
标记之间的区别在于<??>
不会显示printf('')命令。 <?php?>
显示了printf('')命令,但是在数据库中有一个空值的消息 - 数据库中有一些空值。
问题是脚本进入循环时。在发出循环命令时,无论是while还是for,<?php?>
脚本都会从输出和浏览器中查看源代码时消失。 <??>
作为标记仍然输出HTML,但不输出任何php命令 - 基本的printf('')或echo命令。
我想强调它是通过任何循环执行此操作 - 而不仅仅是搜索SQL查询的while循环(预期目标,如下所示):
$b = 0;
while ($astroRow = mysql_fetch_assoc($resultTi)) {
$tideTime[$b] = date_format("$astroRow[tideDateTime]", "hi");
$b++;
}
当我试图用非常基本的东西替换循环时,像这样:
for ($a = 0; $a < 2; $a++) {
echo $a;
}
发生了相同的模式。一个人会开始将输出转储到屏幕或显示没有来自php的输出,<?php?>
标签将不会显示任何代码或输出。
我不知所措。我不知道问题是什么,尝试搜索帮助网站并没有让我找到问题的答案。有人会知道到底发生了什么吗?