我的PHP webapp遇到了一个非常奇怪的问题。我把它设计成模块化的,我的代码被分成更小的文件,因此它不会太过于压倒性。我的应用程序是一个非营利组织的资金应用程序管理系统,我遇到问题的模块计算并输出自提交申请以来的营业时间。
此“时间”模块包含在我的应用的多个不同部分中。在某些地方,一切都很好。然而,在一个特定的位置,模块似乎不执行,而是输出数字“12”。这可能是我的代码一次做太多,导致PHP耗尽内存的结果吗?
“时间”模块:
<?php
/* Time Module
Added for Version: 1.1
Last Updated: 10/11/2012
*/
$timeSince = time() - (int)$item['timestamp']; //Calculate the number of seconds between now and the application's submission
$timeSince = $timeSince / 60 / 60; //60secs; 60mins - Convert the seconds to hours
$timeSince = round($timeSince); //Round up or down to give us a whole number
if( //Set the highlight color to green if we're within the review timeframe.
($timeSince <= 12 && $item['appStatus']=="0") ||
($timeSince <= 48 && $item['appStatus']=="1") ||
($timeSince <= 72 && $item['appStatus']=="2")
)
$timeColor="#090";
elseif( //If we're slightly behind the timeframe, highlight as yellow
($timeSince <= 24 && $item['appStatus']=="0") ||
($timeSince <= 60 && $item['appStatus']=="1") ||
($timeSince <= 84 && $item['appStatus']=="2")
)
$timeColor="#F90";
else //If we're far behind the timeframe, highlight as red
$timeColor="#F33";
?>
Submitted: <?php echo date("F j, Y", $item['timestamp']) ?><br>
<?php if($item['appStatus']=="0" || $item['appStatus']=="1" || $item['appStatus']=="2") { ?>
<span style="color:<?php echo $timeColor ?>"><?php echo $timeSince ?></span> Hours Since Submission
<?php } ?>
包含文件的代码(在一行操作按钮下):
<div style="float:right; padding:10px; text-align:right;">
<?php if(isset($includePrefix)) { ?>
<a href="appAssets/print.php?id=<?php echo $_GET['id'] ?>" target="_blank">
<img src="appAssets/print.png" alt="Print This Application" align="middle" title="Print This Application" /></a>
<a href="mailto:<?php echo $item['agencyEmail'] ?>">
<img src="appAssets/email.png" alt="Email Agency" align="middle" title="Email Agency" /></a>
<?php if(!$hide) { ?>
<a href="#" id="disbursementLink">
<img src="appAssets/dollar.png" alt="Disbursment Instructions" align="middle" title="Disbursement Instructions" /></a>
<?php } ?>
<br />
<?php } ?>
<?php include_once("time.php") ?>
</div>
答案 0 :(得分:0)
PHP耗尽内存会产生非常具体的“内存不足”致命错误。我怀疑你的脚本正在做一些会使PHP耗尽内存的东西,因为你没有处理任何内存密集型(没有图像/视频处理,没有加载大量的SQL数据)。
由于您没有看到错误,只是奇怪的输出(12)我假设您没有激活错误报告:
error_reporting(E_ALL); // or other level if it's more convenient
ini_set('display_errors', TRUE); // outputs errors to the browser
ini_set('scream.enabled', TRUE); // ignores the `@` error silencing operator
如果没有错误(忽略通知和警告),则很可能您的代码正在运行。问题变得协调了编写代码的方式和它的工作方式。
在procedural programming
方法中,您使用的变量是全局变量。在退出过程范围(关闭括号之后)或退出模块范围(在一个文件结束之后)时,环境不会取消设置这些变量。
这样的环境可以允许在某个时刻设置全局变量,并且代码的另一部分可以稍后尝试使用它 - 期望它具有不同的值。甚至更可能 - 当多次调用模块时,其变量继续具有上次执行时的值。
答案 1 :(得分:0)
当我打开错误报告时,我发现由于某种原因,它包含了另一个名为“time.php”的文件,该文件位于网站的根目录中。这个特殊的文件是我正在研究的测试脚本,我试图计算两个日期之间的营业时间(如果有人感兴趣,我可以分享它)。此文件输出的数字为“12”,因为这是我正在使用的测试日期之间的时间。
我的webapp由跨越多个目录级别的包含Web组成,因此PHP在这种情况下必须遵循规则。原始脚本执行在站点的根目录中开始,因此在查找子目录之前必须查找该文件(“time”模块包含在另一个模块中,该模块位于“modules”子目录中)。由于站点的根目录中有“time.php”,而modules目录中有“time.php”,因此它支持站点根目录中的“time.php”。